syslog-ng отправка сообщения xmpp
Добрый день господа и дамы.
Пытаюсь настроить оповещение по xmpp у логгера syslog-ng, пока не получается. Помогите разобраться.
Конфиг syslog-ng.conf
@version: 3.2 # $Header: /var/cvsroot/gentoo-x86/app-admin/syslog-ng/files/syslog-ng.conf.gentoo.3.2,v 1.1 2011/01/18 17:44:14 mr_bones_ Exp $ # # Syslog-ng default configuration file for Gentoo Linux options { chain_hostnames(no); # The default action of syslog-ng is to log a STATS line # to the file every 10 minutes. That's pretty ugly after a while. # Change it to every 12 hours so you get a nice daily update of # how many messages syslog-ng missed (0). stats_freq(43200); # The default action of syslog-ng is to log a MARK line # to the file every 20 minutes. That's seems high for most # people so turn it down to once an hour. Set it to zero # if you don't want the functionality at all. mark_freq(3600); }; # Определяем новый источник - сеть source s_udp { udp(); }; source src { unix-stream("/dev/log" max-connections(256)); internal(); file("/proc/kmsg"); }; destination messages { file("/var/log/messages"); }; destination d_prog { program("/etc/syslog-ng/xmpp_message.sh" template("<$PRI>$DATE $HOST $MSG\n") template_escape(no) ); }; #destination d_prog { program("/etc/syslog-ng/xmpp_message.sh" template("<$PRI>$DATE $HOST $MSG\n") ); }; # By default messages are logged to tty12... destination console_all { file("/dev/tty12"); }; # ...if you intend to use /dev/console for programs like xconsole # you can comment out the destination line above that references /dev/tty12 # and uncomment the line below. #destination console_all { file("/dev/console"); }; log { source(src); destination(messages); }; log { source(src); destination(console_all); }; # Описываем фильтр, который будет из всей кучи сообщений выбрить # сообщения от хостов из нашей сети. filter f_remote { host(""); }; # Описываем хранилище логов. # Логи будут находится в директории /var/log/remote # и иметь имя: -<уровень>.log destination df_remote { file("/var/log/remote/$HOST-$LEVEL.log"); }; # Настраиваем логгирование log { source(s_udp); filter(f_remote); destination(df_remote); }; log { source(s_udp); filter(f_remote); destination(d_prog); };
Основные строки:
destination d_prog { program("/etc/syslog-ng/xmpp_message.sh" template("<$PRI>$DATE $HOST $MSG\n") template_escape(no) ); }; log { source(s_udp); filter(f_remote); destination(d_prog); };
Скрипт пробовал по разному переписывать, но как мне кажется должно быть так
Код скрипта xmpp_message.sh :
#!/bin/sh /usr/bin/printf "%b" "syslog "$1" "$2" "$3" "$4 | /usr/bin/sendxmpp "dst_user" -j 192.168.1.7:5222 -u user -p pass -v
При таком скрипте я получаю подобные сообщения:
8 11:23:17 syslog
8 11:23:18 syslog
8 11:23:19 syslog
8 11:23:21 syslog
8 11:23:22 syslog
8 11:23:23 syslog
То есть я не понимаю как syslog-ng передает сообщение d_prog.
В моем понимании template("<$PRI>$DATE $HOST $MSG\n" задает формат строки сообщения, и передает его указанной программе. Но на деле это не так. Либо у меня не верный скрипт отправки.
Аналогичная задача при исползовании rsyslog была решена лакончино:
Код syslog.conf:
:msg, contains, "Accepted publickey" ^/usr/share/script/sendmessages.sh
Код сприта sendmessages.sh:
printf "$*" | /usr/local/bin/sendxmpp "dst_user" -j 192.168.1.7:5222 -u user -p pass -v
- Для комментирования войдите или зарегистрируйтесь
.
Тогда в чём смысл следования букве Handbook'а?
Почему бы и не использовать
app-admin/rsyslog
?:wq
--
Live free or die
Да я и сам об этом думаю
Да я и сам об этом думаю иногда, но какая-то часть меня против rsyslog и требует докопаться до сути syslog-ng. Гордыня гентушника наверно .
/
Неправильное у тебя представление о гордыне.
Аргументация типа «нутром чую, что литр, но доказать не могу» не канает!
Надо дожать лень и формализовать суть замечаний к
rsyslog
.Необходимые в рамках твоей задачи аспекты в
syslog-ng
могут быть и не проработаны должным образом. Я так в свой время на совсем другой платформе переходил сsyslogd
наsyslog-ng
.Гентушечка она хороша в первую очередь ориентацией на сборку конструктора соответственно твоим вкусам.
И соответственно в рамках темы можно не полениться поставить вопрос о требованиях к (и определении классической конфигурации) подсистеме журналирования вообще (достоинства/недостатки локального журнала, сетевого журнала, разные дополнительные плюшки (например направление некоторых сообщений в xmpp), вопрос надёжности (тут ты-то мне и нужен ☺, хотя в данном случае вилдится много общего с журналированием по сети в принципе), где и для чего оно видится полезным).
Помню на форуме были (есть) товарищи, предпочитающие для журналирования решение типа «всё в одном» (без дополнительной внешней утилиты для ротации файлов журналов).
:wq
--
Live free or die
К rsyslog собственно нет
К rsyslog собственно нет никаких замечаний. Так же как и к syslog-ng.
Гордыня тут в том, что есть сервер, на нем установлен логгер, который наверняка может решить мою задачу надо лишь разобраться что и как. А решение типа "вот с этим логгером не получается поставлю другой который лучше..." как то не по сисадмински что-ли...это и есть гордыня.
Кстати в свое время тот самый сервер rsyslog на котором у меня работают оповещения по xmpp мог стать жертвой такого подхода. Мне надо было отфильтровать логи, а я в то время ничего кроме syslog-ng не использовал, и первая идея была как раз заменить логгер на знакомый мне. Но ничего, пересилил себя и освоил rsyslog.
А теперь по иронии судьбы мне предложено принять решение обратной замены :)
.
apropos
намекает на использование в процессе отладки чего-нибудь типаsyslog-ng-ctl
.Не…
Пара предупредительных вопросов:
1. При журналировании с аналогичным
template
в файл всё работает корректно?По моему опыту как раз к
syslog-ng
в данной части у меня были вопросы на предмет несоответствия моим представлениям о Разумной, Добром и Вечном.2. В рамках отладки скрипта попробуй создать на специально выделенной
LOG_LOCAL
facility_number тестовый журнал. В нулевом приближении неаправь его в файл. Пошли туда сообщение (logger
в помощь). Проверь правильность работы. Потом перепишиdestination
на твой скрипт. И повтори попытку.У тебя есть хорошие шансы встретиться с тем, что данный модуль
syslog-ng
… не вполне работоспособен. Или, что лучше, но не намного, несовершенство документации.:wq
--
Live free or die