我有这种日志 21.4.1.2 - - [28 / Dec / 2016:12:18:40 +0000]“获取a / b / c / d / e / f HTTP / 1.1”200 984072“Mozilla / 5.0(Windows NT 10.0; WOW64) AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 55.0.2883.87 Safari / 537.36“0.104 0.103。 现在我应该如何使用grok模式提取它? 我也不知道字段的数量,即rest api也可以是a / b / c和a / b / c / d / e / f / g。我应该如何处理它以便我可以在kibana中按a,b或c分组。
答案 0 :(得分:1)
如果已知深度,您可以将URL字段重新填入这些字段。
如果有一个仲裁深度,mutate-split可以创建一个数组,但它们没用。
csv {}过滤器如何使用“/”作为分隔符并产生一堆名为“column1”,“column2”等的字段?
答案 1 :(得分:0)
您可以使用%{GREEDYDATA:value} grok模板来提取API路径部分,您可以在其中拆分“/”。调试grok模式http://grokdebug.herokuapp.com/时,此工具非常有用。
首先:
%{IP:clientip} \- \- \[%{NOTSPACE:date} \+%{INT}\] \"%{WORD:action} %{GREEDYDATA:api} %{WORD:protocol}/%{NUMBER:protocolNum}\" %{NUMBER:status} %{NUMBER} %{QUOTEDSTRING} %{NUMBER} %{NUMBER}
这将为您提供api字段中的api路径。
或者,我们正在开发Moesif,这是一个API调试和分析工具(https://www.moesif.com/features),根据您的需要,它可能对您有所帮助。 (完全披露,我是CEO)