This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
zabbix_logs [2025/11/08 08:51] val |
zabbix_logs [2026/07/20 13:26] (current) val [Черновик] |
||
|---|---|---|---|
| Line 30: | Line 30: | ||
| # cat /var/log/syslog | egrep -v 'DHCPACK|DHCPREQUEST|Wrote.*leases|sessionclean|ALLOWED|run-parts.*report' | # 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 | ||
| + | </code><code> | ||
| + | ... | ||
| + | ServerActive=server | ||
| + | ... | ||
| + | </code><code> | ||
| + | # ls -l /var/log/syslog | ||
| # usermod -aG adm zabbix | # usermod -aG adm zabbix | ||
| + | |||
| + | # hostname | ||
| + | abcd.corpX.un | ||
| # service zabbix-agent restart | # service zabbix-agent restart | ||
| + | |||
| + | Host: abcd.corpX.un | ||
| Item: | Item: | ||
| Name: Error log in syslog | Name: Error log in syslog | ||
| Type: Zabbix Agent(active) | Type: Zabbix Agent(active) | ||
| - | Key: log[/var/log/syslog,rror] или log[/var/log/syslog,(?i)error] | + | Key: log[/var/log/syslog,(?i)error] |
| + | log[/var/log/syslog,^(?!.*(?i:test|debug|verbose)).*(?i:error|warn|critical),,,skip] | ||
| History: 1d | History: 1d | ||
| Line 44: | Line 59: | ||
| Name: Unknown log in syslog | Name: Unknown log in syslog | ||
| Type: Zabbix Agent(active) | Type: Zabbix Agent(active) | ||
| - | Key: log[/var/log/syslog] | + | Key: log[/var/log/syslog,,,,skip] |
| Preprocessing: | Preprocessing: | ||
| Name: Does not match regular expression | Name: Does not match regular expression | ||
| Line 53: | Line 68: | ||
| Name: Error|Unknown log in syslog on {HOST.NAME} | Name: Error|Unknown log in syslog on {HOST.NAME} | ||
| Severity: Warning | Severity: Warning | ||
| - | Expression: nodata(/Zabbix server/log[/var/log/syslog,rror],1m)=0 | + | Expression: nodata(/abcd.corpX.un/log[/var/log/syslog, ... ],1m)=0 |
| - | Expression: nodata(/Zabbix server/log[/var/log/syslog,(?i)error],1m)=0 | + | ??? PROBLEM event generation mode: Multiple |
| - | Expression: nodata(/Zabbix server/log[/var/log/syslog],1m)=0 | + | </code> |
| - | | + | |
| + | * [[Сервис Zabbix#Настройка уведомлений о событиях]], Оставить только Problem Template и убрать из текста слова Problem и Severity | ||
| + | |||
| + | <code> | ||
| + | # cat /etc/default/zabbix-server | ||
| + | YANDEX_API_KEY=... | ||
| + | YANDEX_FOLDER_ID=... | ||
| + | |||
| + | # chmod 600 /etc/default/zabbix-server | ||
| + | </code> | ||
| + | * [[Yandex AI]] | ||
| + | |||
| + | <code> | ||
| + | 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 | ||
| + | </code> | ||
| + | <code> | ||
| + | (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()) | ||
| + | |||
| + | </code> | ||
| + | ===== Разбор от DeepSeek ===== | ||
| + | |||
| + | <code> | ||
| + | Разбор текущей конфигурации: | ||
| + | 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 | ||
| </code> | </code> | ||