投资菜地

屋后的一亩三分绿色菜园地

2022-07-13

Nginx日志分析

设置nginx日志格式

logstash

nginx 日志配置

#在nginx.conf 中设置日志格式:logstash
log_format main 
'$remote_addr [$time_local] "$request" '
'$request_body $status $body_bytes_sent "$http_referer" "$http_user_agent" '
'$request_time $upstream_response_time';                    
#在vhost/*.conf中设置access日志
access_log  /logs/xlog.log  main;

logstash 配置


input {
  file {
    type => "nginx_access"
    path => ["d:/nginx/logs/access.log","d:/nginx/logs/access.log"]
  }
}
filter {
  #定义数据的格式
  grok {
    match => { 
      "message" => " %{IPORHOST:clientip} \[%{HTTPDATE:time}\] \"%{WORD:verb} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion}\" \- %{NUMBER:http_status_code} %{NUMBER:bytes} \"(?<http_referer>\S+)\" \"(?<http_user_agent>(\S+\s+)*\S+)\".*"    
    }
  }
}
output {
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "service_api"
    document_type => "logs“
  }
}

filebeat

nginx 配置

log_format json '{ "@timestamp": "$time_iso8601", '
                         '"time": "$time_iso8601", '
                         '"remote_addr": "$remote_addr", '
                         '"remote_user": "$remote_user", '
                         '"body_bytes_sent": "$body_bytes_sent", '
                         '"request_time": "$request_time", '
                         '"status": "$status", '
                         '"host": "$host", '
                         '"request": "$request", '
                         '"request_method": "$request_method", '
                         '"uri": "$uri", '
                         '"http_referrer": "$http_referer", '
                         '"body_bytes_sent":"$body_bytes_sent", '
                         '"http_x_forwarded_for": "$http_x_forwarded_for", '
                         '"http_user_agent": "$http_user_agent" '
                    '}';

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

FileBaat 配置

#=========================== Filebeat prospectors =============================

filebeat.prospectors:

- input_type: log

  # Paths that should be crawled and fetched. Glob based paths.
  paths:
    - /var/log/nginx/*access*.log
  json.keys_under_root: true
  json.overwrite_keys: true

#-------------------------- Elasticsearch output ------------------------------
output.elasticsearch:
  # Array of hosts to connect to.
  hosts: ["ip:port","ip:port"]
  index: "filebeat_server_nginx_%{+YYYY-MM}"
  
#-------------------------- Redis output         ------------------------------  
output.redis:
 hosts: ["15.75.20.145"] #输出到redis的机器
 port: 5440
 db: 1  #redis数据库的一个整数索引标识,redis总共0-15默认16个库。
 timeout: 5
 key: "nginx:logs"  #以default_list的keys传输到redis

开源项目(更多)