1.Установка плагина для проверки лог-файлов
(как на Nagios-сервере, так и на клиентском сервере)
1 |
# wget https://labs.consol.de/assets/downloads/nagios/check_logfiles-3.7.4.tar.gztar xvzf check_logfiles-3.7.4.tar.gz |
1 |
# cd check_logfiles-3.7.4/ |
1 |
# ./configure --prefix=/usr/local/nagios --with-nagios-user=nagios --with-nagios-group=nagios --with-perl=/usr/bin/perl |
1 2 3 4 5 6 7 8 |
config.status: creating t/Makefile --with-perl: /usr/bin/perl --with-gzip: /usr/bin/gzip --with-seekfiles-dir: /var/tmp/check_logfiles --with-protocols-dir: /tmp --with-trusted-path: /bin:/sbin:/usr/bin:/usr/sbin --with-nagios-user: nagios --with-nagios-group: nagios |
1 |
# make |
1 |
# make install |
1 |
# ls -al /usr/lib64/nagios/plugins/ | grep check_logfiles |
1 |
-rwxr-xr-x 1 root root 203754 Jan 14 23:12 check_logfiles |
2.Тестирование плагинов с командной строки
Просмотр справки
1 |
# /usr/lib64/nagios/plugins/check_logfiles --help | less |
В самом простом случае достаточно вызвать команду с необходимыми параметрами
Например
1 |
# /usr/lib64/nagios/plugins/check_logfiles -t 15 --tag=system --logfile=/var/log/messages --criticalpattern='OOM killed process' |
1 |
OK - no errors or warnings|system_lines=0 system_warnings=0 system_criticals=0 system_unknowns=0 |
Принцип работы плагина подразумевает, что проверка будет происходить первый раз полностью всего файла, указанного в параметре —logfile и смещение/позиция, на которой закончилась проверка будет записываться в т.н. seekfile (в моем случае в —with-seekfiles-dir: /var/tmp/check_logfiles). Это позволяет уже следующей проверки начать проверку с указанного места, а не сначала файла
Продемонстрируем на примере
Симитируем наличие проблемы
1 |
# echo 'OOM killed process' >> /var/log/messages |
Выполним проверку
1 |
# /usr/lib64/nagios/plugins/check_logfiles -t 15 --tag=system --logfile=/var/log/messages --criticalpattern='OOM killed process' |
1 |
CRITICAL - (1 errors in check_logfiles.protocol-2016-01-15-21-30-55) - OOM killed process |system_lines=1 system_warnings=0 system_criticals=1 system_unknowns=0 |
1 |
# ls -l /var/tmp/check_logfiles/ |
1 2 |
total 4 -rw-r--r-- 1 nagios nagios 608 Jan 15 22:55 log-files._var_log_messages.system |
Выполним проверку еще раз
1 |
# /usr/lib64/nagios/plugins/check_logfiles -t 15 --tag=system --logfile=/var/log/messages --criticalpattern='OOM killed process' |
1 |
OK - no errors or warnings|system_lines=0 system_warnings=0 system_criticals=0 system_unknowns=0 |
(для того, чтобы уведомление Сritical|Warning присутствовало в Nagios, а не сбрасывалось на OK после выполнения следующей проверки,которая идет за проверкой,которая обнаружила Warning|Critical) необходимо при описании проверки в Nagios использовать параметр
1 |
is_volatile 1 |
(будет указан ниже при добавлении службы на мониторинг)
Предыдущая ошибка во второй проверки отсутствует т.к она попала в первую проверку
Вместо передачи параметров в командной строке можно использовать файл с описанием параметров
1 |
# /usr/lib64/nagios/plugins/check_logfiles -t 15 -f /etc/nagios/log-files.cfg |
1 |
OK - no errors or warnings|system_lines=0 system_warnings=0 system_criticals=0 system_unknowns=0 |
Симмитируем проблему
1 |
# echo 'table full, dropping packet' >> /var/log/messages |
1 |
# /usr/lib64/nagios/plugins/check_logfiles -t 15 -f /etc/nagios/log-files.cfg |
1 |
CRITICAL - (1 errors in log-files.protocol-2016-01-15-21-39-14) - table full, dropping packet |system_lines=1 system_warnings=0 system_criticals=1 system_unknowns=0 |
Провереяем Warning
1 |
# echo 'temperature above threshold' >> /var/log/messages |
1 |
# /usr/lib64/nagios/plugins/check_logfiles -t 15 -f /etc/nagios/log-files.cfg |
1 |
WARNING - (1 warnings in log-files.protocol-2016-01-15-21-40-24) - temperature above threshold |system_lines=1 system_warnings=1 system_criticals=0 system_unknowns=0 |
Пример файла окнфигурации
1 |
# cat /etc/nagios/log-files.cfg |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# where the state information will be saved. $seekfilesdir = '/var/tmp/check_logfiles'; # where protocols with found patterns will be stored. $protocolsdir = '/tmp'; # where scripts will be searched for. $scriptpath = '/var/tmp'; @searches = ( { tag => 'system', logfile => '/var/log/messages', rotation => 'centos', criticalpatterns => ['OOM killed process', 'table full, dropping packet'], warningpatterns => ['temperature above threshold'], } ); |
По умолчанию(если не используется опция noprotocol) все совпадения(совпадающие строки) записываются в т.н протокольный файл(согласно опции компиляции он распологается по умолчанию в /tmp)( —with-protocols-dir: /tmp) Имя этого файла можно увидеть в результате проверки, если были найдены совпадения
Плагин достаточно функционален – позволяет использовать макросы или запускать необходимые скрипты перед проверкой, после проверки или при совпадении строк/срабатывании триггера
Выставим корректный владелец и группу на папку, куда записывает Nagios
1 |
# chown -R nagios:nagios /var/tmp/check_logfiles/ |
3.Определение команд для проверки
1 |
# cd /usr/local/nagios/etc/ |
1 |
# nano commands.d/check-logfiles.cfg |
1 2 3 4 5 6 7 8 9 |
define command{ command_name check-local-logfiles command_line $USER1$/check_logfiles -t 15 -f $ARG1$ } define command { command_name check-logfiles command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -t 30 -c check-logfiles -a $ARG1$ } |
Первая(локальная) проверка будет использоваться для мониторинг самого сервера Nagios
Вторая – для удаленных клиентов
4.Добавление хостов/групп на мониторинг для указанных проверок
1 |
# nano services.d/services-myproject.cfg |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
define service{ host_name Nagios-hostname service_description Check Log File message log check_command check-local-logfiles!/etc/nagios/log-files.cfg use service-template-all-generic is_volatile 1 first_notification_delay 0 max_check_attempts 1 } define service{ host_name Client-hostname service_description Check Log File message log check_command check-logfiles!/etc/nagios/log-files.cfg use service-template-all-generic is_volatile 1 first_notification_delay 0 max_check_attempts 1 } |
5.Добавление команды на удаленные сервера
1 |
# nano /etc/nagios/nrpe.cfg |
1 |
command[check-logfiles]=/usr/lib64/nagios/plugins/check_logfiles -t 15 -f $ARG1$ |
1 |
# service nrpe restart |
Копируем файл /etc/nagios/log-files.cfg на клиентские сервера
6.Проверка синтаксиса и перезапуск Nagios
1 |
# /etc/init.d/nagios configtest |
1 |
# /etc/init.d/nagios reload |