12203 } } filter { gro-6ren">
gpt4 book ai didi

redis - 多个 Logstash 实例导致行重复

转载 作者:可可西里 更新时间:2023-11-01 11:22:25 25 4
gpt4 key购买 nike

我们使用具有以下配置的 Logstash 接收日志:

input {
udp {
type => "logs"
port => 12203
}
}

filter {
grok {
type => "tracker"
pattern => '%{GREEDYDATA:message}'
}
date {
type => "tracker"
match => [ "timestamp", "yyyy-MM-dd HH:mm:ss,SSS" ]
}
}

output{
tcp{
type => "logs"
host => "host"
port => 12203
}
}

然后,我们使用以下设置在机器 “主机” 上获取日志:

input {
tcp {
type => "logs"
port => 12203
}
}


output {
pipe {
command => "python /usr/lib/piperedis.py"
}
}

从这里开始,我们将对行进行解析并将它们放入 Redis 数据库中。然而,我们发现了一个有趣的问题。

Logstash 在 JSON 样式包中“包装”日志消息,即:

{\"@source\":\"source/\",\"@tags\":[],\"@fields\":{\"timestamp\":[\"2013-09-16 15:50:47,440\"],\"thread\":[\"ajp-8009-7\"],\"level\":[\"INFO\"],\"classname\":[\"classname\"],\"message\":[\"message"\]}}

然后,我们在接收到它并将其传递到下一台机器时,将其作为消息并将其放入另一个包装器中!我们只对实际日志消息感兴趣,对其他内容(源路径、源、标签、字段、时间戳等)不感兴趣

我们可以使用过滤器或其他方法来做到这一点吗?我们查看了文档,但找不到任何方法在 Logstash 实例之间传递原始日志行。

谢谢,

马特

最佳答案

logstash 文档是错误的 - 它表明默认的“编解码器”是 plain但实际上它不使用编解码器 - 它使用输出 format .

要获得更简单的输出,请将输出更改为类似

output {
pipe {
command => "python /usr/lib/piperedis.py"
message_format => "%{message}"
}
}

关于redis - 多个 Logstash 实例导致行重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18832288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com