解析 Nginx 日志时的 Logstash _grokparsefailure

     2023-03-24     28

关键词:

【中文标题】解析 Nginx 日志时的 Logstash _grokparsefailure【英文标题】:Logstash _grokparsefailure when parsing Nginx logs 【发布时间】:2017-07-07 14:52:10 【问题描述】:

我正在尝试使用 Logstash 解析 nginx 日志,一切看起来都很好,除了使用包含 Nginx $remote_user 的行获取此 _grokparsefailure 标记。当 $remote_user 为 '-'(未指定 $remote_user 时的默认值)时,Logstash 会完成这项工作,但使用像 user@gmail.com 这样的真正 $remote_user 会失败并放置一个 _grokparsefailure 标签:

127.0.0.1 - - [17/Feb/2017:23:14:08 +0100] "GET /favicon.ico HTTP/1.1" 302 169 "http://training-hub.tn/trainer/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, 像 Gecko) Chrome/56.0.2924.87 Safari/537.36"

=====> 工作正常

127.0.0.1 - jemlifathi@gmail.com [17/Feb/2017:23:14:07 +0100] “GET /trainer/templates/home.tmpl.html HTTP/1.1”304 0 "http://training-hub.tn/trainer/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36(KHTML,像 Gecko)Chrome/56.0.2924.87 Safari/537.36"

=====>_grokparsefailure 标签和解析日志行失败

我正在使用这个配置文件:

input      
    file       
        path => "/home/dev/node/training-hub/logs/access_log"       
        start_position => "beginning"       
        sincedb_path => "/dev/null"
        ignore_older => 0
        type => "logs"  
    


filter     
    if[type] == "logs"         
        mutate             
             gsub => ["message", "::ffff:", ""]         
               
        grok           
             match=> [
               "message" , "%COMBINEDAPACHELOG+%GREEDYDATA:extra_fields",
               "message" , "%COMMONAPACHELOG+%GREEDYDATA:extra_fields"
             ]
             overwrite=> [ "message" ]
        

        mutate 
          convert=> ["response", "integer"]
          convert=> ["bytes", "integer"]
          convert=> ["responsetime", "float"]
        
        geoip 
          source => "clientip"
          target => "geoip"
          database => "/etc/logstash/GeoLite2-City.mmdb"
          add_field => [ "[geoip][coordinates]", "%[geoip][longitude]" ]
          add_field => [ "[geoip][coordinates]", "%[geoip][latitude]"  ]
        
        mutate 
          convert => [ "[geoip][coordinates]", "float"]
        

        date 
          match=> [ "timestamp", "dd/MMM/YYYY:HH:mm:ss Z" ]
          remove_field=> [ "timestamp" ]
        

        useragent 
          source=> "agent"
           
      
 

output     elasticsearch          hosts => "localhost:9200"    

【问题讨论】:

【参考方案1】:

在使用许多值测试输出后,我意识到 Logstash 无法解析包含此类 $remote_user 的日志行,因为它不是有效的用户名(电子邮件地址),所以我添加了一个 mutate gsub 过滤器以删除 @并且邮件地址的其余部分具有有效的$remote_user

gsub => ["消息", "@(?:(?:a-z0-9?.)+a-z0-9?|[(?:(?:25[0-5]|2[0-4][0-9]| [01]?[0-9][0-9]?).)3(?:25[0-5]|2[0-4][0-9]|[01]?[0- 9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\ x53-\x7f]|\[\x01-\x09\x0b\x0c\x0e-\x7f])+)]) [", " ["]

现在,它工作正常

【讨论】:

logstash2.2以上版本,nginx错误日志切割

  网上nginx错误日期切分的版本各式各样,能用的没几个,踩过很多坑,特意记录下:if[type]=="xx_app_nginx_error_log"{grok{patterns_dir=>"/etc/logstash/conf.d/patterns"match=>{"message"=>"%{NGINXERROR_1}"}}mutate{#避免日期报错gs 查看详情

在fluentd中解析nginx入口日志

...】:我想在Kubernetes中使用fluentd解析入口nginx日志。这在Logstash中很容易,但我对流畅的语法感到困惑。现在我有以下规则:<source>typetailpath/var/log/containers/*.logpos_fil 查看详情

elasticsearch-logstash-kibana(三)配置优化

...,nginx日志格式往往使用的是自定义的格式,我们需要把logstash中的message结构化后再存储,方便kibana的搜索和统计,因此需要对message进行解析。本文采用grok过滤器,使用match正则表达式解析,根据自己的log_format定制。nginx日志格... 查看详情

logstash解析日志实例

配置Filebeat输出到LogstashLogstash中配置Filebeat输入使用GrokFilter插件解析日志使用Geoip插件丰富数据将数据索引到Elasticsearch多个输入输出插件配置介绍来自为知笔记(Wiz) 查看详情

logstash语法常用案例解析

摘要此篇主要讲Filter插件,已经对nginx日志的各种处理实例接着上篇继续说插件1,Filter插件Grok:正则捕获Date:时间处理Mutate:数据修改Geoip:查询归类JSON:编解码Grok:解析和结构化任何文本。http://grokdebug.herokuapp.com/patterns# ... 查看详情

logstash解析系统的messages日志(代码片段)

logstash解析系统日志的写法,output中的stdout为调试,生产可以移除inputredishost=>"192.168.1.181"port=>6379db=>"0"data_type=>"list"key=>"815"filtergrokmatch=>"message"=>"%SYSLOGLINE"mutaterem 查看详情

elk之logstash系统日志和nginx日志收集-4(代码片段)

logstash常用参数 1path  是必须的选项,每一个file配置,都至少有一个path  2exclude  是不想监听的文件,logstash会自动忽略该文件的监听。配置的规则与path类似,支持字符串或者数组,但是要求必须是绝对路径。  3start_... 查看详情

logstash的过滤插件及其应用

一、Logstash的过滤插件数据从源传输到存储库的过程中,Logstash过滤器能够解析各个事件,识别已命名的字段以构建结构,并将它们转换成通用格式,以便进行更强大的分析和实现商业价值。Logstash能够动态地转换和解析数据,不... 查看详情

logstash5.4.1解析日志报错处理

下载最新的logstash5.4.1打开把之前的配置文件加入进去,启动logstash提示报错了,未使用geoip插件的配置文件正常启动。按照提示发现是maxmind的数据库解析出错,重新至maxmind(http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz)... 查看详情

sqlserver压缩数据库日志文件的方法解析

SqlServer日志_log.ldf文件太大,数据库文件有500g,日志文件也达到了500g,占用磁盘空间过大,且可能影响程序性能,需要压缩日志文件,下面小编给大家讲解下SqlServer压缩数据库日志文件的方法,感兴趣的朋友一起看看吧SqlServer日志... 查看详情

Logstash 应该只记录 grok 解析的消息

】Logstash应该只记录grok解析的消息【英文标题】:Logstashshouldlogonlygrokparsedmessages【发布时间】:2017-01-1609:54:07【问题描述】:目前我有一个ELK堆栈,其中的日志由filebeat传送,在logstash中的一些过滤器之后,它被转发到ES。由于有... 查看详情

elk日志平台之logstash

一、ELKStack简介Elstaicsearch:存储和搜索logstash:收集kibana:展示650)this.width=650;"src="http://s2.51cto.com/wyfs02/M02/86/A1/wKioL1fGN-_z8_S3AABPgVmad_U461.jpg-wh_500x0-wm_3-wmp_4-s_606178705.jpg"title="QQ图片20160 查看详情

centos7安装logstash(代码片段)

CentOS7安装LogstashLogstash工作原理安装Logstash下载解压修改配置文件验证配置文件设置数据源日志输出启动Logstash输出日志到ElasticsearchLogstash收集Nginx日志验证配置文件配置Nginx日志启动LogstashLogstash工作原理Logstash使用管道方式进行... 查看详情

使用 Grok for Logstash 解析 Apache2 错误日志

】使用GrokforLogstash解析Apache2错误日志【英文标题】:ParseApache2ErrorlogswithGrokforLogstash【发布时间】:2013-06-2406:32:12【问题描述】:我正在尝试解析我的apache2错误日志,但遇到了一些麻烦。它似乎与过滤器不匹配。我很确定时间戳... 查看详情

logstash切割日志,分隔符是中文逗号解析不了怎么办?

logstash切割日志,分隔符是中文逗号解析不了怎么办?参考技术A通常日志管理是逐渐崩溃的——当日志对于人们最重要的时候,也就是出现问题的时候,这个渐进的过程就开始了。日志管理一般会经历一下3个阶段:初级管理员将... 查看详情

logstash笔记-----grok插件的正则表达式来解析日志

(一)简介:   丰富的过滤器插件的存在是logstash威力如此强大的重要因素。名为过滤器,其实提供的不单单是过滤的功能,它们扩展了进入过滤器的原始数据,进行复杂的逻辑处理,甚至可以无中生有的添加新的logs... 查看详情

elk深度解析

上面的两张图是elk的一个架构下面是对logstash分析:如下图可以看出 logstash的一个角色shipper,(是通过配置文件来决定logstash是shipper还是indexer)注意:logstash共有两个角色一个是shipper,另一个是indexershipper:是日志收集者。负责监控... 查看详情

logstash:日志解析的grok模式示例(代码片段)

...和分析工具中解析日志数据。在这里查看我的Grok教程“Logstash:Grokfilter入门”。但是用Grok解析日志可能会很棘手。本博客将研究一些Grok模式示例,这些示例可以帮助你了解如何解析日志数据。什么是grok?最初的术语实际... 查看详情