【问题标题】:grok not parsing logsgrok 不解析日志
【发布时间】:2020-01-20 03:07:04
【问题描述】:

日志样本


[2020-01-09 04:45:56] VERBOSE[20735][C-0000ccf3] pbx.c: Executing [9081228577525@from-internal:9] Macro("PJSIP/3512-00010e39", "dialout-trunk,1,081228577525,,off") in new stack

我正在尝试解析一些日志, 我已经测试了我制作的一些日志,它返回了我需要的结果。但是当我将它与我的配置结合并运行它时,日志没有解析到索引中。

这是我的配置:

input{
        beats{
                port=>5044
        }
}
filter
{
        if [type]=="asterisk_debug"
        {
                if [message] =~ /^\[/
                {
                        grok
                        {
                                match =>
                                {
                                        "message" => "\[%{TIMESTAMP_ISO8601:log_timestamp}\] +(?<log_level>(?i)(?:debug|notice|warning|error|verbose|dtmf|fax|security)(?-i))\[%{INT:thread_id}\](?:\[%{DATA:call_thread_id}\])? %{DATA:module_name}\: %{GREEDYDATA:log_message}"
                                }
                                add_field => [ "received_timestamp", "%{@timestamp}"]
                                add_field => [ "process_name", "asterisk"]
                        }
                        if ![log_message]
                        {
                mutate
                {
                    add_field => {"log_message" => ""}
                }
            }
            if [log_message] =~ /^Executing/ and [module_name] == "pbx.c"
            {
                grok
                {
                        match =>
                        {
                                "log_message" => "Executing +\[%{DATA:TARGET}@%{DATA:dialplan_context}:%{INT:dialplan_priority}\] +%{DATA:asterisk_app}\(\"%{DATA:protocol}/%{DATA:Ext}-%{DATA:Channel}\",+ \"%{DATA:procedure},%{INT:trunk},%{DATA:dest},,%{DATA:mode}\"\) %{GREEDYDATA:log_message}"
                        }
                }

            }
                }
        }
}
output{
        elasticsearch{
        hosts=>"127.0.0.1:9200"
        index=>"new_asterisk"
}
}

当我将它检入 kibana 索引时,该索引只显示原始日志。 问题: 为什么我的 conf 没有解析日志,即使是我成功测试的 grok(由我)。

解决了

如果条件不进入日志

【问题讨论】:

  • 如果 ES 中的日志中没有 _grokparsefailure 标签,则表示事件没有通过 grok 过滤器,因此您必须检查 if [type]=="asterisk_debug" 条件

标签: elasticsearch logstash logstash-grok


【解决方案1】:

似乎您的 grok-actions 根本没有得到应用,因​​为数据被原始索引并且没有抛出错误标签。显然,您的文档不包含具有值 asterisk_debug 的字段 type,这是您执行 grok-actions 的条件。

为了验证这一点,您可以实现一个简单的 else-path,它添加一个字段或标记来指示条件不满足,如下所示:

filter{
  if [type]=="asterisk_debug"{
    # your grok's ...
  }
  else{
    mutate{
      add_tag => [ "no_asterisk_debug_type" ]
    }
  }
}

【讨论】:

  • 您好,谢谢您的回复,我非常感谢,现在我尝试在 grok 过滤器中使用条件。而且似乎我总是做错。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-17
相关资源
最近更新 更多