我有一个带有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本身知道如何将邮政编码映射到几何?
初学者友好的循序渐进指南将是完美的,但是我可以满足一些指导我的建议。
最佳答案
使用ingest pipeline with grok processor可以在文档被索引到ES中时解析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为文档建立索引时,可以在配置中添加specify a pipeline to be used。如果您不能或不想修改Fluentd配置,则还可以为索引定义默认管道,该管道将在每次索引新文档时启动。只需在索引上运行此代码,就可以在为文档建立索引时无需指定
?pipeline=parse-plz
:PUT index/_settings
{
"index.default_pipeline": "parse-plz"
}
如果您有多个索引,则更好的方法可能是定义一个index template,以便每当创建一个名为
project.foo
-something的新索引时,都将应用设置:PUT _template/project-indexes
{
"index_patterns": ["project.foo*"],
"settings": {
"index.default_pipeline": "parse-plz"
}
}
现在,为了在 map 上映射该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中创建的管道关于elasticsearch - 如何从OpenShift EFK堆栈中的日志条目提取和可视化值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57460451/