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_LOCALfacility_number тестовый журнал. В нулевом приближении неаправь его в файл. Пошли туда сообщение (loggerв помощь). Проверь правильность работы. Потом перепишиdestinationна твой скрипт. И повтори попытку.У тебя есть хорошие шансы встретиться с тем, что данный модуль
syslog-ng… не вполне работоспособен. Или, что лучше, но не намного, несовершенство документации.:wq
--
Live free or die