User Tools

Site Tools


zabbix_logs

This is an old revision of the document!


Zabbix logs

Реклама

  • Однажды мы получили сообщение от пользователей, что “не открывается” некоторый корпоративный ресурс. Как обычно, “никто ничего не менял” но, как оказалось, что-то случилось 40 дней назад!

Техническое задание

  • Настроить Zabbix на обработку сообщений из журналов и уведомление о важных из них

Запись вебинара

  • Тэги:

Шаг 1. Что у нас есть, для начала

Шаг 2. Анализ событий

Шаг 3. Регистрация событий в Zabbix

gate# cat /etc/zabbix/zabbix_agentd.conf
...
ServerActive=server
...
gate# ls -l /var/log/syslog

gate# usermod -aG adm zabbix

gate# service zabbix-agent restart

Host: gate.corpX.un

Item:
  Name: Error|High log in syslog
  Type: Zabbix Agent(active)
  Key: log[/var/log/syslog,(?i)error,,,skip]
  Key: log[/var/log/syslog.high,,,,skip]
  Update interval: 10s
  Preprocessing:
    Name: Does not match regular expression
    Parameters: PNP0A03|LPM|vmwgfx|ehci_hcd
    Custom on fail: Discard Value
  History: 1d

Trigger:
  Name: Error|High log in syslog on {HOST.NAME}
  Severity: Warning
  Expression: nodata(/gate.corpX.un/log[/var/log/syslog..., ... ],1m)=0

Шаг 4. Обработка событий через скрипт с анализом в LLM

# cat /etc/default/zabbix-server
YANDEX_API_KEY=...
YANDEX_FOLDER_ID=...

# chmod 600 /etc/default/zabbix-server
(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())
zabbix_logs.1786202629.txt.gz · Last modified: 2026/08/08 18:23 by val