filebeat收集日志,传到kafka,logstash过滤nginx,利用kibana显示nginx客户ip分布图

流程:

nginx日志—>filebeat (收集)----->kafka (流式处理)------>logstash(过滤)----->elasticsearch(存储)------->kibana (显示)

这里只介绍各组件的配置,各组件的部署安装请参考官网。

操作环境:
centos7
nginx 1.4
filebeat , logstash , elasticsearch ,kibana 6.2

  1. 配置nginx日志格式

nginx 日志格式。(仅供参考,请根据各自业务情况设定日志格式。)

http {
    log_format  main  '$remote_addr - [$time_local] $request_method "$uri" "$query_string" '
                  '$status $body_bytes_sent "$http_referer" $upstream_status '
                  '"$http_user_agent" '

在线grok
http://grok.qiexun.net/

参考:

%{IPORHOST:clientip} - [%{HTTPDATE:timestamp}] %{WORD:verb} “%{URIPATH:uri}” “-” %{NUMBER:httpversion} %{NUMBER:response} “%{GREEDYDATA:http_referrer}” %{BASE10NUM:upstream_status} “%{GREEDYDATA:user_agent}”

2,配置kibana

编辑kibana配置文件kibana.yml,

vim /etc/kibana/kibana.yml

- type: log
  enabled: true
  paths:
    - /var/log/nginx/access.log
  fields:
    log_topics: cnginx
    
#......中间省略
#输出到kafka

output.kafka:
  hosts: ["172.17.78.197:9092","172.17.78.198:9092","172.17.78.199:9092"]
  topic: '%{[fields][log_topics]}'
  partition.round_robin:
    reachable_only: false
  required_acks: 1
  compression: gzip
  max_message_bytes: 1000000
  
最后面添加高德地图配置:
tilemap.url: 'http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}'

style=7是地图,style=6是卫星图,删除kibana目录下的optimize/bundles文件夹

3,配置logstash

下载GeoIP数据库、

wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz
gzip -d GeoLiteCity.dat.gz

自定义 logstash patterns

mkdir -p /usr/local/logstash/patterns
vi /usr/local/logstash/patterns/nginx

写入:

 URIPARM1 [A-Za-z0-9$.+!*'|(){},~@#%&/=:;_?\-\[\]]*
 NGINXACCESS %{IPORHOST:clientip} \- \[%{HTTPDATE:timestamp}\] %{WORD:verb} \"%{URIPATH:uri}\" \"%{URIPARM1:param}\" %{NUMBER:httpversion} %{NUMBER:response} \"%{GREEDYDATA:http_referrer}\" %{BASE10NUM:upstream_status} \"%{GREEDYDATA:user_agent}\"

安装geoip插件:
logstash-filter-geoip - 可以获取到国家及城市信息

/usr/share/logstash/bin/logstash-plugin install logstash-filter-geoip

配置logstash

vim /etc/logstash/conf.d/nginx.conf

input {
  kafka {
  codec => "json"
  topics => ["cnginx"]
  consumer_threads => 2
  enable_auto_commit => true
  auto_commit_interval_ms => "1000"
  bootstrap_servers => "172.17.78.197:9092,172.17.78.198:9092,172.17.78.199:9092"
  auto_offset_reset => "latest"
  group_id => "xqxlog"
  }
}

filter {
  if [fields][log_topics] == "cnginx" {
     grok {
         patterns_dir => "/usr/local/logstash/patterns"
         match => { "message" => "%{NGINXACCESS}" }
         remove_field => ["message"]
           }
     date {
          match => [ "timestamp" , "dd/MMM/YYYY:HH:mm:ss Z" ]
                }

     urldecode {
          all_fields => true
            }

     geoip {
        source => "clientip"
        target => "geoip"
        database => "/etc/logstash/conf.d/GeoLite2-City.mmdb"
        add_field => ["[geoip][coordinates]","%{[geoip][longitude]}"]   #添加字段coordinates,值为经度
        add_field => ["[geoip][coordinates]","%{[geoip][latitude]}"]     #添加字段coordinates,值为纬度
          }
     mutate {
         convert => [ "[geoip][coordinates]", "float"]    #转化经纬度的值为浮点数
                }
     }
}

output {
   if [fields][log_topics] == "cnginx" {
       elasticsearch {
       hosts => ["172.17.32.90:15029","172.17.32.91:15029","172.17.32.92:15029"]
       index => "logstash-cnginx-%{+YYYY.MM.dd}"  
       #注意索引名称一定要以logstash-或者logstash_开头,不然kibana中创建地图时识别不了
    }
  }
}

启动,kafka , filebeat , logstash, elasticsearch , kibana .

登录kiban , 在 Management 选项里, 创建索引 index

创建完成后查看日志输出 如下:
创建index

创建nginx ip地图
创建ip地图

生成和保存nginx ip地图
生成和保存地图

根据nginx ip地址,进行城市排序。
这里写图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LogstashFilebeat是两个常用的开源工具,用于处理和传输日志数据。它们通常与ElasticsearchKibana一起使用,形成ELK堆栈,用于实时日志分析和可视化。 Logstash是一个用于收集、处理和转发日志和事件数据的工具。它可以从各种来源(如文件、网络、消息队列等)收集数据,并对数据进行过滤、换和增强,然后将其发送到目标位置(如ElasticsearchKafka等)。Logstash使用插件来实现各种功能,例如输入插件、过滤器插件和输出插件。通过配置Logstash的管道,可以定义数据的流动和处理方式。 Filebeat是一个轻量级的日志数据传输工具,用于将日志数据从服务器发送到中央存储或分析系统。它可以监视指定的日志文件或位置,将新的日志事件发送到指定的目标位置(如LogstashElasticsearch等)。Filebeat具有低资源消耗和高性能的特点,适用于在大规模分布式环境中收集和传输日志数据。 通过LogstashFilebeat的结合使用,可以实现以下功能: 1. 收集和传输日志数据:Filebeat负责监视和传输日志文件,Logstash负责接收和处理传入的日志数据。 2. 数据过滤和转换:Logstash可以使用各种过滤器插件对日志数据进行过滤、解析和转换,以便更好地理解和分析数据。 3. 数据增强和丰富:Logstash可以对日志数据进行增强,例如添加额外的字段、记事件等,以便更好地进行分析和可视化。 4. 数据存储和索引:Logstash可以将处理后的日志数据发送到Elasticsearch等目标位置,以便进行存储和索引,以供后续的搜索和分析。 下面是一个演示LogstashFilebeat的例子: 1. 配置Filebeat: ```yaml filebeat.inputs: - type: log paths: - /var/log/nginx/access.log output.logstash: hosts: ["localhost:5044"] ``` 2. 配置Logstash: ```conf input { beats { port => 5044 } } filter { grok { match => { "message" => "%{COMBINEDAPACHELOG}" } } } output { elasticsearch { hosts => ["localhost:9200"] index => "nginx-access-%{+YYYY.MM.dd}" } } ``` 3. 启动FilebeatLogstash: ``` # 启动Filebeat filebeat -e -c filebeat.yml # 启动Logstash logstash -f logstash.conf ``` 通过以上配置和命令,Filebeat将监视Nginx访问日志文件,并将新的日志事件发送到LogstashLogstash将使用Grok过滤器对日志数据进行解析和转换,然后将处理后的数据发送到Elasticsearch进行存储和索引。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值