在grok%{QS:message}中寻找关键字

时间:2015-03-18 01:23:20

标签: elasticsearch logstash grok logstash-grok kibana-4

我上下搜索并且想知道这是否是Grok内部可能的选项。所以我的日志文件被过滤得很好。除此之外,%{QS:message}包含我的ERROR,WARNING,POST,GET等。我希望能够查询Kibana中的那些但是没有选项。我可以做些什么来使这些关键字从logstash回到kibana

1 个答案:

答案 0 :(得分:1)

如果你一步一步地分析它,它可能是最容易的。将以下内容添加到输出部分stdout { codec => rubydebug }

处理日志消息时,它会详细说明logstash在处理logmessage期间创建的所有字段及其值。只要你没有在elasticsearch输出中指定任何花哨的东西,这些字段就会存储在elasticsearch中(以及它们未经分析的.raw对应物)。如果看起来没问题,那么你可以使用其休息界面交互式地(使用curl)或者通过安装elasticsearch kopf插件(或类似的东西)来查看弹性方面的东西,以查看实际存储在elasticsearch中的内容。

编辑:关于你的最后评论。

假设您的日志数据看起来像“POST:从shoppingcart.php提交的表单”

您可以使用带有正则表达式的if语句来检查您的消息是否包含给定的字符序列(如POST),然后使用mutate过滤器为您的事件添加字段或标记,如下所示:

if [logmessage] =~ /POST/ {
    mutate { add_tag => ["POST"] }
    # or you could also do something like:
    mutate { add_field => ["method","POST"]}
}

您也可以使用grok过滤器来进一步解析您的消息,而不是if语句:

grok {
      match => ["logmessage", "(?<method>POST)"]
      tag_on_failure => []
}

根据日志条目的结构和要提取的复杂性,优先使用方法a。或b。如果您的日志非常结构化,您可以简单地构建一个grok过滤器来处理所有变体。假设您的所有行都是这样的:

方法| RETURNCODE | MessageText中

你可以做一个简单的grok过滤器,如

%{DATA:方法} |%{DATA:RETURNCODE} | {GREEDYDATA:}的MessageText

负责处理所有行并将您的日志解析为字段以进行kibana分析。

但是,如果您的日志非常非结构化,并且您只想查找少量关键字,那么您也可以使用if regexp风格......