二丫讲梵 二丫讲梵
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • AWS
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancher
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • LLM
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • json2go (opens new window)
    • gopher (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)

二丫讲梵

行者常至,为者常成
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • AWS
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancher
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • LLM
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • json2go (opens new window)
    • gopher (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)
  • Nexus系列文章

  • Jenkins系列文章

  • ELK笔记

    • ELK

    • FileBeat

    • LogStash

      • logstash本地调试日志方法详解
      • logstash采集日志的时间格式探微
      • logstash配置geoip画访问地域热图
        • 1,下载库。
        • 2,logstash 配置。
          • 1,全解析
          • 2,正式配置
          • 3,绘图
    • ElasticSearch

    • Kibana

  • Kubernetes笔记

  • LLM专题

  • 系列专题
  • ELK笔记
  • LogStash
二丫讲梵
2019-12-02
目录

logstash配置geoip画访问地域热图

文章发布较早,内容可能过时,阅读注意甄别。

geoip 主要用于 kibana 绘制地理区域图时使用,原理就是通过一个 IP 库,根据 IP 直接获取对应的地理坐标等信息,从而在地图上进行展示。

# 1,下载库。

既然依赖库,那么就先下载一下对应的库:

wget https://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz
1

这个库是每周一更新的,在生产环境当中如果想要保证最终结果的准确性,可能需要周期性更新这个库。

解压:

$ tar xf GeoLite2-City.tar.gz
$ mv GeoLite2-City_20191126/GeoLite2-City.mmdb /etc/logstash/
1
2

然后在配置 logstash 转发日志的时候,将这个库引入即可。

# 2,logstash 配置。

网上针对这个地方的配置各种各样,致使我们有时候反而不知自己应该怎么配置才是最优的,之前我个人的思路也没走对,以至于费了不少功夫,没有多大收获。

这里需要进行一波调试,通过调试,我们获取自己想要的内容,让配置达到最优化。

# 1,全解析

想要得到最终答案,我们需要先看看配置项都给了我们哪些选择,这个时候可以直接用如下配置对 NGINX 访问日志进行解析:

input {
  kafka {
    bootstrap_servers  => "192.168.3.0:9092"
    group_id          => "nginx"
    consumer_threads => 6
    topics            => "nginx"
    codec             => "json"
    client_id => "nginx"
  }
}
filter {
  geoip {
    source => "remote_addr"
    database => "/etc/logstash/GeoLite2-City.mmdb"
  }
}
output {
  stdout {
    codec => rubydebug
  }
}
# output {
#  elasticsearch {
#  hosts => ["http://192.168.3.0:9200"]
#  index => "logstash-nginx-%{+YYYY.MM}"
#  }
#}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

通过 filter 规则中的 geoip 模块进行解析, source用于指定日志当中记录客户端 IP 的字段,database则指定了我们解压之后的 IP 库。同时使用将日志打印到前台的方式,便于观察调试。

此时如有日志过来,则可以看到经由 logstash 接管之后的日志样式如下:

{
            "request_time" => "5.495",
               "httpversion" => "HTTP/1.1",
               "request_uri" => "/synchrony-proxy/v1/bayeux-sync1",
               "server_name" => "abc.com",
                   "message" => "",
                        "ip" => "10.3.2.12",
                  "@version" => "1",
                     "geoip" => {
          "country_name" => "China",
              "timezone" => "Asia/Shanghai",
             "longitude" => 120.1619,
           "region_name" => "Zhejiang",
         "country_code2" => "CN",
             "city_name" => "Hangzhou",
              "latitude" => 30.294,
           "region_code" => "ZJ",
        "continent_code" => "AS",
                    "ip" => "115.239.211.92",
              "location" => {
            "lat" => 30.294,
            "lon" => 120.1619
        },
         "country_code3" => "CN"
         },
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

内容比较多,这里只截取了我们想要的部分内容进行后续的讲解。

看到默认的情况下,geoip 模块给出的信息还是很多的,但并不是所有的都会用到,各位可以根据自己的需求进行按需配置。

这里可以用到两个关键字:

  • fileds:表示只保留自己想要的字段。
  • remove_field:表示删除某些不想要的字段。

# 2,正式配置

根据我的实际需求,最终我的配置如下:

input {
  kafka {
    bootstrap_servers  => "192.168.3.0:9092"
    group_id          => "nginx"
    consumer_threads => 6
    topics            => "nginx"
    codec             => "json"
    client_id => "nginx"
  }
}
filter {
  geoip {
    source => "remote_addr"
    database => "/etc/logstash/GeoLite2-City.mmdb"
    fields => ["country_name","region_name","city_name","location"]
  }
}
output {
  elasticsearch {
    hosts => ["http://192.168.3.0:9200"]
    index => "logstash-nginx-%{+YYYY.MM}"
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

只保留了国家,省份,城市,坐标这四个信息,在绘制地理坐标图的时候,已经够用了。

此处需要注意的一个地方就是最后输出的索引名称,必须是以 logstash 开头才行,否则在 kibana 当中绘制的时候,将无法解析到 IP 的坐标信息。

# 3,绘图

创建一个 坐标地图类型的可视化,然后选择对应的索引,进入到配置界面,指标就用默认的计数,主要的配置是下边的存储桶当中,聚合选择Geohash,字段选择geoip.location(如果此处看不到这个字段,应该就是上边注意点没有遵守,需要让索引名称以 logstash 开头),然后点击播放,即可看到对应访问热图呈现在了右侧地图当中了。

绘制地理热图如下:

image-20191202110445187

微信 支付宝
#elk#logstash
上次更新: 2024/07/04, 22:40:37
logstash采集日志的时间格式探微
elasticsearch高可用的探索

← logstash采集日志的时间格式探微 elasticsearch高可用的探索→

最近更新
01
从赵心童世锦赛夺冠聊聊我的斯诺克情缘
05-16
02
学习周刊-总第211期-2025年第20周
05-15
03
记录二五年五一之短暂回归家庭
05-09
更多文章>
Theme by Vdoing | Copyright © 2017-2025 | 点击查看十年之约 | 浙ICP备18057030号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式