Всем привет!
Есть проблемка. Имеется 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. Поделитесь опытом!
-
У нас работает как-то так (syslog-ng):
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
-
-
а файл /var/log/access.lo на локальной машине мониторится постоянно? вплане любые его изменения будут зарегистрированы и сразу отосланы сислогом-нг куда надо?
-
-
Да. syslog-ng поддерживает ряд типов source, среди которых есть и такой - читать из файла. Частота проверки изменения файла настраивается в опциях.
Читать тут. Ну и вообще рекомендую по нему доки почитать, 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).
-
по поводу ссылки только что прочитал. ) сейчас попробую.
-
не приходилось настраивать логи Solr-сервера?
-
-
Самое смешное, что приходилось. Сейчас уже не помню деталей, но вот результат:
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 [%t] %c{2} %x - %m%n
log4j.appender.SYSLOG=org.apache.log4j.net.SyslogAppender
log4j.appender.SYSLOG.syslogHost=127.0.0.1
log4j.appender.SYSLOG.layout=org.apache.log4j.PatternLayout
log4j.appender.SYSLOG.layout.conversionPattern=jetty: [%t] %c{2} %x %m
log4j.appender.SYSLOG.Facility=LOCAL0
log4j.appender.SYSLOG.filter.WARN=org.apache.log4j.varia.LevelRangeFilter
log4j.appender.SYSLOG.filter.WARN.LevelMin=WARN
log4j.appender.SYSLOG.filter.WARN.LevelMax=FATAL
7. Содержимое /etc/rsyslogd.d/central.conf (у нас Debian, в нём штутно rsyslogd, ничего ломать не хотели):
*.info;local1,local2,local3,local4,local5,local6,local7.none @1.2.3.4
(где 1.2.3.4 - наш центральный лог-сервер).
Я потратил где-то два рабочих дня, чтоб настроить solr для нормального логирования (java немного "неродная" для меня технология). Потребовалось почитать про сам Solr/Lucene, Jetty и log4j.
-
-
>Ставили Solr/jetty в /opt/jetty
Я так понимаю устанавливать надо только Solr? Или как понимать Solr/jetty?
-
-
Ну как. Сам solr - это просто solr.war (сервлет). Но его надо запускать чем-то. В комплекте с solr'ом идёт jetty. Мы не стали париться с Apache Tomcat и взяли, что дают. На самом деле, самый простой способ запуска solr - это cd /opt/jetty; java -jar start.jar - запустится "встроенный jetty".
Разумеется, не всё так просто и с сайта jetty мы утащили дебиановский стартовый скрипт, приспособили под себя и пускем им. У нас вообще кластер из четырёх солров : один мастер и три слейва.
-
я вот нашел в книге http://www.wowebook.com/web-development/solr-1-4-enterprise-search-server.html
203 страница.
как тебе?
-
-
А, это примерно то, что я и написал. SLF4J пишет только в файл. Мы могли "поднимать" этот файл при помощи syslog-ng file(), но тогда таймстэмпы добавлялись бы к каждой строчке, а у солра вывод многострочный. Для "красоты" хотелось, чтоб эти сообщения уходили одной записью. Поэтому и перешли на log4j.
Ну а вообще всё правильно написано, годная книжка. Её и читал :)
-
-
Просто проблема в том, что я доделую работу, которую начали другие.
И тут я иследовал, что в папке init.d уже создали запусковые скрипты solr. Выглядит он так:
#!/bin/sh -e
# chkconfig: 2345 95 20
# description: Solr Indexing Server
SOLR_DIR="/opt/solr1/example"
JAVA_OPTIONS=" -Xms800m -Xmx1200m -Djetty.port=8983 -DSTOP.PORT=8071 -DSTOP.KEY=ftasolrstop -Dsolr.solr.home=multicore -jar start.jar"
LOG_FILE="/var/log/solr1.log"
JAVA="/usr/bin/java"
PKILL="/usr/bin/pkill"
case $1 in
start)
echo "Starting Solr"
cd $SOLR_DIR
$JAVA $JAVA_OPTIONS 2> $LOG_FILE &
;;
stop)
echo "Stopping Solr"
cd $SOLR_DIR
$JAVA $JAVA_OPTIONS --stop
;;
restart)
$0 stop
sleep 1
$0 start
;;
*)
echo "Usage: $0 {start|stop|restart}" >&2
exit 1
;;
esac
т.е я это понимаю, как запуск сервлета джавой с параметром логирования в /var/log/solr1.log. Так ведь?
-
-
Ага, оно.
-
-
Наверное тебе приходилось также работать с memcached. В принципе ясно, но имею некоторые вопросы:
1) http://www.quora.com/How-can-I-enable-memcached-logging-to-disk Типа редактирование скрипта запуска в /etc/init.d с выводом в определенный лог. Это нормально? Или есть какие то другие варианты?
2) Заметил, что обьем файла логов (на примере с solr) быстро растет. Как эту проблему можно устранить?
-
все вроде ок, получилось. спасибо.
Вопрос #2. Кто-то пробовал какие-то плагины для работы сислога с нджинксом? Ну типа такого
-
-
Я бы не стал. Скорее всего, вывод в syslog скорее всего является блокирующим и если что-то с сислогом произойдёт - nginx просто встанет колом. Я бы делал через файл, потому что в этом случае он (файл) выступит в качестве почти бесконечного буфера.
Есть ещё вариант с выводом лога в именованый канал(pipe), syslog-ng умеет и из него читать. Но опять же: если "читатель" (syslog-ng) отвалится, nginx быстро заполнит буфер fifo и остановится. Вот тут Сысоев (автор nginx) про это пишет.
-
http://www.grid.net.ru/nginx/udplog.ru.html
|
|
|
Последние посты
|
|
Последние комментарии
|
|
Изменения
|
|
Черновики (все)
|
|
Избранное (всё)
|
|
|