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