Tags

Tags give the ability to mark specific points in history as being important
  • chart/2.1.0

    Release: chart/2.1.0
    chart/2.1.0
    
    ### Добавлено
    
    - `extraVolumes` и `extraVolumeMounts` — дополнительные тома в поде,
      например CA внешней базы: в образе distroless чужого CA нет.
    
    ### Изменено
    
    - `appVersion` — `v0.11.1`: служебные вставки Holmes вырезаются из
      сообщений, адрес вебхука не попадает в лог, неполная настройка SMTP и
      webhook останавливает старт. Подробности — в changelog сервиса.
    
    ### Удалено
    
    - `config.listenAddr`: ключ ни в одном шаблоне не использовался, порт
      задаётся через `service.port`. Из своих values его можно убрать, на
      рендер он не влиял.
    
    ### Исправлено
    
    - `config.telegram.chatId`, заданный в values числом без кавычек
      (`chatId: -1001234567890`), больше не превращается в
      `-1.00123456789e+12`: сервис отправлял такую строку в Telegram как имя
      чата. Кавычки по-прежнему работают.
    - Смена `secrets.*` перезапускает под: на нём появилась аннотация
      `checksum/secret`. Раньше новое значение попадало в Secret, а под
      продолжал работать со старым до ручного рестарта. С `existingSecret`
      аннотации нет — за перезапуском следит тот, кто ведёт Secret.
    - Secret рендерится в `data` с base64 вместо `stringData`. Ключ, исчезнувший
      из values, теперь удаляется при обновлении через `kubectl apply` и ArgoCD:
      сервер очищает `stringData`, поэтому удаление по нему не вычислялось и
      старое значение (например, `VL_PASSWORD` после перехода на 2.0.0)
      оставалось в кластере.
  • v0.11.1

    Release: v0.11.1
    v0.11.1
    
    ### Добавлено
    
    - Запись лога `retry skipped` с полем `reason` (`budget`, `attempts`,
      `stale`) и теми же полями алерта, что у `investigation failed`: немедленный
      повтор после исключения Holmes не состоялся. Раньше такой разбор терялся
      без следа в логе; само правило повтора не менялось.
    
    ### Изменено
    
    - Настройка, которая раньше молча принималась, теперь останавливает старт:
      - `SMTP_USER`, `SMTP_PASSWORD`, `SMTP_FROM` или `SMTP_TO` без `SMTP_ADDR` и
        `WEBHOOK_AUTH_HEADER` без `WEBHOOK_URL` — канал выглядел настроенным,
        а доставки не было;
      - ноль и отрицательные значения `MAX_PER_HOUR`, `MAX_PER_DAY`, `QUEUE_SIZE`,
        `DEDUP_WINDOW`, `INVESTIGATION_TIMEOUT`. Ноль выключал расследования
        целиком, отрицательный `QUEUE_SIZE` ронял процесс паникой.
    
      При обновлении проверьте, что этих переменных нет в окружении без пары.
    - Из разбора перед отправкой в Slack, Telegram и на почту вырезаются
      служебные вставки Holmes: блоки `<< {"type": "promql", ...} >>` и картинки
      со схемой `tool-image://`. В лог и в `WEBHOOK_URL` разбор уходит как есть.
    
    - В строке лога `starting` поле `db_path` печатается только для SQLite:
      у внешней базы вместо него `db_host` и `db_name`. Раньше путь к файлу
      SQLite выводился и при `DB_TYPE=postgres` / `mysql`.
    
    ### Исправлено
    
    - Адрес из `SLACK_WEBHOOK_URL` и `WEBHOOK_URL` больше не попадает в лог
      `notify failed` ни при сетевой ошибке, ни при неразбираемом адресе
      (например, с переводом строки в конце): в тексте остаётся только причина.
    - Сообщения драйвера MySQL (обрыв соединения и подобные) идут в общий
      JSON-лог записью `mysql driver` уровня `WARN`, а не обычным текстом
      в stderr.
  • chart/2.0.0

    Release: chart/2.0.0
    chart/2.0.0
    
    ### Добавлено
    
    - `config.db.type` (`sqlite` по умолчанию, `postgres`, `mysql`),
      `config.db.host`, `.port`, `.name`, `.user`, `.sslMode` → переменные `DB_*`
      сервиса; `secrets.dbPassword` и ключ `DB_PASSWORD` в Secret (в том числе
      в `existingSecret`, необязательный).
    - `persistence.enabled` (по умолчанию `true`), `.size` (`100Mi`),
      `.storageClass`, `.accessModes`, `.existingClaim`: PVC `<fullname>-data`
      под файл SQLite в `/data`. `enabled: false` — `emptyDir`. Для внешней базы
      том не создаётся и не монтируется.
    - `podSecurityContext.fsGroup: 65532` — без него SQLite не может создать
      файл на томе, смонтированном с владельцем root.
    - `config.goMemLimit` (по умолчанию `100MiB`) → `GOMEMLIMIT`: сервис читает
      ответ Holmes потоком, и итоговое событие с перепиской бывает на мегабайты.
      Значение — около 80 % от `resources.limits.memory`; поднимая лимит памяти,
      поднимите и его.
    
    ### Изменено
    
    - `appVersion` — `v0.11.0`: состояние в базе, повтор неудачных разборов,
      запрос к Holmes стримом. Изменения сервиса — в
      [CHANGELOG.md](../../CHANGELOG.md#v0110--2026-09-15).
    
    ### Удалено
    
    - `config.victoriaLogs.url`, `config.victoriaLogs.user`, `secrets.vlPassword`
      и ключ `VL_PASSWORD` в Secret: сервис больше не восстанавливает дедуп из
      своих логов. `config.victoriaLogs.uiUrl` и `.streamFilter` остались.
    
    ### Ломающие изменения
    
    - По умолчанию чарт создаёт PVC. Кластер без default StorageClass оставит
      под в `Pending`: задайте `persistence.storageClass`, выключите
      `persistence.enabled` или переключите `config.db.type` на внешнюю базу.
    - `config.victoriaLogs.url` / `.user` и `secrets.vlPassword` из старых values
      молча игнорируются — удалите их. Ключ `VL_PASSWORD` в `existingSecret`
      больше не читается.
    - PVC удаляется вместе с релизом (`helm uninstall`): состояние не ценное,
      его потеря — повторные разборы висящих алертов в пределах лимитов.
  • v0.11.0

    Release: v0.11.0
    v0.11.0
    
    ### Добавлено
    
    - Состояние дедупа и троттлинга хранится в базе и переживает рестарт:
      `DB_TYPE` (`sqlite` по умолчанию, `postgres`, `mysql` — он же для MariaDB),
      `DB_PATH` (по умолчанию `data/server.db` от рабочего каталога, каталог
      создаётся сам),
      `DB_HOST`, `DB_PORT`, `DB_NAME`, `DB_USER`, `DB_PASSWORD`, `DB_SSL_MODE`.
      Таблицу `bridge_state` сервис создаёт при старте — пользователю базы нужно
      право `CREATE TABLE`, либо таблицу нужно создать заранее по DDL из README.
      Недоступная база — warning, сервис работает в памяти. Неполная настройка
      (`postgres` без `DB_HOST`, `DB_NAME` или `DB_USER`, `DB_HOST` при `sqlite`,
      порт или пробел внутри `DB_HOST`, непринятый драйвером `DB_SSL_MODE`) —
      отказ стартовать.
    - Новые поля в строке `starting`: `db_type`, `db_path`, `db_host`, `db_name`;
      новые сообщения `state loaded`, `state load failed`, `state save failed`.
    
    ### Изменено
    
    - Встроенный `system.tmpl` (`en`, `ru`) запрещает агенту заполнять
      необязательные параметры инструментов (`null`, `""`, `"now"` вместо
      пропуска): такой вызов падает в Holmes, и разбор теряется. Для диапазона
      времени агент передаёт только `start`. Установки со своим `system.tmpl`
      в `TEMPLATE_DIR` правило не получат — добавьте его в свой шаблон.
    - Окно троттлинга (`MAX_PER_HOUR` / `MAX_PER_DAY`) теперь тоже переживает
      рестарт: под в crash loop больше не получает свежий бюджет на каждом старте.
    - Неудачный разбор (ошибка, таймаут, SIGTERM) больше не блокирует эпизод
      на `DEDUP_WINDOW`. Повтор проходит со следующей доставкой алерта, не раньше
      `INVESTIGATION_TIMEOUT` после неудачи, занимает слот троттлинга и
      ограничен двумя запусками Holmes на эпизод. Разбор, прерванный рестартом,
      тоже повторяется; не дошедший до Holmes — сразу и без траты попытки.
    - На HTTP 500 от Holmes разбор повторяется один раз сразу, без ожидания
      следующей доставки алерта, если позволяют `MAX_PER_HOUR` / `MAX_PER_DAY`.
      Так Holmes отвечает на исключение посреди разбора (например, битые
      аргументы инструмента), и к моменту ответа он уже не считает. Повтор
      пишет свои `investigation started` и итог, занимает слот троттлинга и
      расходует вторую попытку эпизода. 502/503/504, отказ соединения, таймаут
      и ошибки провайдера LLM (исключения `litellm.*`: ключ, недоступность,
      отказ принять запрос), как и переполненное окно контекста, ждут
      отложенного повтора.
    - Запрос к Holmes идёт стримом (`stream: true`). Таймаут bridge теперь
      останавливает разбор и на стороне Holmes — на границе текущего шага, —
      а не только перестаёт его ждать: раньше Holmes дорешивал брошенный разбор
      параллельно со следующим из очереди. Событие `error` внутри потока
      повторяется сразу по тем же правилам, что HTTP 500; rate limit провайдера
      (`error_code` 5204) — нет.
    - В записях `investigation timed out`, `investigation failed` и
      `investigation interrupted` появились поля стоимости, как у
      `investigation done` (`cost`, `cost_currency`, `total_tokens`,
      `prompt_tokens`, `completion_tokens`), — сколько стоил разбор до обрыва.
      Полей нет, если до обрыва не завершился ни один вызов LLM.
    - Потолок ответа Holmes в 4 МиБ снят: ненужные события потока (выводы
      инструментов) пропускаются без накопления, итоговое событие ограничено
      16 МиБ.
    - SIGTERM во время разбора пишет `investigation interrupted` (warning) вместо
      `investigation failed` и не увеличивает
      `holmes_bridge_investigations_total{status="error"}`. Процесс дожидается
      воркера перед выходом.
    
    ### Удалено
    
    - Запрос к Holmes без стрима и флага для него нет: откат — это откат версии.
    - `VL_URL`, `VL_USER`, `VL_PASSWORD` и восстановление дедуп-отметок из
      собственных логов в VictoriaLogs. `VL_UI_URL` и `VL_STREAM_FILTER` остались —
      они нужны ссылке на разбор в vmui.
    
    ### Ломающие изменения
    
    - Дедуп переживает рестарт только через базу. При первом старте после
      обновления состояние пустое: висящие алерты разберутся повторно в пределах
      `MAX_PER_HOUR`. В контейнере без записываемого тома SQLite не откроется —
      warning, и сервис работает в памяти, как без базы; путь задаётся `DB_PATH`.
    - Из формата логов контрактом осталось только `investigation done` с полем
      `episode` (для ссылки в vmui): `investigation started` сервис больше
      не читает.
  • chart/1.0.1

    Release: chart/1.0.1
    chart/1.0.1
    
    ### Добавлено
    
    - CHANGELOG.md внутри самого чарта: изменения по версиям видно в
      распакованном пакете, а не только в репозитории.