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