elasticsearch Logstash MySQL合并多行
我一直在玩logstash,并且能够将我的一些MySQL表插入弹性搜索 现在,我需要将MySQL查询语句中的多行合并到一个文档中。例如,假设我有一个mySQL查询,结果如下:
elasticsearch Logstash MySQL合并多行,
elasticsearch,logstash,
elasticsearch,Logstash,我一直在玩logstash,并且能够将我的一些MySQL表插入弹性搜索 现在,我需要将MySQL查询语句中的多行合并到一个文档中。例如,假设我有一个mySQL查询,结果如下: 1 Group1 Company1 User1 1 Group1 Company1 User2 1 Group2 Company2 User3 1 Group2 Company2 User4 我想为Group1和Group2创建两个组文档。在Group1中,我需要添加Use
1 Group1 Company1 User1
1 Group1 Company1 User2
1 Group2 Company2 User3
1 Group2 Company2 User4
我想为Group1和Group2创建两个组文档。在Group1中,我需要添加User1和User2。在Group2中,我需要添加User3和User4
这是否可能使用LogStash并与一些过滤器相结合?如果是这样的话,请有人给我指出正确的方向。您可以使用。过滤器采用task\u id
,在您的案例中为group字段,并聚合具有相同task\u id值的行。因此,group1的事件将被聚合,然后当过滤器检测到新的组值时,group1的聚合用户数据将作为单个日志存储事件推送到elasticsearch文档中。然后,它用group2重新开始这个过程
确保logstash筛选器工作程序设置为1(-w 1
标志或在配置文件中),并且行的排序方式确保所有group1事件都进入,然后是所有group2等。否则,事件可能会被无序处理,并可能导致意外的结果/数据丢失
filter {
aggregate {
task_id => "%{group}"
code => "
map['users'] ||= []
map['users'].push(event.get('user'))
"
push_previous_map_as_event => true
timeout_tags => ['aggregated']
}
if "aggregated" not in [tags] {
drop {}
}
}
结果如下所示:
"_source": {
"group": "group1",
"users": ["user1", "user2"]
}
这些答案可能会有帮助:+非常感谢你的回答。我会试一试,让你知道。