depeche 10.03.2011 00:50
Есть вопрос! — Nginx+Syslog (mb syslog-ng)
Всем привет!Есть проблемка. Имеется Cent OS сервер с Nginx. Нужно отсылать логи nginx-а на удаленный сервер (на удаленке стоит syslog-ng). Используя гугл выяснил, что напрямую он с syslog-ом не умеет работать, именно потому попробовал это http://www.grid.net.ru/nginx/udplog.ru.html . Но, как выяснилось, с тем плагином нджинкс вообще не хотел стартовать и сразу слал ероры в ерор-лог, но сервер в процесах висел. Пробовал также logger (shell command interface to the syslog), норм работает, но проблема в том, что он только при запуске пересылает лог, а не постоянно опрашивает их на предмет изменения. Впринципе можно было бы все реализовать с помощью крона и переодически запускать комманду типа logger -p local0.notice -f /адрес/файла/которого/нужно/переслать/в/лог но это как по мне довольно костыльно.
Так вот вопрос в том, как это все реализовать лучшим образом? В данном случае можно спользовать и что-то альтернативное, не только syslog или syslog-ng. Поделитесь опытом!
а файл /var/log/access.lo на локальной машине мониторится постоянно? вплане любые его изменения будут зарегистрированы и сразу отосланы сислогом-нг куда надо?
Да. syslog-ng поддерживает ряд типов source, среди которых есть и такой - читать из файла. Частота проверки изменения файла настраивается в опциях.
Читать тут. Ну и вообще рекомендую по нему доки почитать, syslog-ng очень мощный.
Читать тут. Ну и вообще рекомендую по нему доки почитать, syslog-ng очень мощный.
можно ли использовать такой синтаксис
file("tail -f /var/log/nginx/error.log | logger -p local4.info")
т.е. выполнение комманды вместо конкретного файла. тут прочитал http://belgorod.lug.ru/wiki/index.php/%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_syslog-ng
file("tail -f /var/log/nginx/error.log | logger -p local4.info")
т.е. выполнение комманды вместо конкретного файла. тут прочитал http://belgorod.lug.ru/wiki/index.php/%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_syslog-ng
Если это - кусок конфига syslog-ng, то нельзя. Если надо читать "из stdin", то есть program() (или pipe(), если через FIFO).
Самое смешное, что приходилось. Сейчас уже не помню деталей, но вот результат:
1. Ставили Solr/jetty в /opt/jetty
2. Развернули solr.war в /opt/jetty/webapps/solr (сам solr.war припрятали)
3. Заменили slf4j-jdk14-1.5.5.jar на slf4j-log4j12-1.5.5.jar в /opt/jetty/webapps/solr/WEB-INF/lib
4. Сам log4j-1.2.16.jar положили в /opt/jetty/lib/ext
5. jetty/solr запускается с параметром Dlog4j.configuration=file:etc/log4j.properties
6. Содержимое /opt/jetty/etc/log4j.properties:
log4j.rootLogger=INFO, SYSLOG, STDOUT
log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout
log4j.appender.STDOUT.layout.conversionPattern=%d{dd MMM yyyy HH:mm:ss} %-5p
1. Ставили Solr/jetty в /opt/jetty
2. Развернули solr.war в /opt/jetty/webapps/solr (сам solr.war припрятали)
3. Заменили slf4j-jdk14-1.5.5.jar на slf4j-log4j12-1.5.5.jar в /opt/jetty/webapps/solr/WEB-INF/lib
4. Сам log4j-1.2.16.jar положили в /opt/jetty/lib/ext
5. jetty/solr запускается с параметром Dlog4j.configuration=file:etc/log4j.properties
6. Содержимое /opt/jetty/etc/log4j.properties:
log4j.rootLogger=INFO, SYSLOG, STDOUT
log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout
log4j.appender.STDOUT.layout.conversionPattern=%d{dd MMM yyyy HH:mm:ss} %-5p
source s_acces_log { file("/var/log/access.log"); };
destination d_stats { tcp("1.2.3.4" port(5678)); };
log { source(s_acces_log); destination(d_stats); };
Ротейшны воспринимает адекватно.
# syslog-ng -V
syslog-ng 3.1.1