设为首页 收藏本站
查看: 1036|回复: 0

[经验分享] ELK 通过地理位置显示访问来源

[复制链接]

尚未签到

发表于 2019-1-28 11:51:12 | 显示全部楼层 |阅读模式

  • Elasticsearch是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统。它构建于Apache Lucene搜索引擎库之上。
  • Logstash是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和Elasticsearch。
  • Kibana是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据。
  Elasticsearch Logstash Kibana的安装都比较简单,到官网下最新版本,我所用的版本是5.2.2,这里就不详细讲解安装过程,不会的可以网上找。
  1, 将地图更改成高德使用中文显示
  [root@localhost config]# vim /usr/local/kibana-5.2.2-linux-x86_64/config/kibana.yml
  tilemap.url: 'http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}'
  

  将日志格式定义为json格式
  # vim /usr/local/nginx/conf/nginx.conf
  log_format logstash_json '{"@timestamp":"$time_iso8601",'
  '"host":"$server_addr",'
  '"clientip":"$remote_addr",'
  '"size":$body_bytes_sent,'
  '"responsetime":$request_time,'
  '"upstreamtime":"$upstream_response_time",'
  '"upstreamhost":"$upstream_addr",'
  '"http_host":"$host",'
  '"url":"$uri",'
  '"xff":"$http_x_forwarded_for",'
  '"referer":"$http_referer",'
  '"agent":"$http_user_agent",'
  '"status":"$status"}';
  2,查看nginx的访问日志信息
  # less /usr/local/nginx/logs/access.log

  3,GeoLite2下载地址
  wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz

  4,配置nginx log的匹配方式
  #vim /opt/logstash/vendor/bundle/jruby/1.9/gems/logstah-patterns-core-0.3.0/patterns/grok-patterns
  URIPARM1 [A-Za-z0-9$.+!*'|(){},~@#%&/=:;_?\-\[\]]*URIPATH1 (?:/[A-Za-z0-9$.+!*'(){},~:;=@#%&_\- ]*)+URI1 (%{URIPROTO}://)?(?:%{USER}(?::[^@]*)?@)?(?:%{URIHOST})?(?:%{URIPATHPARAM})?NGINXACCESS %{IPORHOST:remote_addr} - (%{USERNAME:user}|-) \[%{HTTPDATE:log_timestamp}\] %{HOSTNAME:http_host} %{WORD:request_method} \"%{URIPATH1:uri}\" \"%{URIPARM1:param}\" %{BASE10NUM:http_status} (?:%{BASE10NUM:body_bytes_sent}|-) \"(?:%{URI1:http_referrer}|-)\" (%{BASE10NUM:upstream_status}|-) (?:%{HOSTPORT:upstream_addr}|-) (%{BASE16FLOAT:upstream_response_time}|-) (%{BASE16FLOAT:request_time}|-) (?:%{QUOTEDSTRING:user_agent}|-) \"(%{IPV4:client_ip}|-)\" \"(%{WORD:x_forword_for}|-)\"
  

  5,编写logstash的脚本文件,将Nginx日志往Redis写
  # vim /usr/local/logstash-5.2.2/conf.d/logstash-nginx.conf
  input {
  file {
  path => ["/usr/local/nginx/logs/access.log"]
  type => "logstash-prod-nginx"
  start_position => "beginning"
  codec => json
  }
  }
  filter {
  grok {
  match => { "message" => "%{NGINXACCESS}" }
  }
  }
  output {
  stdout { codec => rubydebug }
  redis {
  host => "1.1.1.1"
  port => "6379"
  data_type => 'list'
  key => 'logstash-prod-nginx'
  }
  }
  

  

  

  6,将Nginx的日志从Redis写入到ES中
  # vim /usr/local/logstash-5.2.2/conf.d/logstash-es.conf
  input {
  redis {
  host => "1.1.1.1"
  port => "6379"
  data_type => "list"
  key => "logstash-prod-nginx"
  type => "redis-input"
  #codec => "json"
  }
  }
  filter {
  if [type] == "logstash-prod-nginx" {
  geoip {
  source => "clientip"
  target => "geoip"
  database => "/usr/local/logstash-5.2.2/etc/GeoLite2-City.mmdb"
  add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
  add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}"  ]
  }
  mutate {
  convert => [ "[geoip][coordinates]", "float"]
  }
  }
  }
  output {

  # stdout { codec => rubydebug }
  if [type] == "logstash-prod-nginx" {
  elasticsearch {
  hosts => "1.1.1.1:9200"
  manage_template => true
  index => "logstash-prod-nginx-%{+YYYY.MM.dd}"
  }
  }
  }
  

  7,登陆kibana页面输入地址:http://127.0.0.1:5601,可见如下图片

  填入在logstash里写的index

  添加好后,就可以看下如下图片,日志就已被收集

  添加访问来源地理位置

  就可以看到我们的应用来自各个区域的访问来源

  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-668676-1-1.html 上篇帖子: ELK5.x版本部署文档 下篇帖子: ELK Stack最新版本测试一安装篇
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表