Использование syslog для логирования работы программ/скриптов
Очередной раз заглянув в почту и обнаружив очередную пачку писем от серверов решил положить этому конец. Упрощало задачу то что, большую часть писем генерируют мои собственные программы и скрипты, которые установлены на различных серверах.
Большая часть этих сообщений не являются критичными. Например, «Невозможно соединится с сервером», «Обработано файлов столько-то», «Затрачено времени столько-то» и т.п. Я рассмотрел два основных варианта этой проблемы:
Первый вариант, в лоб — использовать перенаправление вывода или собственные лог-файлы. Этот вариант не удобен для мониторинга, так как придётся просматривать больше количество файлов отчётов.
Второй вариант — не изобретать велосипед и использовать syslog.
syslog — стандарт отправки сообщений о происходящих в системе событиях (логов), использующийся в компьютерных сетях, работающих по протоколу IP.
Протокол syslog прост: отправитель посылает короткое текстовое сообщение, размером меньше 1024 байт получателю сообщения. Получатель при этом носит имя «syslogd», «syslog daemon», либо же, «syslog server». Сообщения могут отправляться как по UDP, так и по TCP. Как правило, такое сообщение отсылается в открытом виде.
Syslog используется для удобства администрирования и обеспечения информационной безопасности. Он реализован под множество платформ и используется в множестве устройств. Поэтому, использование syslog позволяет обеспечить сбор информации с разных мест и хранение её в едином репозитории.
Как правило syslog и syslogd работают внутри одного сервера (то есть все соединения локальны) и никакой внешней сетевой деятельности не производится.
Теперь, как все это выглядит на практике.
Perl:
use Sys::Syslog; openlog("имя вашей программы", "ndelay,pid", "local0"); syslog(LOG_WARNING, "Программа запущена"); ... # тут программа ... syslog(LOG_WARNING, "Программа завершила выполнение"); closelog();
PHP:
openlog("имя вашей программы", LOG_PID | LOG_PERROR, LOG_LOCAL0); syslog(LOG_WARNING,"Программа запущена"); ... // тут программа ... syslog(LOG_WARNING, "Программа завершила выполнение"); closelog();
C/C++:
#include <syslog.h> openlog("имя вашей программы", 0, LOG_USER); syslog(LOG_NOTICE, "Can not open file \"%s\" for writing.",filename); closelog();
Далее можете поискать ваши сообщения в журналах syslog. Тут все зависит от настроек syslogd. Обычно это /var/log/messages.
В документации PHP написано, что в windows тоже работает, но я не пробовал.
Подробнее о флагах и значениях можно прочитать в руководствах:
Комментарии