我有一个带有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/

    10-10 10:42