使用grok过滤器(Logstash)解析我的business_log

时间:2016-12-07 05:10:55

标签: logging conditional logstash logstash-grok

public void onClick(View v) { PopupMenu menu = new PopupMenu(DialogCheckBox.this, v); for (String s : limits) { // "limits" its an arraylist menu.getMenu().add(s); } menu.show(); } 的某些行:

business_log

我想根据"关键字"解析此日志。例如2016-11-28 00:00:00.7000 INFO : OneTwoThreeHandler.GetBot Cannot find a bot: Rak 20000 2016-11-28 00:00:00.7000 INFO : OneTwoThreeHandler.GetBotPlayer Cannot find a bot: COIN 50000 2016-11-28 00:00:01.4812 INFO : OneTwoThreeHandler.GetBotPlayer Find a bot: 1219552640:ut:coinu - rak: 6703098 - coin: 2721975 2016-11-28 00:00:01.4812 INFO : OttMatchSolo.Matched Solo Matched: 1:Rak OneTwoThreeHandler.GetBotOneTwoThreeHandler.GetBotPlayerOneTwoThreeHandler.GetBotPlayer

因为每个"关键字",行日志的其余部分是不同的。我认为我可以使用grok条件,任何人都可以告诉我如何?谢谢

1 个答案:

答案 0 :(得分:0)

您可以使用,假设message字段包含您的日志:

if [message] =~ /OneTwoThreeHandler\.GetBotPlayer/ {
    ...
} else if [message] =~ / OneTwoThreeHandler\.GetBot/ {
    ...
} else if [message] =~ /OttMatchSolo\.Matched/ {
    ...
} else {
    ...
}

每个分支包含这些特定日志的特定配置。

有关logstash配置中的条件的详细信息,请参阅此documentation

您需要将日志通过多行过滤器/编解码器或与您的出货单一起执行操作,以便您的日志在一行中,如下所示:

2016-11-28 00:00:01.4812 INFO : OttMatchSolo.Matched Solo Matched: 1:Rak

或者你可以在一个grok过滤器中放置多个grok模式:

grok{
    match => {
        "message" => [
            "%{TIMESTAMP_ISO8601} %{LOGLEVEL} : OneTwoThreeHandler.GetBotPlayer %{GREEDYDATA}",
            "%{TIMESTAMP_ISO8601} %{LOGLEVEL} : OneTwoThreeHandler.GetBot %{GREEDYDATA}",
            "%{TIMESTAMP_ISO8601} %{LOGLEVEL} : OttMatchSolo.Matched %{GREEDYDATA}"                
        ]
    }
}

您仍然需要执行多行加入才能发挥作用。