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

.

nyam написал(а):
Аналогичная задача при исползовании 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. Гордыня гентушника наверно .

/

nyam написал(а):
Да я и сам об этом думаю иногда, но какая-то часть меня против rsyslog и требует докопаться до сути syslog-ng. Гордыня гентушника наверно .

Неправильное у тебя представление о гордыне.

Аргументация типа «нутром чую, что литр, но доказать не могу» не канает!
Надо дожать лень и формализовать суть замечаний к rsyslog.
Необходимые в рамках твоей задачи аспекты в syslog-ng могут быть и не проработаны должным образом. Я так в свой время на совсем другой платформе переходил с syslogd на syslog-ng.

Гентушечка она хороша в первую очередь ориентацией на сборку конструктора соответственно твоим вкусам.
И соответственно в рамках темы можно не полениться поставить вопрос о требованиях к (и определении классической конфигурации) подсистеме журналирования вообще (достоинства/недостатки локального журнала, сетевого журнала, разные дополнительные плюшки (например направление некоторых сообщений в xmpp), вопрос надёжности (тут ты-то мне и нужен ☺, хотя в данном случае вилдится много общего с журналированием по сети в принципе), где и для чего оно видится полезным).
Помню на форуме были (есть) товарищи, предпочитающие для журналирования решение типа «всё в одном» (без дополнительной внешней утилиты для ротации файлов журналов).

:wq
--
Live free or die

К rsyslog собственно нет

К rsyslog собственно нет никаких замечаний. Так же как и к syslog-ng.
Гордыня тут в том, что есть сервер, на нем установлен логгер, который наверняка может решить мою задачу надо лишь разобраться что и как. А решение типа "вот с этим логгером не получается поставлю другой который лучше..." как то не по сисадмински что-ли...это и есть гордыня.
Кстати в свое время тот самый сервер rsyslog на котором у меня работают оповещения по xmpp мог стать жертвой такого подхода. Мне надо было отфильтровать логи, а я в то время ничего кроме syslog-ng не использовал, и первая идея была как раз заменить логгер на знакомый мне. Но ничего, пересилил себя и освоил rsyslog.
А теперь по иронии судьбы мне предложено принять решение обратной замены :)

.

nyam написал(а):
Скрипт пробовал по разному переписывать, но как мне кажется должно быть так
Код скрипта 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.

apropos намекает на использование в процессе отладки чего-нибудь типа syslog-ng-ctl.

nyam написал(а):
В моем понимании template("<$PRI>$DATE $HOST $MSG\n" задает формат строки сообщения, и передает его указанной программе. Но на деле это не так. Либо у меня не верный скрипт отправки.

Не…
Пара предупредительных вопросов:
1. При журналировании с аналогичным template в файл всё работает корректно?
По моему опыту как раз к syslog-ng в данной части у меня были вопросы на предмет несоответствия моим представлениям о Разумной, Добром и Вечном.
2. В рамках отладки скрипта попробуй создать на специально выделенной LOG_LOCAL facility_number тестовый журнал. В нулевом приближении неаправь его в файл. Пошли туда сообщение (logger в помощь). Проверь правильность работы. Потом перепиши destination на твой скрипт. И повтори попытку.

У тебя есть хорошие шансы встретиться с тем, что данный модуль syslog-ng… не вполне работоспособен. Или, что лучше, но не намного, несовершенство документации.

:wq
--
Live free or die

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".