Мне нужно использовать Redis в качестве хранилища ключей и значений сообщений, из которого Logstash может читать. Идея состоит в том, чтобы использовать существующий сервер Syslog-ng для маршрутизации системного журнала для всех серверов на сервер Redis, чтобы Logstash мог читать с него. У меня настроен сервер Redis, и я могу подключаться и писать в Redis с сервера Syslog-ng, используя:
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 не работают?
Заранее спасибо! Коул