最近确实忙得像狗一样,很久没有更新博客了。今天有点空闲时间写一些相关的ELK stack的博客;本来想做成一些列,后面有时间的话再更新吧

1、采用拓扑:

角色扮演: 

Agent:采用logstash,IP:192.168.10.7

Redis队列: IP:192.168.10.100

Indexer:logstash,IP:192.168.10.205

Es+kibana:放在192.168.10.100(大的日志环境可以单独存放)

说明:下面是一台日志服务器下面nginx的日志格式

1
2
3
log_format backend '$http_x_forwarded_for [$time_local] '
                   '"$host" "$request" $status $body_bytes_sent '
                   '"$http_referer" "$http_user_agent"'

1、192.168.10.7上面agnet的配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[luohui@BJ-hua-h-web-07 ~]$ cat /etc/logstash-nginx.conf 
input {
    file {
        path =>["/home/data/logs/access.log"]
        type =>"nginx_access"
    
}
output {
if [type] == "nginx_access"{
   redis {
    host =>["192.168.10.100:6379"]
    data_type=>"list"
    key =>"nginx"
    }
  }
}

##说明:这里的agent只是做日志发送,对性能影响不大,读取access.log日志文件,并且发送到远端redis。

2、192.168.10.205:indexer的配置:

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
28
29
30
31
32
33
34
35
36
[root@mail etc]# cat logstash_nginx.conf
input {
  redis {
    host =>"192.168.10.100"
    port => 6379
    data_type =>"list"
    key =>"nginx"
  }
}
filter {
        grok { 
              match=>
                {"message" =>"%{IPORHOST:clientip} \[%{HTTPDATE:timestamp}\] %                           {NOTSPACE:http_name}\"(?:%{WORD:verb} %{NOTSPACE:request}(?:HTTP/%                       {NUMBER:httpversion})?|%{DATA:rawrequest})\" %{NUMBER:response}(?:%                      {NUMBER:bytes:float}|-) %{QS:referrer} %{QS:agent}"
            }
        }
    date {
        match => ["timestamp" , "dd/MMM/YYYY:HH:mm:ss Z" ]
    }
    geoip {
        source =>"clientip"
        target =>"geoip"
        database =>"/test/logstash-5.0.0/GeoLite2-City.mmdb"
        add_field => ["[geoip][coordinates]", "%{[geoip][longitude]}" ]
        add_field => ["[geoip][coordinates]", "%{[geoip][latitude]}"  ]
        }
    mutate {
            convert => [ "[geoip][coordinates]", "float"]
          }
    }
output {
     elasticsearch {
      action =>"index"
      hosts=>"192.168.10.100:9200"
      index =>"logstash-nginx-%{+yyyy.MM.dd}"
      }
}

##说明:这里接收来自:redis的数据key为nginx的。然后进行正则匹配筛选数据。

Geoip调用我们本地下载的库,在linux版本下现在用:GeoLite2-City.mmdb,可以去网上下载。

备注:基本上操作的也就是logstash的相关操作,其他都是傻瓜安装。但是记得要启动elastic监听端口,启动redis监听端口。最后面启动logstash倒入数据。

这个比较简单,调用city库之后,选择Tile map即可:

这里是kibana带的地图,可以看到是英文的城市名之类的,我们改成高德地图,显示中文城市名。

3、修改kibana.yml添加如下URL:

tilemap.url: "http://webrd02.is.autonavi.com/appmaptilelang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}"

4、重启kibana即可得到如下图形:

5、到这里已经差不多完成了。然后还有剩下的相关图表。大家熟悉kibana自己做聚合运算即可。

6、有一些nginx喜欢用如下的默认格式:

1
2
3
 log_format main  '$remote_addr - $remote_user[$time_local] "$request" '
                      '$status $body_bytes_sent"$http_referer" '
                      '"$http_user_agent""$http_x_forwarded_for" $request_time ';

7、可以用如下的grok,默认一些正则表达式logstash已经提供,我们可以如下地址去查看:

vendor/bundle/jruby/1.9/gems/logstash-patterns-core-4.0.2/patterns

8、我们切换到这个目录下,创建相关的正则:

1
2
3
4
5
[root@mail etc]#cd vendor/bundle/jruby/1.9/gems/logstash-patterns-core-4.0.2/patterns
[root@mail etc]#cat nginx
NGUSERNAME [a-zA-Z\.\@\-\+_%]+
NGUSER %{NGUSERNAME}
NGINXACCESS%{IPORHOST:clientip} - %{NGUSER:remote_user} \[%{HTTPDATE:timestamp}\]\"(?:%{WORD:verb} %{NOTSPACE:request}(?:HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})\" %{NUMBER:response}(?:%{NUMBER:bytes:float}|-) %{QS:referrer} %{QS:agent}%{NOTSPACE:http_x_forwarded_for} %{NUMBER:request_time:float}

9、直接调用即可:

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
28
29
30
31
32
33
34
35
36
[root@controller etc]# catnginx.conf 
input {
  redis {
    host =>"192.168.10.100"
    port => 6379
    data_type =>"list"
    key =>"nginx"
  }
}
  
 filter { 
    grok {
        match => { "message" =>"%{NGINXACCESS}" }
    
    date {
        match => [ "timestamp" ,"dd/MMM/YYYY:HH:mm:ss Z" ]
    }
    geoip {
      source => "clientip"
      target => "geoip"
      database =>"/test/logstash-5.0.0/GeoLite2-City.mmdb"
      add_field => ["[geoip][coordinates]", "%{[geoip][longitude]}" ]
      add_field => ["[geoip][coordinates]", "%{[geoip][latitude]}"  ]
    }
    mutate {
      convert => ["[geoip][coordinates]", "float"]
    }   
  }
output { 
       stdout{codec=>rubydebug}
       elasticsearch {
       action => "index"
       hosts => "192.168.63.235:9200"
       index => "logstash-nginx-%{+yyyy.MM.dd}"
   
}

###到处已经可以手工了,剩下就是采集数据kibana聚合出图的事情。

10、可以完善的,就是nginx我们可以再生成数据的时候以json的格式生成,这样就不用grok去解析这么消耗CPU了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
log_format 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"}';
access_log  /etc/nginx/logs/access.json  json;

11、然后我们生成的就是json格式的日志了,还有一些需求的变量可以自己添加,logstask可以修改为:

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
28
29
30
31
32
[root@controller logstash-5.0.0]#cat etc/nginx_json.conf 
input {
  file {             #从nginx日志读入
    type => "nginx-access"
    path =>"/etc/nginx/logs/access.json"
    start_position => "beginning" 
    codec => "json"  #这里指定codec格式为json
  }
}
  
filter {
   if [type] == "nginx-access"{
       geoip {
      source => "clientip"
      target => "geoip"
      database =>"/test/logstash-5.0.0/GeoLite2-City.mmdb"
      add_field => ["[geoip][coordinates]", "%{[geoip][longitude]}" ]
      add_field => [ "[geoip][coordinates]","%{[geoip][latitude]}"  ]
    
   }
}
  
output {
    if [type] == "nginx-access" {
    stdout{codec=>rubydebug}
    elasticsearch {
        action => "index"
        hosts => "192.168.63.235:9200"
        index => "mysql-slow-%{+yyyy.MM.dd}"
     }
  }
}

清爽好多,手工。注意GeoLite2-City.mmdb用这个库,我之前用bat这个。是出不来图的

本文转自 小罗ge11 51CTO博客,原文链接:http://blog.51cto.com/xiaoluoge/1891366,如需转载请自行联系原作者

ELK采集之nginx 日志高德地图出城市IP分布图相关推荐

  1. Graylog收集nginx日志做地图事态感知

    文章目录 这个东西有什么用呢 搜集日志的过程如下图 开始部署 在客户端安装 Sidecar 在客户端安装 Filebeat 在Server服务端添加Sidecar 通过Nginx日志做地图标识 这个东 ...

  2. 使用elk+redis搭建nginx日志分析平台(引)

    http://www.cnblogs.com/yjf512/p/4199105.html elk+redis 搭建nginx日志分析平台 logstash,elasticsearch,kibana 怎 ...

  3. ELK+redis搭建nginx日志分析平台

    ELK+redis搭建nginx日志分析平台 发表于 2015-08-19   |   分类于 Linux/Unix   |   ELK简介 ELKStack即Elasticsearch + Logs ...

  4. ELK采集MySQL慢日志实现

    文章目录 一.ELK采集MySQL慢日志架构 二.filebeat 三.logstash 四.es+kibana 一.ELK采集MySQL慢日志架构 MySQL 服务器安装 Filebeat 作为 a ...

  5. Python爬取高德地图各城市天气

    Python爬取高德地图各城市天气 爬虫练习项目之一.从高德地图json数据接口获取天气.可以获取某省的所有城市天气.高德地图的这个接口还能获取县城的天气,我只写到了市.有兴趣的朋友可以尝试一下. 完 ...

  6. 高德地图API之IP定位

    高德地图API之IP定位(替换你的KEY) IP定位API:http://lbs.amap.com/api/webservice/guide/api/ipconfig package com.gdma ...

  7. ELK(Elasticsearch+Filebeat+Kibana) 轻量级采集分析Nginx日志

    ELK是什么? 轻量级日志统计分析组件,包含elasticsearch.filebeat.kibana ELK环境准备 Elasticsearch 下载地址 https://www.elastic.c ...

  8. centos6.5下安装配置ELK及收集nginx日志

    Elasticsearch 是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等. Logstash 是一个完全开 ...

  9. elk平台分析nginx日志的基本搭建

    一.elk套件介绍 ELK 由 ElasticSearch . Logstash 和 Kiabana 三个开源工具组成.官方网站: https://www.elastic.co/products El ...

最新文章

  1. 重启服务才可连接BOOT服务器
  2. 向流程组的所有成员发送信号的最佳方法是什么?
  3. 技术硬核还不够?互联网企业出海指南来了!
  4. 在linux命令行 下学习编写java
  5. 使用python 实现icmp测试主机存活性
  6. 如何使用Data Lake Analytics创建分区表
  7. Ubuntu下Memcache的安装与基本使用
  8. Docker安装Redis(docker-compose.yml)
  9. javacv入门指南:序章_建立开放文化的循序渐进指南
  10. 【论文解读】情感-原因关系挖掘 —— ACL2019杰出论文
  11. php 验证是否是xml,php判断str字符串是否是xml格式数据
  12. django -orm操作总结
  13. 免费直播编码软件应用技巧
  14. matlab 批量读取nc 三维,matlab读取nc文件画图
  15. 无纸化办公中如何保护数据安全
  16. mysql左表有右表没有_查询左表存在而右表不存在的记录
  17. 卡耐基计算机专业课程,你以为卡耐基梅隆大学只有计算机专业厉害吗?
  18. 洛谷P8255 解法 2020328
  19. 最强旗舰手机功能曝光:大变活人、智能静音、拍照测肤……
  20. 如何在局域网使用自定义域名

热门文章

  1. redis 系列10 字符串对象
  2. Java JDK与JRE
  3. linux 下自动重启tomcat的脚本(支持shell杀进程)
  4. 第一阶段冲刺 第八天
  5. php的具体配置学习笔记
  6. 这个世界是那样的似曾相识
  7. Android 2.2 带来全新拍照增强特性
  8. 利用winrar自动备份重要资料
  9. 判断链表是否是中心对称
  10. Log4j2日志框架集成Slf4j日志门面