【问题标题】:Extract number from text in ElasticSearch从 ElasticSearch 中的文本中提取数字
【发布时间】:2017-09-05 05:30:11
【问题描述】:

我正在使用 logstash 将日志发送到 ElasticSearch 5.1 实例,并使用 Kibana 5.1 显示所有结果。

如何仅从日志的已知模式字符串中提取数字,然后每分钟汇总所有数字?

例如,我的日志行包含以下文本:

“处理 53 条记录”

“处理 45 条记录”

“处理 97 条记录”

我想创建一个名为 processed_records 的字段,分别获取值 53、45、97,然后我想创建另一个名为 processed_records_sum 的字段,其中包含摘要processed_records 每分钟。

我是 ELK 新手,所以我不知道是否需要更改 logstash conf 文件和/或 Kibana

【问题讨论】:

  • 您必须编写一个 grok 过滤器来捕获日志中的记录数。你写过吗?
  • 我不知道 grok 过滤器。很快就会检查出来。谢谢!

标签: elasticsearch indexing logstash kibana analyzer


【解决方案1】:

要提取记录数,需要将日志文件与 Grok 解析器进行匹配,例如:

%{WORD} %{NUMBER:processed_records} %{WORD}

由于您的日志文件可能比这更复杂,因此有在线工具可以提供帮助:

一旦您的日志文件被解析,记录数将存储在 Elasticsearch 的 processed_records 字段中。

求和 (processed_records_sum) 数据需要在查询时完成 - 在将日志记录插入 Elasticsearch 时,您无法计算总和。

在查询时求和时,使用 Kibana UI,或者如果编写 Elasticsearch DSL,则使用聚合。

【讨论】:

  • 谢谢,很有帮助!
【解决方案2】:

虽然性能不佳,但如果您必须避免重新索引,则可以在 kibana 中使用脚本化字段。

在这里介绍:https://www.elastic.co/blog/using-painless-kibana-scripted-fields

  • 通过将以下内容放入您的 elasticsearch.yaml 来启用无痛正则表达式支持:

    script.painless.regex.enabled: true

  • 重启弹性搜索
  • 在 Kibana 中通过 Management -> Index Patterns -> Scripted Fields 创建一个新的脚本字段
  • 语言选择painless,类型选择数字
  • 创建实际脚本,例如:
def logMsg = params['_source']['log_message']; 如果(logMsg == null){ 返回-10000; } def m = /.*处理 ([0-9]+) 记录。*$/.matcher(params['_source']['log_message']); 如果 ( m.matches() ) { return Integer.parseInt(m.group(1)) } 别的 { 返回 -10000 }
  • 您必须完全重新加载网站才能执行新字段,只需在打开的发现站点上重新搜索将不会选择新字段。 (这几乎让我放弃了尝试让这个工作 -.-)
  • 在发现或可视化中使用脚本

虽然我明白,为数百万个日志条目编写字段脚本并不高效,但我的用例是一个非常具体的日志条目,每天总共记录 10 次,我只使用生成的字段来创建一个可视化或分析,我提前通过常规查询减少候选人。

如果可以让这些字段仅在您需要它们的情况下计算(或者它们有意义并且可以开始计算;即不需要“返回 -1000”),那将会很有趣。目前,它们将被应用并显示在每个日志条目中。
您可以在这样的查询中生成脚本字段:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-script-fields.html 但这似乎有点过于隐蔽,难以维护:/

【讨论】:

    【解决方案3】:

    你也可以使用 dissect 插件来达到同样的效果;

    dissect { mapping => { "message" => "%{processing} %{processed_records} %{records}" }
    

    然后您在 Kibana 中相应地配置了摘要!

    【讨论】:

      猜你喜欢
      • 2020-09-24
      • 1970-01-01
      • 2018-06-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-28
      • 2016-10-27
      • 1970-01-01
      相关资源
      最近更新 更多