User Tools

Site Tools


эра_велосипедостроения_ии

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

Не можешь победить - возглавь

Ну, или, хотя бы попробуй

Всем привет!

Однажды мы получили сообщение от пользователей, что “не открывается” некоторый корпоративный ресурс. Как обычно, “никто ничего не менял” но, как оказалось, что-то случилось 40 дней назад. А именно, перестал быть доступен мастер сервер DNS зоны подразделения, а центральный сервер предприятия, являющийся для нее вторичным, еще 40 дней пытался синхронизировать зону и отвечал на запросы клиентов, после чего “решил” что зона больше не существует. И обо всем этом были записи в журнале. Выводы были сделаны, в Zabbix добавили чтение логов по ключевым словам, примерно так:

Item:
  Key: log[/var/log/syslog,^(?!.*(?i:test|debug|pnp)).*(?i:error|abandon|fail),,,skip]
  
Trigger:
  Expression: nodata(/gate.corp.un/log[/var/log/syslog..., ... ],1m)=0

Но, сомнения остались, что если в журнале появится что-то еще ВАЖНОЕ, не содержащее ключевых слов?

Прошли годы, начался хайп по поводу вайбкодинга, хорошие люди поделились ключем к opencode и появилась идея решить эту задачу не правильным способом - поиском готового решения (поделитесь в комментариях, кто что использует?), а “наколхозить” собственный “велосипед” с помощью ИИ.

Идея: для экономии токенов выделить только сообщения с высоким уровнем важности, отфильтровать “бросающийся в глаза” мусор и отправить все на коллектор

serverN# cat /etc/rsyslog.d/40-syslog-high.conf

if (not ($msg contains "Unable to add reverse map") and
    not ($msg contains "bad owner name (check-names)") and
    not ($msg contains "dhcp_pool_vlan_33")) then {

    *.warning @collector
}


collector# cat /etc/rsyslog.d/remote.conf
module(load="imudp")

input(type="imudp" port="514" ruleset="RemoteRuleset")

ruleset(name="RemoteRuleset"){
    action(type="omfile" file="/var/log/remote_all.log")
}

на коллекторе, пропускать их через LLM и уведомлять инженеров только о тех, которые будут оценены как важные

Создай новый проект на python в новой папке. Задача - чтение журнала в режиме tail и анализ каждой строки через ИИ на предмет важности. Если строка важная, информация отправляется по электронной почте вместе с комментарием ИИ с использованием почтового сервера mail.bmstu.ru и учетной записи noc-ai с паролем Необходима возможность ответа на письмо с корректирующей информацией, которая должна использоваться в дальнейшем для оценки важности сообщений Анализировать только письма с ответами, остальные игноруй Все параметры через переменные окружения В проекте используй свой ИИ Задай уточняющие вопросы

добавь учтет расхода токенов в каждое сообщение

не анализируй каждую строку журнала не предмет важности фильтрация только на основе корректирующей информации

Первые программы писал на Бейсике в конце 80-х, потом игры на Ассемблере, потом институт/экзамены/сессия - Паскаль, Си, первые заработки на MS Access/Delphi, потом WWW - CGI, Perl, потом “отстал от поезда” - ушел с сисадмины - Bash, и вот “услышал” что можно вернуться в программирование - Вайбкодинг

Способности средние, как работает компьютер представляю, но, что писать хорошие программы не просто в любой среде разработки - знаю по себе

Первая проблема - платная подписка, что бы попробовать

Вторая, а что собственно пробовать

  • заставляет точно формулировать задачу “убери строки из /var/log/syslog” фильтр в программе или rsyslog
  • или задай уточняющие вопросы
  • добавить биллинг

┃
┃  покажи системный промпт
┃
   → Read log-ai-monitor-py/ai.py [limit=30, offset=79]
   Системный промпт (ai.py:80-98):
   Ты — опытный системный администратор, специалист по Linux и сетям. Ты — мониторинг
   журналов. Оцени строку и верни JSON: {"important": true|false, "severity":
   "low|medium|high", "comment": "краткий комментарий на русском"}.
   Строка считается ВАЖНОЙ (important=true) по умолчанию.
   Правила-корректировки оператора — строка становится НЕ важной (important=false) ТОЛЬКО
   если к ней применимо одно из этих правил и оно предписывает игнорировать такой тип
   строк

игнорируй сообщения Unable to add forward map для неправильного hostname dhcpd[1367710]: Unable to add forward map from Keenetic_Omni.local.bmstu.ru to 195.19.44.234: REFUSED

игнорируй сообщения Abandoning IP из сети 10.30.201.0/24 dhcpd[1519336]: Abandoning IP address 10.30.201.239: pinged before offer

Ну и каковы же результаты?

Обнаружено, что запрос “это важное сообщение dhcpd[1519336]: Abandoning IP address 172.16.59.144: declined” ? оценивается по разному, от “ничего важного - штатное поведение dhcp сервера” до “очень важно, кто-то использует чужой IP адрес”

Запуск dhcp сервера без списка интерфейсов - результат многолетнего обновления INTERFACES на INTERFACESv4

   Почему important=True:
   1. Правила-корректировки не применимы. Forward-map игнорируются только для сети 10.8.
      106.0/24 (правило 7) и «для неправильного hostname» (правило 3). Здесь IP 172.16.50.
      46, а hostname X301(P).local.bmstu.ru — «правильный». Ни одно правило не срабатывает.
┃  какие символы допустимы в hostname ?
┃
   + Thought: 1.1s
   Допустимые символы в hostname (RFC 1123 / RFC 1035):
  1. Латинские буквы: a–z, A–Z
  2. Цифры: 0–9
  3. Дефис: - (не первым и не последним символом метки)
   Ограничения:
  1. Метка (метку между точками): 1–63 символа; общая длина: до 253
  2. Метка не может начинаться/заканчиваться дефисом
  3. Точка разделяет метки
   Недопустимы: _, (, ), пробел, /, ~, кириллица и прочее. (Нижнее подчёркивание
   встречается только в SRV-записях вроде _sip._tcp, но в обычных hostname — недопустимо.)
   То есть X301(P).local.bmstu.ru некорректен из-за скобок ( ), а FK_216_1.local... — из-
   за _.
   Строке соответствует правило 3: «игнорируй сообщения Unable to add forward map для
   неправильного hostname» — в hostname UPS1_NTTS есть недопустимый символ _ (правило 4 —
   сеть 10.8.106.0/24 — не подходит, IP здесь 172.16.46.19; правило 5 — abandon — не
   подходит).
   Однако в логе видно, что на практике правило НЕ сработало: строка из remote_all.log:
   1173 (21:50:58) была классифицирована как important=True (monitor.log:3122, Анализ
   #1173) и по ней ушло уведомление (burst, 06:11:02).
   Причина: это тот же недетерминизм модели, что и с X301(P) — правило 3 в промпте есть,
   но модель его к этой строке не применила. Формально строка подпадает под правило 3, но
   ИИ его пропустил.
   Хотите исправить? Варианты:
   1. Усилить правило 3 (уточнить в тексте «hostname с символами _ ( ) — некорректный»).
   2. Вернуть отдельное правило про _ (было №5, удалено ранее).

анализ с новой строки (начал с начала)

анализ с конца файла

   1. Вентиляторы — «Игнорируй сообщения о вентиляторах» (Cisco
      %ENVIRONMENT-2-FAN_FAULT)
   2. 194.226.65.9 — «игнорируй сообщения с адреса 194.226.65.9» (named,
      zone transfer denied)
   3. 10.8.106.0/24 — «игнорируй сообщения add forward map для сети 10.8.
      106.0/24» (dhcpd)
   4. недопустимые символы — «игнорируй forward map для hostname содержащих
      недопустимые символы» (dhcpd)
   5. 10.30.0.0/16 — «игнорируй abandoned для сети 10.30.0.0/16» (dhcpd)

Важность: medium Комментарий ИИ: Ядро сообщает о длительной загрузке CPU работой очереди blk_mq, возможно проблема с дисковым вводом-выводом. Строка: 2026-08-13T21:02:41+03:00 helper kernel: workqueue: blk_mq_run_work_fn hogged CPU for >10000us 128 times, consider switching to WQ_UNBOUND

эра_велосипедостроения_ии.txt · Last modified: 2026/08/18 12:46 by val