Гайд

Best practices: как не утонуть в данных наблюдаемости

Практические принципы настройки логов, метрик и алертов — чтобы мониторинг помогал, а не добавлял шум.

Подключить Konso arrow_forward
bolt

TL;DR

  • check_circleГлавная проблема мониторинга — не отсутствие данных, а их избыток без структуры
  • check_circleЛогируйте события, а не состояние — каждая запись должна отвечать на вопрос «что произошло»
  • check_circleАлерт должен требовать действия: если его можно проигнорировать — он лишний
  • check_circleМетрики нужны для трендов, логи — для диагностики, бизнес-события — для impact
  • check_circleНачните минимально, добавляйте сигналы постепенно — retrospectively дешевле, чем очищать мусор

Проблема: данных много, пользы мало

Большинство команд приходят к одному из двух антипаттернов. Первый — логировать всё подряд, не думая об уровнях и структуре. Через месяц поиск по логам занимает минуты, алерты срабатывают десятки раз в день, и никто уже не реагирует. Второй — не логировать ничего существенного, пока не случится инцидент. Оба приводят к одному результату: платформа наблюдаемости есть, но от неё нет пользы.

lightbulb

Alert fatigue — реальная проблема

По данным исследований, команды, получающие более 20 алертов в день, начинают игнорировать большинство из них. Один пропущенный критический алерт может стоить дороже, чем все остальные вместе взятые.

Принцип 1: логируйте события, не состояние

Самая частая ошибка — логировать промежуточное состояние вместо значимых событий. Запись «Processing request» каждые 100мс засоряет поиск и не несёт информации. Запись «Payment failed: timeout after 3000ms» — это событие, которое требует внимания.

Принцип 2: используйте уровни логирования как контракт

Уровни — это не просто пометки. Это соглашение между разработчиком и операционной командой о том, на что реагировать.

Когда использовать каждый уровень

УровеньКогда использоватьКто читаетНужен алерт?
DebugДетали выполнения для диагностикиРазработчик при отладкеНикогда
InformationЗначимые бизнес-события, успешные операцииРазработчик, аналитикРедко
WarningНештатная ситуация, но сервис работаетOn-call инженерИногда
ErrorОперация провалилась, пользователь пострадалOn-call инженерДа
CriticalСистема неработоспособна или данные потеряныВся командаНемедленно

Принцип 3: структурированные логи вместо строк

Неструктурированная строка «User 12345 paid 4900 rubles» требует regex для поиска по userId. Структурированный лог с полями userId и amount позволяет фильтровать и агрегировать мгновенно — особенно в Elasticsearch, который индексирует каждое поле.

Что включать в контекст события

  • check_circleИдентификаторы: userId, requestId, correlationId, sessionId
  • check_circleРезультат: success/failure, статус-код, сообщение ошибки
  • check_circleИзмеримые значения: amount, duration, count, size
  • check_circleОкружение: environment, version, region — для фильтрации по деплою
  • check_circleВременные метки уже добавляет платформа — не дублируйте вручную

Принцип 4: алерт = обязательное действие

Алерт, который можно проигнорировать — это шум. Прежде чем создать алерт, ответьте на вопрос: «Что я сделаю, когда он сработает?» Если ответа нет — алерт не нужен.

Критерии хорошего алерта

  • check_circleActionable: есть конкретный следующий шаг при срабатывании
  • check_circleRare: срабатывает не чаще нескольких раз в неделю в норме
  • check_circleAccurate: низкий уровень ложных срабатываний (false positive < 5%)
  • check_circleTimely: срабатывает достаточно быстро, чтобы среагировать до значимого ущерба
  • check_circleOwned: есть конкретный человек или команда, ответственные за реакцию

Антипаттерны алертинга

  • check_circleАлерт на каждый Error-лог — в норме их могут быть сотни в час
  • check_circleАлерт без порога — любое единичное событие вызывает шум
  • check_circleАлерт-дубликат — несколько алертов на одну и ту же проблему
  • check_circleАлерт без owner — все видят, никто не реагирует
  • check_circleАлерт на симптом вместо причины — тушите пожар, не источник

Принцип 5: метрики для трендов, логи для диагностики

Распространённая ошибка — пытаться использовать логи как метрики (считать ошибки вручную) или метрики как логи (хранить детальные события в time series). У каждого инструмента своя роль.

Когда логи, когда метрики, когда бизнес-события

ВопросИнструментПример
Что именно сломалось?ЛогиStack trace, контекст запроса
Как часто это происходит?МетрикиError rate за последние 24 часа
Ухудшается ли ситуация?МетрикиТренд latency за неделю
Какой бизнес-ущерб?Value TrackingКоличество упавших оплат
Какой пользователь пострадал?ЛогиuserId в контексте ошибки

Принцип 6: разные настройки для разных окружений

То, что нужно в development, мешает в production. Единая конфигурация логирования на все окружения — один из главных источников шума.

Рекомендуемые настройки по окружениям

  • check_circleDevelopment: Debug и выше — детально, но только локально
  • check_circleStaging: Information и выше — тестирование с реалистичным уровнем логов
  • check_circleProduction: Warning и выше для большинства модулей, Error и выше для некритичных
  • check_circleКритичные модули (payments, auth) — Information и выше в production для аудита
  • check_circleВременный Debug в production: включайте только через feature flag с автоматическим отключением

Принцип 7: retention — удаляйте то, что не смотрите

Хранить логи за 2 года не имеет смысла, если инциденты разбираются за 72 часа. Избыток хранилища замедляет поиск и увеличивает стоимость. Определите, за какой период данные реально используются, и настройте retention под это.

Типичные горизонты хранения по типу данных

  • check_circleDebug логи: 24–48 часов (только для активной отладки)
  • check_circleInfo/Warning логи: 7–30 дней
  • check_circleError/Critical логи: 30–90 дней
  • check_circleМетрики с высоким разрешением (1 мин): 7–14 дней
  • check_circleМетрики с низким разрешением (1 час): 6–12 месяцев
  • check_circleБизнес-события (Value Tracking): 90–365 дней — нужны для бизнес-аналитики
lightbulb

Практика

Настройте retention отдельно для каждого типа данных в Konso. Это позволит хранить критичные события дольше, не переплачивая за Debug-логи.

Чеклист: аудит текущей observability

  • check_circleПосчитайте долю Debug-логов в production — если больше 20%, выключите
  • check_circleПроверьте алерты за последний месяц: какие срабатывали, какие игнорировались
  • check_circleНайдите дублирующие алерты — два алерта на одну и ту же проблему
  • check_circleДобавьте correlationId во все запросы, если его ещё нет
  • check_circleУбедитесь, что каждый Error-лог содержит userId или requestId для диагностики
  • check_circleПроверьте retention — удаляется ли то, что вы не смотрите

Настройте мониторинг по best practices

Подключите Konso и получите инструменты для структурированного логирования, метрик и алертинга в одной платформе

Начать бесплатно arrow_forward

Частые вопросы

С какого уровня логирования начать в новом проекте? expand_more
Начните с Information в staging и Warning в production. Добавляйте детализацию для конкретных модулей по мере необходимости. Это лучше, чем логировать всё и потом убирать шум.
Как понять, что алертов слишком много? expand_more
Если on-call инженер получает более 10 алертов в смену и часть из них регулярно игнорируется — это признак alert fatigue. Начните с аудита: какие алерты за последние 2 недели потребовали реального действия?
Нужен ли correlationId если у нас монолит, а не микросервисы? expand_more
Да, даже в монолите correlationId в каждом запросе позволяет объединить все логи одного пользователя или сессии в единую цепочку. Это критично при диагностике проблем конкретного пользователя.
Как настроить разные уровни логирования в Konso для разных окружений? expand_more
Используйте appsettings.{Environment}.json для .NET-проектов с разными значениями LogLevel по окружениям. Konso SDK наследует конфигурацию логирования из хоста — дополнительных настроек на стороне Konso не требуется.
Что делать, если объём логов растёт быстрее, чем мы успеваем разбирать? expand_more
Первый шаг — проверить уровни: скорее всего, Debug включён там, где не нужен. Второй — включить sampling для высокочастотных Info-логов (логировать каждый 10-й запрос вместо каждого). Третий — настроить retention, чтобы старые данные удалялись автоматически.

Оставаясь на сайте, Вы даете свое согласие на использование файлов cookie