欢迎您, 来到 宁时修博客.^_^

Elastic Stack[7.0]开源日志收集 03 ----收集Nginx访问日志、错误日志

2018/11/14 言则行 Elastic Stack 423
Elastic Stack开源日志收集

一、Nginx访问日志JSON格式化

$ vim /etc/nginx/nginx.conf

    log_format json  '{"@timestamp":"$time_iso8601",'
                       '"log_time":"$time_iso8601",'
                       '"user_ip":"$http_x_real_ip",'
                       '"client_ip":"$remote_addr",'
                       '"remote_user":"$remote_user",'
                       '"user_request":"$request",'
                       '"request_method":"$request_method",'
                       '"uri":"$uri",'
                       '"request_time":"$request_time",'
                       '"http_code":"$status",'
                       '"body_bytes_sent":"$body_bytes_sent",'
                       '"http_referrer":"$http_referer",'
                       '"user_agent":"$http_user_agent",'
                       '"http_x_forwarded_for":"$http_x_forwarded_for"'
                      '}';

    access_log  /var/log/nginx/access.log  json;


    重启nginx:

/sbin/nginx -s reload

    

    查看访问日志:

{"@timestamp":"2019-06-11T06:16:48+00:00","log_time":"2019-06-11T06:16:48+00:00","user_ip":"-","client_ip":"183.17.126.238","remote_user":"ebuyhouselogs","user_request":"GET /api/saved_objects/_find?type=index-pattern&fields=title&per_page=10000 HTTP/1.1","request_method":"GET","uri":"/api/saved_objects/_find","request_time":"0.009","http_code":"200","body_bytes_sent":"1051","http_referrer":"http://logstatus.ebuyhouse.com/app/kibana","user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36","http_x_forwarded_for":"-"}



二、Filebeat配置

$ vim /etc/filebeat/filebeat.yml 

filebeat.inputs:

- type: log
  enabled: true
  paths:
    - /var/log/nginx/access.log
    
  json.keys_under_root: true
  json.overwrite_keys: true

  fields:
    logtype: elkb_nginx_access

- type: log
  enabled: true
  paths:
    - /var/log/nginx/error.log

  json.keys_under_root: true
  json.overwrite_keys: true
  
  fields:
    logtype: elkb_nginx_error


#----------------------------- Logstash output --------------------------------
output.logstash:
  # The Logstash hosts
  hosts: ["172.31.37.46:5044"]

    

    重启filebeat:

systemctl restart filebeat



三、Logstash配置

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

input {
  beats {
    port => "5044"
  }
}

filter {
  geoip {         # 客户端IP转化为经纬度
    source => "client_ip"
    target => "geoip"
    add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
    add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}"  ]
  }

  mutate {
    convert => [ "body_bytes_sent","integer" ]   # 值类型转化
    convert => [ "request_time", "float" ]
    convert => [ "[geoip][coordinates]", "float" ]
    remove_field => "@version"           # 去除不需要的字段
    remove_field => "ecs"
    remove_field => "agent"
    remove_field => "tags"
  }

  if [fields][logtype] == "elkb_nginx_error" {      # nginx_error日志JSON化
    grok {
      match => { "message" => "(?<log_time>%{YEAR}[./-]%{MONTHNUM}[./-]%{MONTHDAY}[- ]%{TIME}) \[%{LOGLEVEL:loglevel_severity}\] %{POSINT:pid}#%{NUMBER}: %{GREEDYDATA:error_message}(?:, client: (?<client_ip>%{IP}))(?:, server: %{IPORHOST:server}?)(?:, request: %{QS:request})?(?:, upstream: (?<upstream>\"%{URI}\"|%{QS}))?(?:, host: %{QS:request_host})?(?:, referrer: \"%{URI:referrer}\")?" }
    }
  }
}

output {
  if [fields][logtype] == "elkb_nginx_access" {
    elasticsearch {
      hosts => ["http://172.31.37.46:9200"]
      index => "logstash-elkb_nginx_access-%{+YYYY.MM.dd}"
    }
  }

  if [fields][logtype] == "elkb_nginx_error" {
    elasticsearch {
      hosts => ["http://172.31.37.46:9200"]
      index => "logstash-elkb_nginx_error-%{+YYYY.MM.dd}"
    }
  }
}


    重启logstash:

systemctl restart logstash


    使用 logstash-filter-geoip 模块处理 IP 转化为经纬度。

    logstash模块:https://www.elastic.co/guide/en/logstash/current/filter-plugins.html



四、Kibana展示

    Kibana 创建索引:

0006.png

    

    查看日志:

50148.png



五、可视化

    1、客户端 IP 地图显示

    创建可视化:

459.png


    可视化类型:

0558.png


    

    配置:

44.png


    然后左上角保存,命名即可。



    2、Nginx响应状态码

    步骤: 可视化--> 创建可视化-->可视化类型-->饼图 -->

1151359.png



    3、用户请求URL 前20

    步骤: 可视化--> 创建可视化-->可视化类型-->数据表-->

636.png



    4、用户城市

    步骤: 可视化--> 创建可视化-->可视化类型-->标签云图-->

1929.png


    5、PV   UV

    步骤: 可视化--> 创建可视化-->可视化类型-->指标-->

52111.png

206.png


    

    6、用户请求响应数

     步骤: 可视化--> 创建可视化-->可视化类型-->折线图-->

355.png



    还有很多可视化方案,随意自定义。


点赞
说说你的看法

所有评论: (0)