User Tools

Site Tools


zabbix_logs

Использование Zabbix для мониторинга журналов, или, как не пропустить что-то неожиданное

Реклама

  • Однажды мы получили сообщение от пользователей, что “не открывается” некоторый корпоративный ресурс. Как обычно, “никто ничего не менял” (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
# cat /etc/default/zabbix-server
YANDEX_API_KEY=...
YANDEX_FOLDER_ID=...

# chmod 600 /etc/default/zabbix-server
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
zabbix_logs.txt · Last modified: 2026/07/20 13:26 by val