DataLife Engine / Мониторинг статус-кодов HTTP NGINX в Zabbix

Мониторинг статус-кодов HTTP NGINX в Zabbix

access log сайта расположен в /var/log/nginx/newsite_com_ssl_access.log

Пользователь zabbix от которого запущен агент Zabbix не имеет прав доступа на чтение лога.

Доступ к лог-файлам в директории /var/log/nginx имеет владелец www-data и группа adm. Проверить можно командой:
ls -l /var/log/nginx/ 
Для возможности чтения логов nginx, добавим пользователя zabbix в группу adm:
usermod -aG adm zabbix
После изменений прав доступа пользователя zabbix, необходимо перезапустить агент Zabbix:
systemctl restart zabbix-agent
Проверяем изменения, получаем последние записи лог-файла от имени пользователя zabbix:
sudo -u zabbix bash -c 'tail -f /var/log/nginx/newsite_com_ssl_access.log' 
Далее создадим элемент данных в Zabbix:
Key Value
Name HTTP Status Codes
Type Zabbix (active)
Key log[/var/log/nginx/newsite_com_ssl_access.log,"^(\S+) (\S+) (\S+) \[([\w:\/]+\s[+\-]\d{4})\] \"(\S+)\s?(\S+)?\s?(\S+)?\" (\d{3}|-)",,,,\8,,]
Type of Information numeric (unsigned)
Update Interval 1m

Регулярное выражение: ^(\S+) (\S+) (\S+) \[([\w:\/]+\s[+\-]\d{4})\] \"(\S+)\s?(\S+)?\s?(\S+)?\" (\d{3}|-) (\d+|-)\s?\"?([^\"]*)\"?\s?\"?([^\"]*)\" разбивает каждую строку лога на несколько групп. Код состояния HTTP находится в \8-й группе.

Рассмотрим вариант получения количества статус-кодов HTTP 50x с помощью скрипта на bash:

vi /opt/get_500_status_codes.sh
#!/bin/bash

get_date=`date +%d/%b/%Y:%H:`

cat /var/log/nginx/newsite_com_ssl_access.log | grep $get_date | awk '{print $9}' | grep -E "500|502|504|505" | wc -l
Меняем владельца скрипта и предоставляем права на выполнение:
chown zabbix /opt/get_500_status_codes.sh
chmod u+x /opt/get_500_status_codes.sh
Разрешаем выполнение удаленных команд агенту Zabbix:

vi /etc/zabbix/zabbix_agentd.conf
EnableRemoteCommands=1
EnableRemoteCommands - Deprecated, use AllowKey=system.run
  • AllowKey=system.run[*]
    После внесенных изменений, необходимо перезапустить агент Zabbix:
    systemctl restart zabbix-agent

    Далее создадим элемент данных в Zabbix:
    Key Value
    Name HTTP Status Codes
    Type Zabbix agent
    Key system.run[sh /opt/get_500_status_codes.sh]
    Type of Information numeric (unsigned)
    Update Interval 1m

    17-11-2023, 15:51
    Вернуться назад