【问题标题】:If statement not working on grok filter logstash如果语句不适用于 grok filter logstash
【发布时间】:2020-01-23 14:53:17
【问题描述】:

问题

我正在尝试学习 logstash 并使用条件语句解析 grok。日志在 if 语句之外成功解析,但在语句内部没有解析。似乎 grok 不阅读表达式。

目标

[2020-01-09 08:32:46] VERBOSE[18962][C-0000ceae] pbx.c: 执行 [s@macro-dialout-trunk:26] NoOp("PJSIP/3513-0001108e", “由于某种原因拨号失败,DIALSTATUS = BUSY 和 HANGUPCAUSE = 19”)在新堆栈中

filter
{
    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}\: %{WORD:action}\s\[%{DATA:TARGET}@%{DATA:dialplan_context}:%{DATA:dialplan_priority}\]\s%{GREEDYDATA:log_message}"
        }
        add_field => ["receiver_timestamp", "%{@timestamp}"]
        add_field => ["process_name","asterisk_failed"]
    }
    if [action] == "Executing" and [dialplan_priority]=="1"{
        grok
        {
            match =>
            {
                "log_message"=>"%{DATA:asterisk_app}\(\"%{DATA:protocol}\/%{DATA:EXT}\-%{DATA:channel}\"\,\s\"%{DATA:problem1}\-\s%{DATA:problem2}\"\)\s%{GREEDYDATA:all}"
            }
        }
    }
    if [action] == "Executing" and [dialplan_priority]=="26"{
        grok
        {
            match =>
            {
                "log_message"=>"%{DATA:asterisk_app}\(\"%{DATA:protocol}\/%{DATA:EXT}\-%{DATA:channel}\"\,\s\"%{DATA:problem1}\sand\s%{DATA:problem2}\"\)\s%{GREEDYDATA:all}"
            }
        }
    }
}

我已经(自己)测试了我的 grok 过滤器,它运行良好。 是否有一些东西需要导入才能使用条件表达式?

【问题讨论】:

标签: elasticsearch logstash logstash-grok


【解决方案1】:

尝试更改以下条件:

if "Executing" in [action] { logic }

【讨论】:

  • 您好,谢谢您的回复。仍然没有运气
【解决方案2】:

尝试将条件更改为

 if [action] =~ "Executing" and [dialplan_priority] =~"1"{ logic }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-19
    相关资源
    最近更新 更多