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

     2023-02-24     146

关键词:

【中文标题】使用 Grok for Logstash 解析 Apache2 错误日志【英文标题】:Parse Apache2 Error logs with Grok for Logstash 【发布时间】:2013-06-24 06:32:12 【问题描述】:

我正在尝试解析我的 apache2 错误日志,但遇到了一些麻烦。它似乎与过滤器不匹配。我很确定时间戳是错误的,但我不确定,我真的找不到任何文档来解决这个问题。另外,有没有办法将fields.errmsg 中的内容提供给我@message

日志

[Wed Jun 26 22:13:22 2013] [error] [client 10.10.10.100] PHP Fatal error:  Uncaught exception '\Foo\Bar'

发件人配置

input 
        file 
                'path' => '/var/log/apache2/*-error.log'
                'type' => 'apache-error'
        



filter 
        grok 
                type => "apache-error"
                pattern => "\[%HTTPDATE:timestamp\] \[%WORD:class\] \[%WORD:originator %IP:clientip\] %GREEDYDATA:errmsg"
        



output 
        stdout 
        redis 
                'data_type' => 'list'
                'host' => 'logstash.server.net'
                'key' => 'logstash'
        

【问题讨论】:

【参考方案1】:

不适合我:

EEE MMM dd HH:mm:ss yyyy

为我工作(Apache 2.4):

EEE MMM dd HH:mm:ss.SSSSSS yyyy

【讨论】:

【参考方案2】:

我们的错误日志看起来有些不同:

[Tue Dec 08 12:30:35.997887 2015] [ssl:info] [pid 1178:tid 1072] (70014)End of file found: [client 10.129.24.77:49987] AH01991: SSL input filter read failed.

但我发现了一个完美的预定义模式:

HTTPD24_ERRORLOG

在Logstash source看到这个

【讨论】:

这是更好的方法 值得注意的是,HTTPD_ERRORLOG 将适用于 2.0 和 2.4 格式,因此如果您将带有 ansible 的 logstash 发送到异构环境(如我),那么您可能应该使用包罗万象的版本两者都适用。 @Robbie 能否请您展示一下您的过滤器配置,您是如何使用它的?【参考方案3】:

喂!

我知道我参加聚会有点晚了,但它开始了!

我在系统上创建了一个/etc/logstash/patterns.d/ 目录,并在其中创建了一个名为apache-error 的文件,其中包含:

APACHE_ERROR_TIME %DAY %MONTH %MONTHDAY %TIME %YEAR
APACHE_ERROR_LOG \[%APACHE_ERROR_TIME:timestamp\] \[%LOGLEVEL:loglevel\] (?:\[client %IPORHOST:clientip\] )0,1%GREEDYDATA:errormsg

/etc/logstash/patterns.d/ 将在logstash 配置中引用如下:

grok 
  patterns_dir => [ "/etc/logstash/patterns.d" ]
  match => [ "message", "%APACHE_ERROR_LOG" ]

您可以在 Grok Debugger 进行测试,就像 Adam 在他的评论中提到的那样。似乎与您发送的示例日志条目一起工作得很好。我一直在与我的一位客户合作得很好。

上面的模式将最终消息放在errormsg 字段中。所以我只删除了message 字段。

这是我目前在我的 logstash 配置中使用的:

filter 
  if [type] == "apache_error_log" 

    grok 
      patterns_dir => [ "/etc/logstash/patterns.d" ]
      match => [ "message", "%APACHE_ERROR_LOG" ]
    

    if !("_grokparsefailure" in [tags]) 

      mutate 
        remove_field => [ "message" ]
        add_field =>  ["timestamp_submitted", "%@timestamp"]
      

      date 
        # Try to pull the timestamp from the 'timestamp' field (parsed above with
        # grok). The apache time format looks like: "18/Aug/2011:05:44:34 -0700"
        #                        Sat Feb 08 06:31:09 2014
        match => [ "timestamp", "EEE MMM dd HH:mm:ss yyyy" ]
        remove_field => [ "timestamp" ]
      

      geoip 
        source => "clientip"
      
    
  

请注意,我使用的是apache_error_log,而不是apache-error

试一试。我很想知道这是否适用于您和其他人!

干杯!

【讨论】:

谢谢!一个快速说明:我正在使用 GELF 输出插件将日志发送到 Graylog2。它要求消息字段不能丢失,所以我不得不相应地调整模式。 我猜日志错误日志格式自这篇文章以来发生了变化,但如果它对某人有所帮助,我将 APACHE_ERROR_LOG 模式更新为如下所示:APACHE_ERROR_LOG \[%APACHE_ERROR_TIME:timestamp\] \[:%LOGLEVEL:loglevel\] \[pid %NUMBER:pid\] (?:\[client %IPORHOST:clientip:%POSINT:port\] )0,1%GREEDYDATA:errormsg 似乎对我不起作用.. [Sun Oct 11 23:38:09.105800 2015] [mpm_event:notice] [pid 21264:tid 140035264497536] AH00489: Apache/2.4.7 (Ubuntu) configured -- resuming normal operations 这个对我有用APACHE_ERROR_LOG \[%APACHE_ERROR_TIME:timestamp\] \[%WORD:source:%LOGLEVEL:loglevel\] \[pid %NUMBER:pid:tid %NUMBER:tid\] (?:\[client %IPORHOST:clientip:%POSINT:port\] )0,1%GREEDYDATA:errormsg 如果其他人也遇到这种情况,我需要在其中添加一个sslAPACHE_ERROR_TIME %DAY %MONTH %MONTHDAY %TIME %YEAR APACHE_ERROR_LOG \[%APACHE_ERROR_TIME:timestamp\] \[ssl:%LOGLEVEL:loglevel\] \[pid %NUMBER:pid\] (?:\[client %IPORHOST:clientip:%POSINT:port\] )0,1%GREEDYDATA:errormsg【参考方案4】:

Logstash 有一个内置的 apache 日志解析器。

这是一个例子......

grok 
   type    => 'company'
   pattern => ["%COMBINEDAPACHELOG"]
   add_tag => "apache"

作为参考,可以查看Logstash的docs

【讨论】:

感谢您指出这一点 - 没有意识到这一点。在将 Grok 模式放入配置文件之前,您应该使用 GrokDebugger 检查您的 Grok 模式。这是不言自明的。 grokdebug.herokuapp.com 不错。这有帮助。知道如何获得它,所以@message@fields.message 相同吗? 我不确定它是如何工作的。我知道您可以使用replace => [ "@message", "%message_remainder" ] 之类的东西来更新字段的值,但我不知道如何将@fields 添加到新的message 变量中。出于兴趣,你会用它做什么?我想不出一个用例。 我不希望整个日志行都是@message,我只想要实际的错误 消息本身将始终存储在@message 中,除非您使用replace 函数更改它。我建议您继续前进的道路(来自问题中的 sn-p)。最好创建一个新变量errmsg,然后访问错误消息,只需查看@fields.errmsg

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

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

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

如果没有日志解析,搜索和可视化日志几乎是不可能的,一个被低估的技能记录器需要读取他们的数据。解析结构化你的传入(非结构化)日志,以便用户可以在调查期间或设置仪表板时搜索清晰的字段和值... 查看详情

elk日志处理之使用grok解析日志

...。Grok内置了120多种的正则表达式库,地址:https://github.com/logstash-plugins/logstash-patterns-core/tree/master/ 查看详情

logstash:grok模式示例(代码片段)

Logstash可以轻松解析CSV和JSON文件,因为这些格式的数据组织得很好,可以进行Elasticsearch分析。但是,有时我们需要处理非结构化数据,例如纯文本日志。在这些情况下,我们需要使用LogstashGrok或其他第三方服... 查看详情

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

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

Logstash Grok 解析器

】LogstashGrok解析器【英文标题】:LogstashGrokparser【发布时间】:2015-12-0217:10:00【问题描述】:我是log-stash和grok的新手,我需要解析非常自定义的日志文件。我在任何地方都找不到一个很好的教程来完成这项工作。尝试了syslog示... 查看详情

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

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

logstash / grok 模式文件

】logstash/grok模式文件【英文标题】:logstash/grokpatternfile【发布时间】:2015-09-2902:24:38【问题描述】:我正在解析IIS日志,当所有模式都在配置文件中时,我一切正常。我想取出所有模式并将它们放在一个模式文件中,但似乎无... 查看详情

Logstash - grok 使用消息以外的字段

】Logstash-grok使用消息以外的字段【英文标题】:Logstash-grokuseafieldotherthanmessage【发布时间】:2014-09-1505:55:01【问题描述】:我正在使用Logstash转发器从远程服务器接收Log4j生成的日志文件。日志事件的字段包括一个名为“文件”... 查看详情

logstash:grok模式示例(代码片段)

Logstash可以轻松解析CSV和JSON文件,因为这些格式的数据组织得很好,可以进行Elasticsearch分析。但是,有时我们需要处理非结构化数据,例如纯文本日志。在这些情况下,我们需要使用LogstashGrok或其他第三方服... 查看详情

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

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

logstash语法常用案例解析

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

logstash的过滤插件及其应用

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

logstash之grok(代码片段)

nginx匹配示例nginx日志格式\'$remote_user[$time_local]$http_x_Forwarded_for$remote_addr$request$status$upstream_status\'\'$http_x_forwarded_for\'\'$upstream_addr\'\'ups_resp_time:$upstream_response_time\'\'request_time:$request_time\';nginx日志示例-[09/May/2023:15:01:31+0800]11.20.1.3038.... 查看详情

logstash:使用自定义正则表达式模式(代码片段)

有时LogstashGrok没有我们需要的模式。幸运的是我们有正则表达式库:Oniguruma。在很多时候,如果Logstash所提供的正则表达不能满足我们的需求,我们选用定制自己的表达式。定义Logstash是一种服务器端数据处理管道ÿ... 查看详情

Logstash,grok 过滤器不适用于固定长度字段

】Logstash,grok过滤器不适用于固定长度字段【英文标题】:Logstash,grokfilternotworkingforfixedlengthfields【发布时间】:2015-11-1315:08:37【问题描述】:我是logstash的新手,我有一个带有固定长度字段的输入文件和一个使用正则表达式配置... 查看详情

grok 解析数据的重复字段值

...er中运行的uwsgi应用程序捕获日志的filebeat。数据被发送到logstash,它解析它并转发到elasticsearch。这里是logstashconf文件:inputbeatsport=>5044filtergrokma 查看详情

Grok 用于日志文件 Logstash

】Grok用于日志文件Logstash【英文标题】:GrokforlogfilesLogstash【发布时间】:2020-04-2212:03:00【问题描述】:我需要编写一个grok模式来检索“****”中的内容-----Startofscriptforserversitboap1at**FriApr1714:24:19**HKT2020---------**user11**8775110Apr16?00:00... 查看详情