[英]How to extract and visualize values from a log entry in OpenShift EFK stack
我有一个带有用于日志记录的 EFK 堆栈的 OKD 集群设置,如here所述。 我以前从未使用过其中一个组件。
一个部署记录了包含我感兴趣的特定值的请求。我想只提取这个值并使用 Kibana 中的区域地图将其可视化,该地图显示请求的数量及其来源。
message
字段的内容基本上是这样的:
[fooServiceClient#doStuff] {"somekey":"somevalue", "multivalue-key": {"plz":"12345", "foo": "bar"}, "someotherkey":"someothervalue"}
这个plz
是德国邮政编码,我想按照描述进行可视化。
我的问题是我不知道如何提取这个值。
如果我能用正则表达式找到它,那么第一次成功就很好,但 Kibana 似乎并没有像我想象的那样工作。 按照它的文档,我希望这个/\\"plz\\":\\"[0-9]{5}\\"/
向我提供结果,但我得到了 0 个点击(时间间隔设置正确)。 即使这个正则表达式匹配,我也只会找到包含它的日志条目,而不仅仅是特定的值。 我如何继续这里?
我想我还需要一个外部地理编码服务,但我应该在什么时候包含它? 或者 Kibana 本身知道如何将邮政编码映射到几何图形?
初学者友好的分步指南将是完美的,但我可以接受一些指导我的提示。
当文档被索引到 ES 时,可以使用带有 grok 处理器的摄取管道来解析message
字段。
首先,像这样创建摄取管道:
PUT _ingest/pipeline/parse-plz
{
"processors": [
{
"grok": {
"field": "message",
"patterns": [
"%{POSINT:plz}"
]
}
}
]
}
然后,当您索引数据时,您只需引用该管道:
PUT plz/_doc/1?pipeline=parse-plz
{
"message": """[fooServiceClient#doStuff] {"somekey":"somevalue", "multivalue-key": {"plz":"12345", "foo": "bar"}, "someotherkey":"someothervalue"}"""
}
你最终会得到一个像下面这样的文档,它现在有一个名为plz
的字段,其中包含12345
值:
{
"message": """[fooServiceClient#doStuff] {"somekey":"somevalue", "multivalue-key": {"plz":"12345", "foo": "bar"}, "someotherkey":"someothervalue"}""",
"plz": "12345"
}
从 Fluentd 索引文档时,您可以指定要在配置中使用的管道。 如果您不能或不想修改您的 Fluentd 配置,您还可以为您的索引定义一个默认管道,该管道将在每次为新文档编制索引时启动。 只需在您的索引上运行它,您就不需要在索引文档时指定?pipeline=parse-plz
:
PUT index/_settings
{
"index.default_pipeline": "parse-plz"
}
如果你有多个索引,更好的方法可能是定义一个索引模板,这样每当一个名为project.foo
-something 的新索引被创建时,设置将被应用:
PUT _template/project-indexes
{
"index_patterns": ["project.foo*"],
"settings": {
"index.default_pipeline": "parse-plz"
}
}
现在,为了在地图上映射该 PLZ,您首先需要找到一个数据集,为您提供每个 PLZ 的地理位置。
然后,您可以在管道中添加第二个处理器,以便执行 PLZ/ZIP 到经纬度映射:
PUT _ingest/pipeline/parse-plz
{
"processors": [
{
"grok": {
"field": "message",
"patterns": [
"%{POSINT:plz}"
]
}
},
{
"script": {
"lang": "painless",
"source": "ctx.location = params[ctx.plz];",
"params": {
"12345": {"lat": 42.36, "lon": 7.33}
}
}
}
]
}
最终,您的文档将如下所示,您将能够利用 Kibana 可视化中的location
字段:
{
"message": """[fooServiceClient#doStuff] {"somekey":"somevalue", "multivalue-key": {"plz":"12345", "foo": "bar"}, "someotherkey":"someothervalue"}""",
"plz": "12345",
"location": {
"lat": 42.36,
"lon": 7.33
}
}
所以总结起来,这一切都归结为只有两件事:
project*
索引创建一个索引模板,其设置包括在步骤 1 中创建的管道
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.