Log-аннотации: управление выводом при деплое

Уровень: expert ~35 мин Практика: Umami (продолжение) (MIT)

Что нужно знать перед уроком

  • M7.04 — Tracking-аннотации — нужно понимание Apply-стадии, на которой работают и tracking, и log-аннотации

Что нужно знать перед уроком

M7 урок 4 — Apply-стадия и tracking-аннотации. Этот короткий, но практически важный урок разбирает все аннотации, управляющие тем, какие логи попадают в вывод команды деплоя.

Теория

Полный список log-аннотаций

АннотацияНазначение
werf.io/skip-logsПолностью подавляет вывод логов всех подов ресурса
werf.io/skip-logs-for-containersПодавляет логи только для перечисленных контейнеров (через запятую)
werf.io/show-logs-only-for-containersПоказывает логи только для перечисленных контейнеров, подавляя остальные
werf.io/show-logs-only-for-number-of-replicasОграничивает вывод логов первыми N репликами (полезно при большом числе одинаковых подов)
werf.io/log-regexПоказывает только строки, соответствующие regex
werf.io/log-regex-skipПодавляет строки, соответствующие regex
werf.io/log-regex-for-<container> / werf.io/log-regex-skip-for-<container>Те же regex-фильтры, но применённые к конкретному контейнеру

Почему это важно для production CI/CD, а не только для удобства

При деплое ресурсов с большим числом реплик (например, Deployment с replicas: 20) вывод логов деплоя в GitLab CI может стать абсолютно нечитаемым и превысить лимиты объёма вывода джоба. show-logs-only-for-number-of-replicas: "3" решает это, показывая логи только от небольшой репрезентативной выборки подов, при этом Nelm по-прежнему отслеживает готовность всех реплик — ограничение касается только объёма выводимой информации, а не логики отслеживания готовности.

log-regex-skip особенно полезен для подавления «шумных» health-check-строк (например, регулярных GET /healthz 200 OK), которые засоряют вывод и мешают увидеть реальные ошибки при диагностике неудачного деплоя.

Пример комбинированного использования

1
2
3
4
5
6
7
8
9
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{.Application.Instance.Name}}-app
  annotations:
    werf.io/show-logs-only-for-number-of-replicas: "2"
    werf.io/log-regex-skip: ".*GET /healthz.*"
    werf.io/skip-logs-for-containers: "istio-proxy"
spec: ...

Здесь одновременно ограничивается число реплик, чьи логи показываются, подавляются шумные health-check-строки и полностью скрываются логи sidecar-контейнера service mesh, не относящиеся к диагностике приложения.

Частые ошибки и подводные камни

  • Использовать skip-logs вместо более точечных фильтров при отладке. Полное подавление логов лишает возможности диагностировать проблему при неудачном деплое — обычно лучше использовать log-regex-skip для конкретного шума, а не выключать логи целиком.
  • Забывать, что show-logs-only-for-number-of-replicas не влияет на отслеживание готовности. Это чисто визуальное ограничение вывода — Nelm по-прежнему дожидается готовности всех реплик независимо от того, сколько из них показывают логи.
  • Путать log-regex (показывать только совпадения) и log-regex-skip (скрывать совпадения). Это противоположные по смыслу фильтры, легко перепутать при быстром написании аннотаций.

Практика в кластере

🧩 Практика урока: Umami (продолжение) · лицензия MIT
1
2
3
d8 k annotate deployment umami-app -n course-m6-umami \
  werf.io/log-regex-skip='.*GET /healthz.*' --overwrite
nelm release install -n course-m6-umami -r umami .

Сравните объём и читаемость вывода деплоя до и после добавления log-regex-skip.

Практика разработки

Добавьте в пакет Umami аннотацию werf.io/show-logs-only-for-number-of-replicas, если в вашей конфигурации replicas больше 1, чтобы подготовить пакет к масштабированию без деградации читаемости CI-логов.

Шпаргалка команд урока

Полная таблица log-аннотаций — 📋 nelm .

Вопросы для самопроверки

Влияет ли werf.io/show-logs-only-for-number-of-replicas на отслеживание готовности реплик?

Ограничение касается только объёма выводимой информации в CI, а не логики отслеживания готовности.

Источник: Deckhouse — Nelm-аннотации

Чем отличаются log-regex и log-regex-skip?

Противоположные по смыслу фильтры — важно не перепутать при написании аннотаций.

Источник: Deckhouse — Nelm-аннотации

Какая аннотация лучше всего подходит для скрытия только шумных health-check строк, сохранив остальные логи?

Точечная фильтрация предпочтительнее полного подавления при отладке.

Источник: Рекомендуемая литература

Можно ли применить log-regex к конкретному контейнеру, а не ко всем контейнерам пода?

Существует per-container вариант для более точечного контроля.

Источник: Deckhouse — Nelm-аннотации

Рекомендуемая литература

Официальная документация

Статьи и блоги

Книги

  • Matt Butcher, Matt Farina, Josh Dolitsky. Learning Helm. 2019. ISBN 978-1492036781.

Связанные материалы