====== 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())