logstash grok 分析 nginx access 日志

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了logstash grok 分析 nginx access 日志相关的知识,希望对你有一定的参考价值。

为了便于量化分析nginx access日志,使用logstash 进行筛选匹配
1.确定nginx 日志格式  
  log_format access ‘$remote_addr - $remote_user [$time_local] ‘
              ‘$http_host $request_method $uri ‘
              ‘$status $body_bytes_sent ‘
              ‘$upstream_status $upstream_addr $request_time ‘
              ‘$upstream_response_time $http_user_agent‘;
              
2.使用logstash grok 对 日志进行匹配 
filter {
  if [type] == ‘mobile-access‘ {
     #message 匹配的pattern便于阅读拆分成了多行书写,在配置文件里其实是一行的
    grok {
        match =>[  
         "message",‘%{IPV4:remote_addr} - (%{USERNAME:user}|-) 
         \[%{HTTPDATE:nginx_timestamp}\]%{HOSTNAME:http_host} 
         %{WORD:request_method} %{URIPATH:uri}%{BASE10NUM:http_status} 
         %{BASE10NUM:body_bytes_sent:int}(%{BASE10NUM:upstream_status}|-) 
         (?:%{HOSTPORT:upstream_addr}|-)(%{BASE16FLOAT:request_time}|-) 
         (%{BASE16FLOAT:upstream_response_time}|-)(?<http_user_agent>[^"]*)‘
            ]
      }
    date {
        locale => "en"
        match =>["nginx_timestamp" , "dd/MMM/YYYY:HH:mm:ss Z"]
             }
    #实际中grok并没有将匹配的字段转换成期望的int、float等类型,因此这里使用了convert再次做转换         
    mutate { 
         convert =>[
                "request_time","float",
                "body_bytes_sent","integer",
                "upstream_response_time","float",
                "http_status","integer"
                ]
         }     
    }

以上是关于logstash grok 分析 nginx access 日志的主要内容,如果未能解决你的问题,请参考以下文章

Logstash收集nginx日志之使用grok过滤插件解析日志

logstash之grok

logstash实战filter插件之grok(收集apache日志)

logstash grok使用案例

Logstash:日志解析的 Grok 模式示例

Logstash中grok pattern