我们正在使用具有以下配置的 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
}
}
然后,我们使用"host"
以下设置在机器上提取日志:
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 实例之间传递原始日志行。
谢谢,
马特