0

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

4

1 回答 1

1

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

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

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

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

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

方法|返回代码|消息文本

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

%{DATA:方法}|%{DATA:returnCode}|{GREEDYDATA:messageText}

它会处理您的所有行并将您的日志解析为用于 kibana 分析的字段。

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

于 2015-03-24T08:40:49.367 回答