繁体   English   中英

根据文档 ID 在多个 logstash 上组合输出

[英]Combined output on multiple logstash according to document ID

我有一个来自 RabbitMq 的 json 日志。 就我而言,我使用三个不同的 logstash 服务消耗三个不同的 ques,它将使用相同的索引输出到 elasticsearch。 假设我们有日志 A、日志 B 和日志 C。这些日志的结构如下:

日志 A 示例

日志 B 的示例

日志 C 示例

使用这些日志并将这些日志发送到弹性的配置文件与以下内容相同:

配置文件

问题 => 在发送到具有相同索引的弹性之前,如何根据 document_id 组合这三个不同的日志?

也许 JSON 输出将如下所示:

结果

您可以使用 document_id 组合弹性搜索端的日志,您可以使用弹性搜索更新查询来执行更新功能,使其与现有记录合并。

下面的代码将检查弹性搜索上是否有带有文档 id 的文档,如果没有文档,它将创建一个新文档。 如果存在具有文档 ID 的文档,它将执行更新查询。

为了澄清,请查看docs-update-by-query

试试这个下面的代码:



elasticsearch {

                hosts => [ "xxxxxx"]
                index => "combined"

                action => "update"

                doc_as_upsert => true

                document_id => "%{[header][serialNum]}"

}

我看到一个建议使用更新选项的答案,

使用 elasticsearch "action => update" 会像疯了一样降低你的性能。 随着流量的增加,您会看到 ES 集群非常努力地工作。

“更新”将首先使ES搜索文档,合并文档,删除现有文档并添加这个新的合并文档。

那是很多处理!

我的答案:

使用聚合过滤器。 有一个 task_id 字段可以对其进行排序。 您可以将其设置为

aggregate {
 task_id => %{[header][serialNum]}
 ...
}

https://www.elastic.co/guide/en/logstash/current/plugins-filters-aggregate.html

暂无
暂无

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

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