====== Zabbix logs ====== * [[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]] ===== Реклама ===== * Однажды мы получили сообщение от пользователей, что "не открывается" некоторый корпоративный ресурс. Как обычно, "никто ничего не менял" но, как оказалось, что-то случилось 40 дней назад! ===== Техническое задание ===== * Настроить Zabbix на обработку сообщений из журналов и уведомление о важных из них ===== Запись вебинара ===== * Тэги: ===== Шаг 1. Что у нас есть, для начала ===== * Zabbix. Мониторинг IT инфраструктуры предприятия [[Zabbix. Мониторинг IT инфраструктуры предприятия#Модуль 5: Управление учетными записями и уведомлениями]] * http://192.168.13.10/zabbix/ * http://192.168.13.10/mail/ ===== Шаг 2. Анализ событий ===== * [[Поиск важных событий в syslog]] на gate (1-й вариант) ===== Шаг 3. Регистрация событий в Zabbix ===== gate# cat /etc/zabbix/zabbix_agentd.conf.d/corpX.conf ... ServerActive=server gate# ps axu | grep zabbix gate# ls -l /var/log/syslog gate# usermod -aG adm zabbix gate# service zabbix-agent restart Host: gate.corpX.un Item: Name: High|Error log in syslog Type: Zabbix Agent(active) Key: log[/var/log/syslog,(?i)error,,,skip] Key: log[/var/log/syslog,^(?!.*(?i:test|debug|vmwgfx)).*(?i:error|abandon|fail|expire),,,skip] Key: log[/var/log/syslog.high,,,,skip] Update interval: 10s History: 1d * [[Регистрация событий в Linux#Использование утилиты logger]] * Перезагружаем для появления "неожиданных" сообщений * **LLM промпт:** это важное сообщение? Preprocessing: Name: Does not match regular expression Parameters: LPM|ehci_hcd|collector initialized Custom on fail: Discard Value Name: Does not match regular expression Parameters: fail to add MMCONFIG information Custom on fail: Discard Value * Настраиваем Trigger Trigger: Name: High|Error log in syslog on {HOST.NAME} Severity: Warning Expression: nodata(/gate.corpX.un/log[/var/log/syslog..., ... ],1m)=0 ===== Шаг 4. Обработка событий через скрипт с анализом в LLM ===== * [[Сервис Zabbix#Настройка уведомлений о событиях]], Оставить только Problem Template и убрать из текста слова Problem и Severity # cat /etc/default/zabbix-server YANDEX_API_KEY=... YANDEX_FOLDER_ID=... # chmod 600 /etc/default/zabbix-server * [[Yandex AI]] (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())