elasticsearch Logstash未解析多个命名捕获组,elasticsearch,logstash,kibana,logstash-grok,elasticsearch,Logstash,Kibana,Logstash Grok" /> elasticsearch Logstash未解析多个命名捕获组,elasticsearch,logstash,kibana,logstash-grok,elasticsearch,Logstash,Kibana,Logstash Grok" />

elasticsearch Logstash未解析多个命名捕获组

elasticsearch Logstash未解析多个命名捕获组,elasticsearch,logstash,kibana,logstash-grok,elasticsearch,Logstash,Kibana,Logstash Grok,我刚刚开始使用Logstash、ElasticSearch和Kibana来可视化日志,目前遇到了一些问题 我有一个由logstash收集的日志文件,我想在将这些字段写入ElasticSearch之前从日志条目中提取字段 我已经用我的日志存储配置文件中的许多命名捕获组定义了一个过滤器,但此时只有第一个命名捕获组匹配 我的日志文件如下所示: [2014-01-31 12:00:00][FIELD1:SOMEVALUE][FIELD2:SOMEVALUE] 我的logstash过滤器如下所示: if

我刚刚开始使用Logstash、ElasticSearch和Kibana来可视化日志,目前遇到了一些问题

我有一个由logstash收集的日志文件,我想在将这些字段写入ElasticSearch之前从日志条目中提取字段

我已经用我的日志存储配置文件中的许多命名捕获组定义了一个过滤器,但此时只有第一个命名捕获组匹配

我的日志文件如下所示:

[2014-01-31 12:00:00][FIELD1:SOMEVALUE][FIELD2:SOMEVALUE]

我的logstash过滤器如下所示:

if[type] == "mytype {    grok    {    match => [ "message", "(?<TIMESTAMP>regex)", "message", "(?<FIELD1>regex)", "message", "(?<FIELD2>regex)" ]    }    }
if[type]=“mytype{grok{match=>[“message”、“(?regex)”、“message”、“(?regex)”、“message”、“(?regex)”]}

我已经验证了我所有字段的正则表达式都是正确的,但是当我转到Kibana仪表板时,字段1和字段2没有出现

如果有人能说明这一点,我将不胜感激

谢谢


凯文

格罗克的默认行为是在第一场比赛后停止处理

您可以通过设置为false来更改此设置:

if[type] == "mytype {
    grok
    {
        match => [ 
            "message", "(?<TIMESTAMP>regex)",
            "message", "(?<FIELD1>regex)",
            "message", "(?<FIELD2>regex)"
        ]
        break_on_match => false
    }    
}
if[type]=“mytype”{
格罗克
{
匹配=>[
“message”、“(?regex)”,
“message”、“(?regex)”,
“消息”、(?正则表达式)”
]
在匹配时中断匹配=>false
}    
}

在学习了更多关于使用grok解析的知识后,我发现很多时候不必编写自己的正则表达式。我可以使用许多预定义的grok模式,并且可以在解析logstash日志时扩展这些模式来创建自己的自定义模式

logstash支持的grok模式的有用链接:

使用新发现的知识,我能够将我的匹配配置更改为下面的配置

if[type] == "mytype" {
    grok {
        match => ["\[%{TIMESTAMP_ISO8601:dateTime}\]%{SPACE}\[%{WORD}\:%{FLOATINGPOINT:cpu}\]%{SPACE}\[%{WORD}\:%{FLOATINGPOINT:memory}\]"]
    }
}
这使用了内置的grok patterns时间戳:ISO8601来选择日志中的日期,在我的示例中,我创建了一个非常简单的自定义模式FLOATINGPOINT来选择内存和cpu的浮点值。FLOATINGPOINT模式如下所示:

FLOATINGPOINT  %{INT}\.%{INT}

欢迎来到stackoverflow!我对kibana一无所知,但如果你能发布你实际得到的信息,你会得到更好的答案。谢谢你的建议,但这似乎对我不起作用。我尝试过在match语句后使用逗号,但logstash不喜欢这样,因此无法运行。没有它,logstash会运行,但我有同样的问题,即只有第一个捕获组匹配,其他两个被忽略。确认!逗号是我刚刚修复的语法错误。至于捕获组,如果您尝试以下方法,它们是否匹配?对于一些示例输入,这可能更容易进行故障排除。是的,所以我使用grok调试器尝试了我所有的正则表达式,它们都与我在试图解析的日志中给出的输入相匹配。我试图解析的输入示例是[2014-02-12 14:08:00]\t[CPU:44.9]\t[MEMORY:55.1]。我对这些字段中的每个字段的正则表达式的顺序是
(?\\d{4}-\\d{2}-\\d{2}\\s{1}\\d{2}:\\d{2}:\\d{2})(?CPU:\\d{1,2}.\\d{1,2}.\\d{1,2})(?内存:\\d{1,2}.\\d{1,2})
它们就是这样写在STASH文件中的吗?您不需要避开反斜杠(即:要匹配一个数字,
\\d
应该是
\d
)。对不起,您是对的,我只有
\d
。在写最后一条评论时,我手头没有配置文件,这是因为我习惯于编写Java正则表达式