我需要使用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"
有没有人知道为什么我的Redis模板,目的地和Syslog-ng的日志出货单无效?
提前致谢! 科尔
答案 0 :(得分:0)
抱歉没有早点看到这个。你看过使用format-json()吗?
这是我一直使用的目的地,效果很好(大多数宏来自patterndb解析器)
destination d_redis {
redis (
host("localhost")
command("LPUSH", "logstash", "$(format-json type=bluecoat proxy_time=${PROXY.TIME} proxy_time_taken=${PROXY.TIME_TAKEN} proxy_c_ip=${PROXY.C_IP} proxy_sc_status=${PROXY.SC_STATUS} proxy_s_action=${PROXY.S_ACTION} proxy_sc_bytes=int64(${PROXY.SC_BYTES}) proxy_cs_bytes=int64(${PROXY.CS_BYTES}) proxy_cs_method=${PROXY.CS_METHOD} proxy_cs_uri_scheme=${PROXY.CS_URI_SCHEME} proxy_cs_host=${PROXY.CS_HOST} proxy_cs_uri_port=${PROXY.CS_URI_PORT} proxy_cs_uri_path=${PROXY.CS_URI_PATH} proxy_cs_uri_equery=${PROXY.CS_URI_EQUERY} proxy_cs_username=${PROXY.CS_USERNAME} proxy_cs_auth_group=${PROXY.CS_AUTH__GROUP} proxy_s_supplier_name=${PROXY.S_SUPPLIER_NAME} proxy_content_type=${PROXY.CONTENT_TYPE} proxy_referrer=${PROXY.REFERRER} proxy_user_agent=${PROXY.USER_AGENT} proxy_filter_result=${PROXY.FILTER_RESULT} proxy_cs_categories=${PROXY.CS_CATEGORIES} proxy_x_virus_id=${PROXY.X_VIRUS_ID} proxy_s_ip=${PROXY.S_IP} proxy_any=${PROXY.ANYREST})\n")
);
};
顺便说一句 - 我真的更喜欢syslog-ng
在logstash上进行解析。我的经验是使用patterndb比使用grok要快得多,并且syslog-ng
完成它会使配置更加灵活。