我需要使用 Redis 作为 Logstash 读取的消息键值存储。这个想法是使用现有的 Syslog-ng 服务器将所有服务器的 syslog 路由到 Redis 服务器,以便 Logstash 能够从中读取。我已经设置了我的 Redis 服务器,并且能够使用以下命令从 Syslog-ng 服务器连接和写入 Redis:
telnet redis.somedomain.com 6379
所以端口是打开的,可以写入,但是没有发送键值存储。我已经让这个系统的大部分工作使用 UDP 以及附加到 /var/log/hosts 下的各个主机。我对现有 syslog-ng.conf 文件所做的更改如下:
# In Redis Protocol Notation
# $5 = 5 characters(LPUSH), $4 = 4 characters(logs), $(length $MSG) = character length of $MSG,
# $MSG = Log Message per syslog-ng symbols
template t_redis_lpush { template("*3\r\n$5\r\nLPUSH\r\n$4\r\nlogs\r\n$(length $MSG)\r\n$MSG\r\n"); };
destination d_redis_tcp { tcp("redis.somedomain.com" port(6379) template(t_redis_lpush)); };
log { source(remote); source(noforward); filter(f_messages); destination(d_redis_tcp); flags(final); };
我没有包含 f_messages 过滤器内容,因为它已经工作并且用于将日志发送到 UDP 和 /var/log/hosts。如果有人希望我提取过滤器功能,我也可以发布它们。filter(f_messages) 最终将结果处理为类似于以下内容的内容
"Jan 21 14:27:23 www1/www1 10.252.4.152 - - [21/Jan/2014:14:27:23 -0700] "POST /service.php?session_name=6tiqbpfeu1uc31pg1eimjqpvt0&url=%2Fseo%2FinContentLinks%2Fblogs.somedomain.com%7Cmusic%7C2013%7C12%7Cinterview_fredo.php%2F HTTP/1.1" 200 536 www1.nyc.somedomain.com "66.156.238.1" "-" "Arch Quickcurl" "8126464" 0 92878"
有谁知道为什么我的 Syslog-ng 的 Redis 模板、目的地和日志发送程序不起作用?
提前致谢!油菜