繁体   English   中英

如何从 OpenShift EFK 堆栈中的日志条目中提取和可视化值

[英]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
  }
}

所以总结起来,这一切都归结为只有两件事:

  1. 创建一个摄取管道来解析文档,因为它们被索引
  2. 为所有project*索引创建一个索引模板,其设置包括在步骤 1 中创建的管道

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM