====== Использование Zabbix для мониторинга журналов, или, как не пропустить что-то неожиданное ====== * [[https://www.zabbix.com/documentation/6.0/ru/manual/config/items/itemtypes/log_items|Руководство по Zabbix Мониторинг файлов журналов]] * [[https://www.zabbix.com/documentation/current/en/manual/regular_expressions]] * [[https://habr.com/ru/articles/737058/|Логи из Linux в Zabbix. Подробнейшая инструкция]] * [[https://www.zabbix.com/forum/zabbix-help/457279-trying-to-make-a-trigger-of-a-monitored-logfile|Trying to make a trigger of a monitored logfile]] ===== Реклама ===== * Однажды мы получили сообщение от пользователей, что "не открывается" некоторый корпоративный ресурс. Как обычно, "никто ничего не менял" (log secondary zone not axfr) ===== Техническое задание ===== * ===== Запись вебинара ===== * Тэги: ===== Шаг 1. Что у нас есть, для начала ===== ===== Черновик ===== # ###apt install rsyslog # cat /var/log/syslog | grep -i 'error' # cat /var/log/syslog | egrep -v 'DHCPACK|DHCPREQUEST|Wrote.*leases|sessionclean|ALLOWED|run-parts.*report' # grep -P '^(?!.*(?i:test|debug|verbose)).*(?i:error|warn|critical)' /var/log/syslog # cat /etc/zabbix/zabbix_agentd.conf ... ServerActive=server ... # ls -l /var/log/syslog # usermod -aG adm zabbix # hostname abcd.corpX.un # service zabbix-agent restart Host: abcd.corpX.un Item: Name: Error log in syslog Type: Zabbix Agent(active) Key: log[/var/log/syslog,(?i)error] log[/var/log/syslog,^(?!.*(?i:test|debug|verbose)).*(?i:error|warn|critical),,,skip] History: 1d Item: Name: Unknown log in syslog Type: Zabbix Agent(active) Key: log[/var/log/syslog,,,,skip] Preprocessing: Name: Does not match regular expression Parameters: DHCPACK|DHCPREQUEST|Wrote.*leases|sessionclean|ALLOWED|run-parts.*report Custom on fail: Discard Value Trigger: Name: Error|Unknown log in syslog on {HOST.NAME} Severity: Warning Expression: nodata(/abcd.corpX.un/log[/var/log/syslog, ... ],1m)=0 ??? PROBLEM event generation mode: Multiple * [[Сервис Zabbix#Настройка уведомлений о событиях]], Оставить только Problem Template и убрать из текста слова Problem и Severity # cat /etc/default/zabbix-server YANDEX_API_KEY=... YANDEX_FOLDER_ID=... # chmod 600 /etc/default/zabbix-server * [[Yandex AI]] 2026-07-17T19:49:49.451736+03:00 gate dhcpd[943]: ICMP Echo reply while lease 192.168.13.101 valid. 2026-07-17T19:49:49.452103+03:00 gate dhcpd[943]: Abandoning IP address 192.168.13.101: pinged before offer 2026-07-17T19:49:54.446616+03:00 gate dhcpd[943]: DHCPDISCOVER from 08:00:27:98:57:d0 via eth0 (zabbix_venv) server.corp13.un:/usr/lib/zabbix/alertscripts# cat llm_context_enrichment.py #!/opt/zabbix_venv/bin/python3 import sys import smtplib import re from email.header import Header from email.mime.text import MIMEText import request_to_agent SMTP_SERVER = "localhost" SENDER_EMAIL = "zabbix-llm@corp13.un" SYSTEM_PROMPT = ( "Ты - IT эксперт.\n" "Оцени важность сообщения и уточни, почему.\n" "Первое слово в ответе должно быть да или нет.\n" ) alert_sendto = sys.argv[1] alert_subject = sys.argv[2] alert_message = sys.argv[3] #agent_response = request_to_agent.request_to_agent(alert_message, SYSTEM_PROMPT, "") agent_response = alert_message match = re.search(r'^\s*([a-zA-Zа-яА-Я1-9]+)', agent_response) first_word = match.group(1) remaining_text = agent_response[match.end():] ''' print(first_word) print(alert_sendto) print(alert_message) #print(agent_response) print(remaining_text) ''' msg = MIMEText(alert_message + remaining_text, "plain", "utf-8") if first_word.lower() == 'да': msg["Subject"] = Header("ВНИМАНИЕ! " + alert_subject, "utf-8") else: msg["Subject"] = Header(alert_subject, "utf-8") msg["From"] = SENDER_EMAIL msg["To"] = alert_sendto with smtplib.SMTP(SMTP_SERVER) as server: server.sendmail(SENDER_EMAIL, [alert_sendto], msg.as_string()) ===== Разбор от DeepSeek ===== Разбор текущей конфигурации: 1. Подготовка системы (bash команды) bash # ###apt install rsyslog Установка rsyslog (обычно уже есть) bash # cat /var/log/syslog | grep -i 'error' Ручной поиск ошибок (для проверки) bash # cat /var/log/syslog | egrep -v 'DHCPACK|DHCPREQUEST|Wrote.*leases|sessionclean|ALLOWED|run-parts.*report' Просмотр syslog без "шумных" сообщений (DHCP, сессии и т.д.) bash # usermod -aG adm zabbix Критически важно! Добавляем пользователя zabbix в группу adm, чтобы он мог читать /var/log/syslog (обычно права 640, root:adm) 2. Проблема в текущих Item'ах У тебя два item'а, но в триггере почему-то три выражения: Item 1: text Key: log[/var/log/syslog,rror] Это ищет строки содержащие "rror" (опечатка? Должно быть "error"?) Item 2: text Key: log[/var/log/syslog] Preprocessing: Does not match regular expression Это собирает ВСЕ строки, но отбрасывает те, что попадают под regex. 3. Оптимизированная версия Вот как лучше настроить: bash # /etc/zabbix/zabbix_agentd.conf # Убедись, что активные проверки включены ServerActive=zabbix.server.com Hostname=abcd.corpX.un HostMetadata=linux Лучше сделать один item: text Item: Name: Syslog errors and warnings Type: Zabbix Agent (active) Key: log[/var/log/syslog,"(?i)(error|fail|critical|alert)",,,skip,,] Type of information: Log History: 7d Или два отдельных (для разделения важности): text # Item для реальных ошибок Item: Name: Syslog - Errors Type: Zabbix Agent (active) Key: log[/var/log/syslog,"(?i)error|fail|critical",,,skip,,] Type: Log History: 7d # Item для всего остального (с фильтрацией шума) Item: Name: Syslog - Other important messages Type: Zabbix Agent (active) Key: log[/var/log/syslog] Preprocessing: - Name: Does not match regular expression Parameters: DHCPACK|DHCPREQUEST|Wrote.*leases|sessionclean|ALLOWED|run-parts.*report|cron.*CMD|systemd.*Started - Name: Custom on fail Parameters: Discard value 4. Правильный триггер yaml Trigger: Name: Error in syslog on {HOST.NAME} Severity: Average # или Warning Expression: | min(/Zabbix server/log[/var/log/syslog,"(?i)error|fail|critical"],5m) > 0 Или для обоих типов: yaml Trigger: Name: New error in syslog on {HOST.NAME} Severity: High Expression: | min(/Zabbix server/log[/var/log/syslog,"(?i)error"],5m) > 0 Trigger: Name: New important message in syslog on {HOST.NAME} Severity: Info Expression: | min(/Zabbix server/log[/var/log/syslog,"(?i)warn|unknown|invalid"],5m) > 0 and min(/Zabbix server/log[/var/log/syslog,"(?i)error|fail|critical"],5m) = 0 5. Дополнительные полезные настройки В zabbix_agentd.conf можно добавить: bash # Увеличить буфер для логов BufferSize=1000 # Специфичные для логов параметры LogRemoteCommands=0 HostInterface=abcd.corpX.un Проверка прав: bash # После usermod нужно проверить: id zabbix # Должно показать: uid=... gid=... groups=...,adm # Перезапуск агента systemctl restart zabbix-agent # Проверка лога агента tail -f /var/log/zabbix/zabbix_agentd.log Еще полезные regex для фильтрации: text # Исключить совсем уж шумные сообщения DHCPACK|DHCPREQUEST|Wrote.*leases|sessionclean|ALLOWED|run-parts.*report|cron.*CMD|systemd.*Started|systemd.*Stopped|User Slice|Session|Removed