Пользователь 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 |