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

Looking for keywords within a grok %{QS:message}

我上下搜索了一下,想知道这是否是 Grok 中可能的一个选项。所以我的日志文件过滤得很好。除了 %{QS:message} 是包含我的错误、警告、POST、获取等的内容。我希望能够查询 Kibana 中的那些但没有将它们作为选项。我能做些什么来使这些从 logstash 返回到 kibana 的关键字可用

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

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

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

假设您的日志数据如下所示"POST: Form submitted from shoppingcart.php"

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

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

除了 if 语句,您还可以使用 grok 过滤器来进一步解析您的消息,如下所示:

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

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

方法|returnCode|messageText

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

%{DATA:method}|%{DATA:returnCode}|{GREEDYDATA:messageText}

它会处理您的所有线路并将您的日志解析为字段以供 kibana 分析。

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