如何从LogStash

时间:2015-10-21 23:04:33

标签: logstash kibana logstash-grok elastic-stack

我正在尝试从具有明确定义格式的自定义应用程序中获取日志数据。我试图使用grok过滤器挑选出某些数据,但我没有运气。这是一个示例日志:

- System.Data.SqlClient.SqlException (0x80131904): Arithmetic overflow error converting IDENTITY to data type int.
Arithmetic overflow occurred. 

我想要做的是从字符串中提取出SqlException。这是我正在使用的grok:

grok{
    match => 
          {
               "message" => 
               [
                   "(?m)%{DATE:TIMESTAMP_DATE}%{SPACE}%{TIME:TIMESTAMP_TIME}%{SPACE}%{WORD:LOG_LEVEL}%{SPACE}(?<THREAD>[^\s]+)%{SPACE}(?<HOST>[^\s]+)%{SPACE}%{GREEDYDATA:MESSAGE}",

                   "(?<EXCEPTION>[.*]+)"
               ]
           }
}

我尝试了几种不同的方法,但我想我并不完全理解文档。我期望发生的是我在第一组中提取的所有字段都包括第二组的结果。换句话说:

TIMESTAMP_DATE,TIMESTAMP_TIME,LOG_LEVEL,THREAD,HOST,MESSAGE,EXCEPTION

我完全得到了其他领域,这只是我缺少的额外匹配。任何帮助,将不胜感激。感谢

1 个答案:

答案 0 :(得分:1)

如果您指定多个模式grok默认情况下只有外观检查模式,直到遇到第一个匹配。如果您想要匹配这两种模式,无论第一种模式是否匹配,您都可以改变这样的行为:

grok{
      break_on_match => false
      match => 
      {
           "message" => 
           [
               "(?m)%{DATE:TIMESTAMP_DATE}%{SPACE}%{TIME:TIMESTAMP_TIME}%{SPACE}%{WORD:LOG_LEVEL}%{SPACE}(?<THREAD>[^\s]+)%{SPACE}(?<HOST>[^\s]+)%{SPACE}%{GREEDYDATA:MESSAGE}",

               "(?<EXCEPTION>[.*]+)"
           ]
       }
}

查看以下文档:https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html#plugins-filters-grok-break_on_match