<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>@monitorim_it</title><author><name>@monitorim_it</name></author><id>https://teletype.in/atom/monitorim_it</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/monitorim_it?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@monitorim_it?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=monitorim_it"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/monitorim_it?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-04-24T03:33:33.903Z</updated><entry><id>monitorim_it:building-a-production-grade-observability-platform</id><link rel="alternate" type="text/html" href="https://teletype.in/@monitorim_it/building-a-production-grade-observability-platform?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=monitorim_it"></link><title>Создание платформы наблюдаемости с помощью SigNoz, ClickHouse и OpenTelemetry — Часть 1</title><published>2026-03-27T08:43:07.537Z</published><updated>2026-03-27T08:43:07.537Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img4.teletype.in/files/39/f4/39f4560e-7390-4d1f-9004-a722cee25523.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://miro.medium.com/v2/resize:fit:1926/1*8QBI-1qSvN1QYGlP3IxT4g.png&quot;&gt;Перевод оригинальной статьи Building a Production-Grade Observability Platform with SigNoz, ClickHouse, and OpenTelemetry — Part 1</summary><content type="html">
  &lt;section style=&quot;background-color:hsl(hsl(24,  24%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;d228&quot;&gt;Перевод оригинальной статьи &lt;a href=&quot;https://medium.com/@ShiveeGupta/building-a-production-grade-observability-platform-with-signoz-clickhouse-and-opentelemetry-d7f09a5250f5&quot; target=&quot;_blank&quot;&gt;Building a Production-Grade Observability Platform with SigNoz, ClickHouse, and OpenTelemetry — Part 1&lt;/a&gt;&lt;/p&gt;
  &lt;/section&gt;
  &lt;section style=&quot;background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;HyOb&quot;&gt;Перевод сделан специально для телеграм-канала &lt;a href=&quot;https://t.me/monitorim_it&quot; target=&quot;_blank&quot;&gt;Мониторим ИТ.&lt;/a&gt; Подписывайтесь! Там еще больше полезных постов о мониторинге.&lt;/p&gt;
  &lt;/section&gt;
  &lt;p id=&quot;pAKi&quot;&gt;&lt;em&gt;Уроки, полученные в ходе нашей внутренней настройки наблюдения, и то, что мы узнали помимо документации и долгих ночей настройки кластера.&lt;/em&gt;&lt;/p&gt;
  &lt;h2 id=&quot;2094&quot;&gt;1. Обзор&lt;/h2&gt;
  &lt;p id=&quot;6262&quot;&gt;Мы поставили перед собой задачу создать собственную платформу на базе &lt;strong&gt;SigNoz&lt;/strong&gt;, &lt;strong&gt;ClickHouse&lt;/strong&gt; и &lt;strong&gt;OpenTelemetry (OTEL)&lt;/strong&gt;, способную обрабатывать метрики и трассировки в различных средах в производственных масштабах. Мы постоянно запускаем тысячи экземпляров EC2 и хранилищ данных, генерирующих миллионы метрик и событий трассировки. Кроме того, это помогает нам экономить миллионы долларов на счетах других коммерческих решений, которые мы использовали раньше. 💸&lt;/p&gt;
  &lt;h2 id=&quot;9ff4&quot;&gt;О чем этот блог (и серия)&lt;/h2&gt;
  &lt;p id=&quot;8c5b&quot;&gt;В этой публикации мы рассмотрим &lt;strong&gt;архитектуру и ключевые системные выводы,&lt;/strong&gt; сделанные в ходе масштабного запуска — от проектирования до наблюдения за стеком наблюдения!&lt;br /&gt;Мы выйдем за рамки обучающих материалов и рассмотрим &lt;em&gt;операционные реалии&lt;/em&gt; высокопроизводительных систем наблюдения.&lt;/p&gt;
  &lt;p id=&quot;b799&quot;&gt;В следующих частях мы подробно рассмотрим:&lt;/p&gt;
  &lt;p id=&quot;4fda&quot;&gt;&lt;strong&gt;Единый двоичный пользовательский интерфейс SigNoz и схемы *MergeTree&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;BwR0&quot;&gt;
    &lt;li id=&quot;eae2&quot;&gt;Различные компонент пользовательского интерфейса Signoz и их практические последствия при настройке продакшна.&lt;/li&gt;
    &lt;li id=&quot;e632&quot;&gt;*Схемы MergeTree для хранения метрик и трассировок в ClickHouse и то, как они используют “fingerprints” для оптимизации хранения.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;8bdd&quot;&gt;&lt;strong&gt;Внутреннее устройство ClickHouse для телеметрических нагрузок&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;jNqv&quot;&gt;
    &lt;li id=&quot;8d5a&quot;&gt;Как ведут себя репликация, очереди слияний и компрессия в масштабах петабайт.&lt;/li&gt;
    &lt;li id=&quot;b9ab&quot;&gt;Почему решения по ключам сортировки могут как ускорить, так и полностью разрушить латентность запросов.&lt;/li&gt;
    &lt;li id=&quot;20ca&quot;&gt;Как несоответствие форм вставки тихо убивает пропускную способность.&lt;/li&gt;
    &lt;li id=&quot;792a&quot;&gt;Реальное влияние пакетной обработки, ограничений памяти и асинхронных вставок через коллектора.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;41c4&quot;&gt;&lt;em&gt;Давайте же приступим!&lt;/em&gt;&lt;/p&gt;
  &lt;h2 id=&quot;9732&quot;&gt;Высокоуровневая архитектура&lt;/h2&gt;
  &lt;figure id=&quot;unC1&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:1926/1*8QBI-1qSvN1QYGlP3IxT4g.png&quot; width=&quot;1541&quot; /&gt;
    &lt;figcaption&gt;Корпоративный конвейер OTEL для метрик и трассировок Cloudwatch и Host&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;96bc&quot;&gt;Проектирование высокого уровня (HLD)&lt;/h2&gt;
  &lt;p id=&quot;026e&quot;&gt;Вот высокоуровневая архитектура конвейера наблюдаемости, который мы настроили с использованием OpenTelemetry (OTEL), Kafka и SigNoz. Цель была проста: создать масштабируемый, независимый от вендора конвейер телеметрии, который мог бы обрабатывать метрики и трассировки десятков сервисов, не ограничиваясь одним проприетарным решением.&lt;/p&gt;
  &lt;p id=&quot;91cc&quot;&gt;Всё начинается с источника — наших приложений и систем данных, таких как PostgreSQL, Spark и различных микросервисов. Они генерируют телеметрию (метрики и трассировки), которые мы собираем с помощью OTEL-коллекторов и SDK. Коллекторы отвечают за пакетирование, сэмплинг и преобразование данных в единый формат OTEL перед их дальнейшей отправкой.&lt;/p&gt;
  &lt;p id=&quot;f7d4&quot;&gt;Для мониторинга метрик собственных сервисов AWS мы передаем &lt;strong&gt;метрики CloudWatch&lt;/strong&gt; через &lt;strong&gt;Firehose&lt;/strong&gt;. На пути потока находится &lt;strong&gt;лямбда-функция для обогащения тегами&lt;/strong&gt;, добавляя полезные метаданные, такие как имена сервисов, окружения или кастомные теги, которые значительно упрощают поиск данных в будущем. Далее обогащенные данные резервируются в &lt;strong&gt;S3&lt;/strong&gt; и направляются на уровень коллектора OTEL через балансировщик нагрузки.&lt;/p&gt;
  &lt;blockquote id=&quot;R0tG&quot;&gt;Совет 🚀&lt;em&gt;В Firehose мы использовали размер буфера 0,2 МБ и интервал между буферами 60 секунд. Это даёт нам около 200 одновременных вызовов лямбда. Увеличение размера буфера может уменьшить количество лямбда  вызовов. Однако необходимо учитывать размер сообщения после обогащения тега. Чем больше буфер, тем больше пакет после обогащения, и вы можете столкнуться с ошибками &lt;strong&gt;«Message size too large»&lt;/strong&gt; в логах Firehose. Настройте значение для оптимизации затрат. &lt;br /&gt;&lt;br /&gt;Лямбда для обогащения метрик тегами: мы использовали &lt;a href=&quot;https://github.com/coralogix/cloudwatch-metric-streams-lambda-transformation?tab=readme-ov-file&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;модификацию этой лямбды&lt;/strong&gt;&lt;/a&gt; для OTLPv1.0. Она использует &lt;a href=&quot;https://docs.aws.amazon.com/resourcegroupstagging/latest/APIReference/API_GetResources.html&quot; target=&quot;_blank&quot;&gt;ResourceGroupsTaggingAPI&lt;/a&gt; для обогащения метрик тегами в потоке. &lt;br /&gt;&lt;br /&gt;Используйте &lt;strong&gt;sending_queue&lt;/strong&gt; и &lt;strong&gt;retry_on_failure&lt;/strong&gt; в конфигурации OTEL collector. При экспорте в Kafka, в случае сбоя, коллектор будет хранить сообщения в памяти в зависимости от установленного лимита и пытаться отправить их повторно. Если очередь переполнена, начнется потеря сообщений. Слишком длинная очередь может привести к исчерпанию памяти экземпляра, вплоть до полной потери ответа. Поэтому лимит очереди критически важен.&lt;/em&gt;&lt;/blockquote&gt;
  &lt;p id=&quot;7a4e&quot;&gt;Все эти телеметрические данные — как метрики, так и трассировки — поступают в &lt;strong&gt;Kafka&lt;/strong&gt;, которая служит основой нашего конвейера наблюдения. У нас есть отдельные топики Kafka для метрик и трассировок, поддерживаемые &lt;strong&gt;шестью брокерами, с фактором репликации 3 и сроком хранения 3 дня&lt;/strong&gt;. Это обеспечивает надёжный, отказоустойчивый буфер, способный справляться с пиковыми нагрузками без потери данных.&lt;/p&gt;
  &lt;p id=&quot;d7e4&quot;&gt;&lt;strong&gt;Из Kafka данные получают коллекторы SigNoz&lt;/strong&gt; и записывают их в &lt;strong&gt;ClickHouse&lt;/strong&gt;, нашу основную базу данных временных рядов. Кластер ClickHouse состоит из &lt;strong&gt;3 шардов и 3 реплик&lt;/strong&gt;, координируемых &lt;strong&gt;ZooKeeper&lt;/strong&gt; для обеспечения согласованности и отказоустойчивости. Для управления расходами старые данные (более 90 дней) автоматически выгружаются в &lt;strong&gt;S3&lt;/strong&gt;, что обеспечивает долгосрочное хранение без избыточных расходов на локальное хранилище.&lt;/p&gt;
  &lt;blockquote id=&quot;GMH5&quot;&gt;Совет 🚀&lt;/blockquote&gt;
  &lt;blockquote id=&quot;2kKN&quot;&gt;&lt;em&gt;- Убедитесь, что брокеры размещены в разных зонах доступности для высокой отказоустойчивости. У нас есть 6 брокеров с коэффициентом репликации 3 и сроком хранения 3 дня.&lt;/em&gt;&lt;/blockquote&gt;
  &lt;blockquote id=&quot;vlQh&quot;&gt;&lt;em&gt;– Нам пришлось обновить max_message_bytes, поскольку батчи OTEL-коллектора превышали стандартный размер в 1 МБ. Настройте это значение в соответствии с вашей пропускной способностью.&lt;/em&gt;&lt;/blockquote&gt;
  &lt;blockquote id=&quot;J50p&quot;&gt;&lt;em&gt;- Конфигурация &lt;a href=&quot;https://github.com/open-telemetry/opentelemetry-collector/tree/main/processor/memorylimiterprocessor&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;memory_limiter&lt;/strong&gt;&lt;/a&gt; на коллекторе Signoz OTEL оказалась настоящим спасением! Она ограничивает потребление памяти заданным порогом и оказывает обратное давление на приемник Kafka при превышении лимитов памяти экземпляра, защищая экземпляр от выполнения OOM.&lt;/em&gt;&lt;/blockquote&gt;
  &lt;blockquote id=&quot;ErMT&quot;&gt;&lt;em&gt;- Мы используем 8xlarge-инстанс для каждого узла ClickHouse с &lt;strong&gt;SSD-накопителем на 250 ГБ&lt;/strong&gt;. Мы будем экспериментировать с уменьшением размера экземпляра после бенчмаркинга с использованием трёхмесячных метрик. В настоящее время загрузка ЦП составляет около 8%.&lt;/em&gt;&lt;/blockquote&gt;
  &lt;p id=&quot;0ee5&quot;&gt;Наконец, все данные выводятся на &lt;strong&gt;сервер SigNoz&lt;/strong&gt;, предоставляющий единую интерфейс-панель для запросов и визуализации как метрик, так и трассировок. Именно здесь команды непосредственно взаимодействуют с данными — устраняют скачки задержек, анализируют тенденции и находят узкие места в производительности.&lt;/p&gt;
  &lt;p id=&quot;1e8b&quot;&gt;Короче говоря, эта архитектура обеспечивает чёткое разделение приёма, обработки и хранения данных. Она устойчива к пиковым нагрузкам, достаточно модульна для развития со временем и даёт нам полный контроль над тем, как данные наблюдения проходят через наш стек, — без зависимости от непрозрачного (&amp;quot;чёрного ящика&amp;quot;) SaaS-решения.&lt;/p&gt;
  &lt;h2 id=&quot;3480&quot;&gt;Масштаб и производительность&lt;/h2&gt;
  &lt;ul id=&quot;iSeo&quot;&gt;
    &lt;li id=&quot;905b&quot;&gt;Производственная инфраструктура, находящаяся под наблюдением, включает в себя более 10 тыс. экземпляров EC2 и хранилищ данных, работающих на пике производительности, генерирующих метрики и трассировки.&lt;/li&gt;
    &lt;li id=&quot;3272&quot;&gt;Скорость приема данных: ~200 Мбит/с (Cloudwatch + метрики хоста + трассировки)&lt;/li&gt;
    &lt;li id=&quot;46a5&quot;&gt;~100 млн уникальных метрик на пике&lt;/li&gt;
    &lt;li id=&quot;2b8f&quot;&gt;~1 млн строк/сек реплицируется на все 9 узлов ClickHouse&lt;/li&gt;
    &lt;li id=&quot;ab31&quot;&gt;Время вставки запросов в ClickHouse: 25 мкс.&lt;/li&gt;
    &lt;li id=&quot;2d0e&quot;&gt;357 ТБ загруженных спанов в месяц.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;c195&quot;&gt;2. Почему OpenTelemetry (OTEL), а не Prometheus&lt;/h2&gt;
  &lt;p id=&quot;24e2&quot;&gt;Prometheus многие годы был стандартным выбором для наблюдаемости, но когда нам понадобилась телеметрия «сквозных сигналов» (метрики + трассировки + логи), его ограничения стали очевидными. Подробнее об этих различиях читайте &lt;a href=&quot;https://signoz.io/blog/opentelemetry-vs-prometheus/&quot; target=&quot;_blank&quot;&gt;в этой статье&lt;/a&gt;.&lt;/p&gt;
  &lt;figure id=&quot;6PvZ&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/1*xaLGZpYOzprPHy073ScTIQ.png&quot; width=&quot;700&quot; /&gt;
    &lt;figcaption&gt;Prometheus против OpenTelemetry&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;48d5&quot;&gt;&lt;strong&gt;Точки принятия решений:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;0TcQ&quot;&gt;
    &lt;li id=&quot;abb3&quot;&gt;&lt;em&gt;Модель pull&lt;/em&gt; в Prometheus отлично подходит для простых кластеров, но плохо масштабируется для распределенных рабочих нагрузок с высокой мощностью.&lt;/li&gt;
    &lt;li id=&quot;4a4f&quot;&gt;&lt;em&gt;Конструкция&lt;/em&gt; OTEL на основе push-уведомлений и настраиваемые процессоры обеспечили нам более точный контроль и отказоустойчивость.&lt;/li&gt;
    &lt;li id=&quot;3bbc&quot;&gt;Использование OTEL означало, что при необходимости мы могли экспортировать данные в несколько бэкэндов (например, ClickHouse + S3 + kafka).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;3956&quot;&gt;Почему SigNoz&lt;/h2&gt;
  &lt;ul id=&quot;IGVJ&quot;&gt;
    &lt;li id=&quot;60d5&quot;&gt;Тесно интегрируется с OTEL и ClickHouse.&lt;/li&gt;
    &lt;li id=&quot;60dd&quot;&gt;По умолчанию он предоставляет UI для трассировки, дашборды для метрик и систему алёртинга.&lt;/li&gt;
    &lt;li id=&quot;eca1&quot;&gt;В отличие от SaaS-инструментов, он имеет открытый исходный код и является расширяемым — вы можете модифицировать экспортёр, менять схему ClickHouse и напрямую анализировать работу запросов.&lt;/li&gt;
    &lt;li id=&quot;8cdb&quot;&gt;У него очень активная поддержка сообщества. &lt;/li&gt;
  &lt;/ul&gt;
  &lt;blockquote id=&quot;vF4D&quot;&gt;В последующих публикациях этой серии я поделюсь более подробной информацией о сервере SigNoz и архитектуре схемы, а также о том, как они себя покажут на платформе промышленного масштаба.&lt;/blockquote&gt;
  &lt;figure id=&quot;UpJO&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:1250/1*LPPNca0jHlDXlKBm-rv9yg.png&quot; width=&quot;1000&quot; /&gt;
    &lt;figcaption&gt;Signoz поддерживает PromQL для создания панелей мониторинга и мониторов&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;632f&quot;&gt;3. Наблюдение за стеком наблюдаемости&lt;/h2&gt;
  &lt;p id=&quot;0bc5&quot;&gt;Наблюдаемость не будет полной, если вы не можете &lt;em&gt;наблюдать за самим стеком наблюдаемости&lt;/em&gt;.&lt;br /&gt;Наш конвейер телеметрии оснащен &lt;strong&gt;Prometheus и коллекторами OTEL&lt;/strong&gt;, но с одной особенностью: мы создали &lt;strong&gt;устойчивый уровень сбора метрик с буферизацией через Kafka&lt;/strong&gt;, который устраняет необходимость в статических scrape-таргетов Prometheus и допускает простои сервера Prometheus.&lt;/p&gt;
  &lt;p id=&quot;2cc0&quot;&gt;&lt;em&gt;PS: Мы решили не настраивать отдельный конвейер Signoz + CH для этого, поскольку настройка еще одного кластера CH + ансамбля Zookeeper потребовала бы слишком больших затрат на обслуживание ради наблюдаемости самого конвейера наблюдаемости, который работает на фиксированных инстансах.&lt;/em&gt;&lt;/p&gt;
  &lt;h3 id=&quot;d5e1&quot;&gt;3.1 Мотивация дизайна&lt;/h3&gt;
  &lt;p id=&quot;1e73&quot;&gt;По мере масштабирования наших кластеров OTEL и ClickHouse поддержка статических конфигураций сбора данных Prometheus для каждого коллектора, брокера или узла ClickHouse становилась неуправляемой.&lt;/p&gt;
  &lt;p id=&quot;a5da&quot;&gt;Мы хотели:&lt;/p&gt;
  &lt;ul id=&quot;TphC&quot;&gt;
    &lt;li id=&quot;b34a&quot;&gt;&lt;strong&gt;Динамическое автообнаружение&lt;/strong&gt; — не требуется ручное изменение конфигурации при масштабировании экземпляров.&lt;/li&gt;
    &lt;li id=&quot;2212&quot;&gt;&lt;strong&gt;Отказоустойчивость&lt;/strong&gt; — метрические данные должны выдерживать кратковременные сбои Prometheus.&lt;/li&gt;
    &lt;li id=&quot;184f&quot;&gt;&lt;strong&gt;Единый путь приема данных&lt;/strong&gt; — объединение телеметрии на уровне инфраструктуры и приложения в один поток.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;6ab0&quot;&gt;Поэтому вместо того, чтобы позволить Prometheus напрямую опрашивать каждый endpoint, мы &lt;strong&gt;перевернули архитектуру&lt;/strong&gt;: Prometheus получает метрики всего из одного OTEL-коллектора, который читает метрики из Kafka, куда отправляют их все компоненты конвейера&lt;strong&gt;.&lt;/strong&gt;&lt;/p&gt;
  &lt;h3 id=&quot;e36f&quot;&gt;3.2 Примеры конфигураций коллектора&lt;/h3&gt;
  &lt;h3 id=&quot;6da3&quot;&gt;На каждом хосте (узлы Kafka, ClickHouse, OTEL Collector):&lt;/h3&gt;
  &lt;p id=&quot;198d&quot;&gt;Экспортирует метрики Prometheus в Kafka.&lt;/p&gt;
  &lt;pre id=&quot;HYlF&quot; data-lang=&quot;bash&quot;&gt;receivers:
  prometheus:
      config:
        global:
          scrape_interval: 30s
        scrape_configs:
          - job_name: otel-collector-binary
            static_configs:
              - targets: [&amp;#x27;localhost:8888&amp;#x27;] # OTEL internal metrics
  hostmetrics:
      collection_interval: 30s
      scrapers:
        cpu: {}
        load: {}
        memory: {}
        disk: {}
        filesystem: {}
        network: {}
processors:
  resourcedetection/aws:
      detectors: [ec2]
      timeout: 2s
      override: true
      ec2:
        tags:
          - aws:autoscaling:groupName
          - service_name
          - environment_name
          - cluster
          - provisioned-by-user
          - resource_type
exporters:
  kafka:
    brokers: [&amp;quot;observibility-kafka.prod.local:&amp;lt;port&amp;gt;&amp;quot;]
    topic: &amp;quot;pipeline-metrics&amp;quot;&lt;/pre&gt;
  &lt;h3 id=&quot;d78c&quot;&gt;Центральный коллектор (обращённый к Prometheus):&lt;/h3&gt;
  &lt;p id=&quot;1cb2&quot;&gt;Использует данные из Kafka, повторно выставляет метрики для Prometheus.&lt;/p&gt;
  &lt;pre id=&quot;11OS&quot; data-lang=&quot;bash&quot;&gt;receivers:
  kafka:
    brokers: [&amp;quot;kafka-1:9092&amp;quot;, &amp;quot;kafka-2:9092&amp;quot;]
    topic: &amp;quot;pipeline-metrics&amp;quot;

exporters:
  prometheus:
    endpoint: &amp;quot;0.0.0.0:9464&amp;quot;

service:
  pipelines:
    metrics:
      receivers: [kafka]
      exporters: [prometheus]&lt;/pre&gt;
  &lt;h3 id=&quot;348c&quot;&gt;Конфигурация Прометея&lt;/h3&gt;
  &lt;p id=&quot;d7c6&quot;&gt;Prometheus требуется только один таргет:&lt;/p&gt;
  &lt;pre id=&quot;Fxom&quot; data-lang=&quot;bash&quot;&gt;scrape_configs:
  - job_name: &amp;#x27;otel-metrics-aggregator&amp;#x27;
    static_configs:
      - targets: [&amp;#x27;otel-central-collector:9464&amp;#x27;]&lt;/pre&gt;
  &lt;p id=&quot;2a84&quot;&gt;Это делает настройку &lt;strong&gt;полностью независимой от топологии&lt;/strong&gt; — можно масштабировать Kafka, ClickHouse или OTEL-коллекторы вверх/вниз, не меняя YAML-конфигурацию Prometheus.&lt;/p&gt;
  &lt;h3 id=&quot;910f&quot;&gt;3.3 Что мы отслеживаем&lt;/h3&gt;
  &lt;figure id=&quot;vJTG&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/1*NiDfMiTve_Fnk4jJbOUy0A.png&quot; width=&quot;700&quot; /&gt;
    &lt;figcaption&gt;Из множества показателей у нас есть лишь немногие оповещения и панели мониторинга для мониторинга конвейера.&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;QJes&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:1250/1*CEYx5VQ2V2rM3RCw8McE8Q.png&quot; width=&quot;1000&quot; /&gt;
    &lt;figcaption&gt;Просмотр показателей приемника OTEL в Grafana.&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;cadf&quot;&gt;4. Инструменты для отслеживания&lt;/h2&gt;
  &lt;p id=&quot;3047&quot;&gt;Масштабное отслеживание требует тщательной координации между агентом OTEL и коллекторами, а также использования специальных инструментов для работы с устаревшим кодом. Вот обзор того, как мы справляемся с этим на нашей платформе.&lt;/p&gt;
  &lt;h3 id=&quot;e589&quot;&gt;Обзор агента + коллектора&lt;/h3&gt;
  &lt;ul id=&quot;bOSq&quot;&gt;
    &lt;li id=&quot;c485&quot;&gt;&lt;strong&gt;Агент OTEL&lt;/strong&gt;: запускается вместе с приложениями (sidecar или in-process), перехватывая входящие и исходящие запросы для создания интервалов. Для HTTP, gRPC и поддерживаемых фреймворков агент автоматически инструментирует запросы.&lt;/li&gt;
    &lt;li id=&quot;4089&quot;&gt;&lt;strong&gt;Сборщик OTEL&lt;/strong&gt;: получает данные от агентов, выполняет батчинг, семплинг и обогащение, а также экспортирует их в Kafka для обеспечения устойчивости. Коллектор SigNoz из Kafka записывает данные в ClickHouse для хранения и визуализации.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;f21c&quot;&gt;Такое разделение гарантирует, что агенты остаются легкими, в то время как коллекторы выполняют тяжелую работу, такую ​​как батчинг, backpressure и  экспорт в больших масштабах.&lt;/p&gt;
  &lt;h3 id=&quot;9625&quot;&gt;Кастомное инструментирование для устаревших систем&lt;/h3&gt;
  &lt;p id=&quot;264e&quot;&gt;Некоторые из наших сервисов используют старые версии фреймворков и библиотек, которые не инструментируются автоматически OTEL:&lt;/p&gt;
  &lt;ul id=&quot;rL4c&quot;&gt;
    &lt;li id=&quot;e77b&quot;&gt;&lt;strong&gt;Vert.x 3.9&lt;/strong&gt;: Требуется специальный инструментарий для корректного захвата асинхронных циклов событий.&lt;/li&gt;
    &lt;li id=&quot;141b&quot;&gt;&lt;strong&gt;Клиенты SQL&lt;/strong&gt; (старые версии JDBC) и &lt;strong&gt;клиенты Redis&lt;/strong&gt;: мы написали небольшие оболочки OTEL для захвата областей запросов/команд без изменения существующей бизнес-логики.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;635d&quot;&gt;Эти специальные инструменты имели решающее значение для поддержания сквозной видимости трассировки для критически важных устаревших потоков.&lt;/p&gt;
  &lt;h3 id=&quot;3448&quot;&gt;Семплинг&lt;/h3&gt;
  &lt;p id=&quot;cac8&quot;&gt;Мы применяем &lt;strong&gt;вероятностный семплинг 1%&lt;/strong&gt; для трейсов:&lt;/p&gt;
  &lt;ul id=&quot;GpZZ&quot;&gt;
    &lt;li id=&quot;578a&quot;&gt;Это означает, что только 1% всех запросов фиксируется как трейсы.&lt;/li&gt;
    &lt;li id=&quot;1a52&quot;&gt;Это снижает нагрузку на систему, при этом позволяя проводить статистически значимый анализ ошибок и скачков задержки.&lt;/li&gt;
    &lt;li id=&quot;98d5&quot;&gt;Даже при таком семплинге большинство ошибок фиксируются, так как спаны с ошибками чаще встречаются в запросах с высокой задержкой или сбоев.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;blockquote id=&quot;FaOI&quot;&gt;&lt;em&gt;Полезный совет: &lt;br /&gt;если уровень ошибок у вас крайне низок, рассмотрите &lt;strong&gt;tail-based sampling&lt;/strong&gt; (сбор всех трейсов с ошибками) в сочетании с вероятностной выборкой, чтобы не пропустить критические события сбоя.&lt;/em&gt;&lt;/blockquote&gt;
  &lt;h3 id=&quot;c537&quot;&gt;Метрики охвата&lt;/h3&gt;
  &lt;ul id=&quot;76YY&quot;&gt;
    &lt;li id=&quot;4c55&quot;&gt;Все метрики интервала (задержка, количество ошибок, длительность) хранятся в ClickHouse.&lt;/li&gt;
    &lt;li id=&quot;9549&quot;&gt;Это позволяет строить дашборды без необходимости повторной обработки необработанных трассировок.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;pre id=&quot;FWwy&quot; data-lang=&quot;bash&quot;&gt;# Sample signoz config for span metrics
signozspanmetrics/delta:
    aggregation_temporality: AGGREGATION_TEMPORALITY_DELTA
    dimensions:
    - default: default
      name: service.namespace
    - default: default
      name: deployment.environment
    - name: signoz.collector.id
    dimensions_cache_size: 100000
    latency_histogram_buckets:
    - 100us
    - 1ms
    - 2ms
    - 6ms
    - 10ms
    - 50ms
    - 100ms
    - 250ms
    - 500ms
    - 1000ms
    - 1400ms
    - 2000ms
    - 5s
    - 10s
    - 20s
    - 40s
    - 60s
    metrics_exporter: signozclickhousemetrics&lt;/pre&gt;
  &lt;h3 id=&quot;43f3&quot;&gt;Вспомогательные библиотеки OTEL&lt;/h3&gt;
  &lt;p id=&quot;8d5b&quot;&gt;Для поддерживаемых библиотек OTEL предлагает богатый набор инструментов в &lt;a href=&quot;https://github.com/open-telemetry/opentelemetry-java-contrib&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;opentelemetry-contrib&lt;/strong&gt;&lt;/a&gt;. Он включает в себя автоматический инструментарий для баз данных, систем обмена сообщениями, веб-фреймворков и многого другого. Использование этих инструментов снижает потребность в специальных оболочках и обеспечивает совместимость с будущими версиями.&lt;/p&gt;
  &lt;h2 id=&quot;706c&quot;&gt;5. Итоги и что дальше&lt;/h2&gt;
  &lt;p id=&quot;4973&quot;&gt;В этой части мы рассмотрели общие принципы проектирования и эксплуатации платформы наблюдения промышленного уровня с использованием SigNoz, ClickHouse и OpenTelemetry. Ключевые выводы:&lt;/p&gt;
  &lt;ul id=&quot;N7Kw&quot;&gt;
    &lt;li id=&quot;b62e&quot;&gt;&lt;strong&gt;Масштабируемая архитектура:&lt;/strong&gt; разделение приема, обработки и хранения позволяет системе обрабатывать миллионы показателей и трассировок в секунду, оставаясь при этом устойчивой к скачкам нагрузки.&lt;/li&gt;
    &lt;li id=&quot;1174&quot;&gt;&lt;strong&gt;Практические уроки настройки:&lt;/strong&gt; такие конфигурации, как ограничения памяти коллектора OTEL, пакетирование Kafka и размеры буфера Lambda, имеют решающее значение для надежности и оптимизации затрат.&lt;/li&gt;
    &lt;li id=&quot;7622&quot;&gt;&lt;strong&gt;Самонаблюдаемость:&lt;/strong&gt; Инструментирование самого конвейера наблюдаемости обеспечивает динамический мониторинг метрик Prometheus и обратного давления, без необходимости управлять сотнями статических конфигураций сбора данных.&lt;/li&gt;
    &lt;li id=&quot;544d&quot;&gt;&lt;strong&gt;Трейс-инструментирование:&lt;/strong&gt; правильная настройка агента и коллектора, а также специализированный инструментарий для устаревших библиотек обеспечивают полноту распределённых трейсов, в то время как вероятностная выборка позволяет контролировать затраты на хранение и прием данных.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;3fb4&quot;&gt;Эта статья посвящена вопросам &lt;strong&gt;«почему»&lt;/strong&gt; и &lt;strong&gt;«как» на архитектурном уровне&lt;/strong&gt;. Мы надеемся, что она даст вам конкретные идеи и практические рекомендации по созданию и настройке собственного телеметрического стека.&lt;/p&gt;
  &lt;p id=&quot;1432&quot;&gt;&lt;strong&gt;Что дальше (часть 2):&lt;/strong&gt;&lt;br /&gt;В следующей публикации мы подробно рассмотрим &lt;strong&gt;сервер SigNoz, настройки коллектора и схемы ClickHouse&lt;/strong&gt;. Вы получите подробную информацию о:&lt;/p&gt;
  &lt;ul id=&quot;ueY7&quot;&gt;
    &lt;li id=&quot;2749&quot;&gt;Как коллекторы обрабатывают пакетирование, повторные попытки и обратное давление.&lt;/li&gt;
    &lt;li id=&quot;2d82&quot;&gt;Шаблоны проектирования схемы Signoz &lt;strong&gt;*MergeTree&lt;/strong&gt; для метрик и диапазонов с высокой кардинальностью, а также то, как она использует отпечатки для оптимизации хранения.&lt;/li&gt;
    &lt;li id=&quot;401c&quot;&gt;Однобинарный UI-сервер SigNoz с компонентами alert-manager и query-builder.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;e696&quot;&gt;Оставайтесь с нами, если хотите узнать &lt;strong&gt;подробности, выходящие за рамки документации&lt;/strong&gt;, — то, что делает платформу наблюдения за производством по-настоящему надежной и производительной. 👋&lt;/p&gt;
  &lt;p id=&quot;2adP&quot;&gt;2 часть статьи на момент публикации перевода так и не вышлаю (примечание переводчика).&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;3HcO&quot;&gt;Подписывайтесь на телеграм-канал &lt;a href=&quot;https://t.me/monitorim_it&quot; target=&quot;_blank&quot;&gt;Мониторим ИТ&lt;/a&gt;, там еще больше полезной информации о мониторинге!&lt;/p&gt;
  &lt;/section&gt;

</content></entry><entry><id>monitorim_it:scaling-prometheus-metrics-with-grafana-mimir-step</id><link rel="alternate" type="text/html" href="https://teletype.in/@monitorim_it/scaling-prometheus-metrics-with-grafana-mimir-step?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=monitorim_it"></link><title>Масштабирование метрик Prometheus с помощью Grafana Mimir: пошаговая настройка</title><published>2026-03-22T13:51:54.029Z</published><updated>2026-03-22T13:51:54.029Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img1.teletype.in/files/46/bf/46bff762-4961-45a6-a0b4-2806a3f20227.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/1*YxSxgKTTmIWBnHnlUh4hVg.png&quot;&gt;Это перевод оригинальной статьи Scaling Prometheus Metrics with Grafana Mimir: Step-by-Step Setup and Demo.</summary><content type="html">
  &lt;section style=&quot;background-color:hsl(hsl(24,  24%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;k3gk&quot;&gt;Это перевод оригинальной статьи &lt;a href=&quot;https://medium.com/@sanikakotgire2003/scaling-prometheus-metrics-with-grafana-mimir-step-by-step-setup-and-demo-d6750e9693d2&quot; target=&quot;_blank&quot;&gt;Scaling Prometheus Metrics with Grafana Mimir: Step-by-Step Setup and Demo&lt;/a&gt;.&lt;/p&gt;
  &lt;/section&gt;
  &lt;section style=&quot;background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;x7Gb&quot;&gt;Перевод сделан специально для телеграм-канала &lt;a href=&quot;https://t.me/monitorim_it&quot; target=&quot;_blank&quot;&gt;Мониторим ИТ.&lt;/a&gt; Подписывайтесь! Там еще больше полезных постов о мониторинге.&lt;/p&gt;
  &lt;/section&gt;
  &lt;p id=&quot;3bed&quot;&gt;Prometheus отлично подходит для мониторинга, но при масштабировании возникают реальные проблемы, такие как высокая кардинальность, долговременное хранение и высокая доступность. Вот тут-то и приходит на помощь Grafana Mimir.&lt;/p&gt;
  &lt;p id=&quot;26f9&quot;&gt;На недавнем митапе &lt;a href=&quot;https://www.linkedin.com/posts/sanika-kotgire-69b361234_grafana-mimir-prometheus-activity-7347309868296409088-jqn4?utm_source=social_share_send&amp;utm_medium=android_app&amp;rcm=ACoAADpt1JcBAf1J4LD6F6afuMIvFxaOrMpCOZI&amp;utm_campaign=copy_link&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Grafana &amp;amp; Friends x Kubernetes &lt;/strong&gt;&lt;/a&gt;я выступил с докладом и живой демонстрацией того, как Grafana Mimir может масштабировать метрики Prometheus.&lt;/p&gt;
  &lt;p id=&quot;faa3&quot;&gt;В этой статье вы шаг за шагом узнаете обо всем, что я показал в демонстрации.&lt;/p&gt;
  &lt;figure id=&quot;pRaJ&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/1*YxSxgKTTmIWBnHnlUh4hVg.png&quot; width=&quot;700&quot; /&gt;
    &lt;figcaption&gt;&lt;strong&gt;Настройка панели мониторинга Grafana Mimir в качестве источника данных TSDB.&lt;/strong&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;11b4&quot;&gt;Что мы рассмотрим&lt;/h2&gt;
  &lt;blockquote id=&quot;oJt9&quot;&gt;Ограничения Prometheus&lt;br /&gt;Введение в Grafana Mimir&lt;br /&gt;Архитектура и компоненты Mimir&lt;br /&gt;Конфигурация remote write из Prometheus → Mimir&lt;br /&gt;Настройка Grafana → Mimir в качестве источника данных&lt;br /&gt;Визуализация метрик + изучение административного интерфейса&lt;/blockquote&gt;
  &lt;h2 id=&quot;a59f&quot;&gt;Почему именно Grafana Mimir?&lt;/h2&gt;
  &lt;p id=&quot;61cc&quot;&gt;Prometheus — мощная система сбора метрик, но у неё есть следующие проблемы:&lt;/p&gt;
  &lt;ul id=&quot;swhd&quot;&gt;
    &lt;li id=&quot;55e7&quot;&gt;Отсутствует встроенная кластеризация или высокая доступность.&lt;/li&gt;
    &lt;li id=&quot;1f43&quot;&gt;Только локальное хранилище&lt;/li&gt;
    &lt;li id=&quot;f465&quot;&gt;Интенсивное использование памяти при работе с данными высокой кардинальности.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;a94b&quot;&gt;Grafana Mimir — это &lt;strong&gt;высокомасштабируемый backend для долгосрочного хранения метрик Prometheus&lt;/strong&gt;, который решает все эти проблемы.&lt;/p&gt;
  &lt;h2 id=&quot;4d28&quot;&gt;Архитектура Mimir Architecture (краткий обзор)&lt;/h2&gt;
  &lt;figure id=&quot;TFEB&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:778/1*unJccEN94Vm68iFj74_okw.png&quot; width=&quot;622&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;bb30&quot;&gt;Mimir подразделяется компоненты:&lt;/p&gt;
  &lt;ul id=&quot;TCRX&quot;&gt;
    &lt;li id=&quot;H0QY&quot;&gt;&lt;strong&gt;Distributor&lt;/strong&gt; — принимает remote write от Prometheus&lt;/li&gt;
    &lt;li id=&quot;jOg9&quot;&gt;&lt;strong&gt;Ingester&lt;/strong&gt; — временно хранит данные&lt;/li&gt;
    &lt;li id=&quot;pPJZ&quot;&gt;&lt;strong&gt;Compactor&lt;/strong&gt; — компактизирует блоки&lt;/li&gt;
    &lt;li id=&quot;nFEz&quot;&gt;&lt;strong&gt;Querier&lt;/strong&gt; — обрабатывает запросы&lt;/li&gt;
    &lt;li id=&quot;dLii&quot;&gt;&lt;strong&gt;Store-gateway&lt;/strong&gt; — извлекает блоки из объектного хранилища.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;edae&quot;&gt;Это делает Mimir горизонтально масштабируемым и совместимым с HA.&lt;/p&gt;
  &lt;h2 id=&quot;6a05&quot;&gt;Пошаговая настройка&lt;/h2&gt;
  &lt;h3 id=&quot;3167&quot;&gt;Запуск экземпляра EC2 (виртуальной машины)&lt;/h3&gt;
  &lt;p id=&quot;563b&quot;&gt;Перед установкой чего-либо я запустил экземпляр Amazon EC2, который использовал в качестве демонстрационной среды.&lt;/p&gt;
  &lt;figure id=&quot;UDkV&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/1*3KCtsAXNMEiDV6d94p-VDQ.png&quot; width=&quot;700&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;ff07&quot;&gt;Настройка Prometheus&lt;/h3&gt;
  &lt;figure id=&quot;N3XC&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/1*UVrNThpy1q3L8mgUnFpj1A.png&quot; width=&quot;700&quot; /&gt;
    &lt;figcaption&gt;&lt;strong&gt;Статус Mimir TSDB&lt;/strong&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;k6Tg&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/1*sC9SYWEQqIKiOvWPvP3mjw.png&quot; width=&quot;700&quot; /&gt;
    &lt;figcaption&gt;&lt;strong&gt;Prometheus Targets&lt;/strong&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;cYVd&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/1*VczPiFMuF6-cpLwYwGUlYQ.png&quot; width=&quot;700&quot; /&gt;
    &lt;figcaption&gt;&lt;strong&gt;Собранные метрики через Grafana Mimir&lt;/strong&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;7c6a&quot;&gt;Скачайте и распакуйте Prometheus:&lt;/p&gt;
  &lt;pre id=&quot;0TeJ&quot; data-lang=&quot;bash&quot;&gt;wget https://github.com/prometheus/prometheus/releases/download/v2.52.0/prometheus-2.52.0.linux-amd64.tar.gz
tar -xvzf prometheus-2.52.0.linux-amd64.tar.gz
cd prometheus-2.52.0.linux-amd64&lt;/pre&gt;
  &lt;p id=&quot;59eb&quot;&gt;Отредактируйте файл prometheus.yml, чтобы включить удаленную запись в Grafana Mimir:&lt;/p&gt;
  &lt;p id=&quot;7fd9&quot;&gt;Добавьте удаленную запись&lt;/p&gt;
  &lt;blockquote id=&quot;8tD4&quot;&gt;remote_write:&lt;br /&gt;- url: &lt;a href=&quot;http://localhost:9009/api/v1/push&quot; target=&quot;_blank&quot;&gt;http://localhost:9009/api/v1/push&lt;/a&gt;&lt;/blockquote&gt;
  &lt;figure id=&quot;09Z2&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/1*zk05SQ8i4RuPupP4lhlpZQ.png&quot; width=&quot;700&quot; /&gt;
    &lt;figcaption&gt;&lt;strong&gt;Файл конфигурации Prometheus&lt;/strong&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;d182&quot;&gt;Настройка Grafana Mimir&lt;/h3&gt;
  &lt;p id=&quot;621d&quot;&gt;Скачайте Mimir:&lt;/p&gt;
  &lt;pre id=&quot;ky9l&quot; data-lang=&quot;bash&quot;&gt;wget https://github.com/grafana/mimir/releases/download/v2.12.0/mimir-linux-amd64.zip
unzip mimir-linux-amd64.zip
chmod +x mimir&lt;/pre&gt;
  &lt;p id=&quot;a254&quot;&gt;Создайте конфигурационный файл &lt;code&gt;demo.yaml&lt;/code&gt; (базовая настройка для одного процесса):&lt;/p&gt;
  &lt;pre id=&quot;yijR&quot; data-lang=&quot;bash&quot;&gt;# Do not use this configuration in production.
# It is for demonstration purposes only.
multitenancy_enabled: false

blocks_storage:
  backend: filesystem
  bucket_store:
    sync_dir: /tmp/mimir/tsdb-sync
  filesystem:
    dir: /tmp/mimir/data/tsdb
  tsdb:
    dir: /tmp/mimir/tsdb

compactor:
  data_dir: /tmp/mimir/compactor
  sharding_ring:
    kvstore:
      store: memberlist

distributor:
  ring:
    instance_addr: 127.0.0.1
    kvstore:
      store: memberlist

ingester:
  ring:
    instance_addr: 127.0.0.1
    kvstore:
      store: memberlist
    replication_factor: 1

ruler_storage:
  backend: filesystem
  filesystem:
    dir: /tmp/mimir/rules

server:
  http_listen_port: 9009
  log_level: error

store_gateway:
  sharding_ring:
    replication_factor: 1&lt;/pre&gt;
  &lt;figure id=&quot;oYlh&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/1*L2njPFcv6bbIq_5E042qnA.png&quot; width=&quot;700&quot; /&gt;
    &lt;figcaption&gt;&lt;strong&gt;Конфигурация Mimir&lt;/strong&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;6798&quot;&gt;Настройка Grafana&lt;/h3&gt;
  &lt;p id=&quot;2ecc&quot;&gt;Запуск Grafana:&lt;/p&gt;
  &lt;pre id=&quot;u51z&quot; data-lang=&quot;bash&quot;&gt;sudo systemctl start grafana-server&lt;/pre&gt;
  &lt;p id=&quot;5a9f&quot;&gt;Подключите Mimir к Grafana&lt;/p&gt;
  &lt;figure id=&quot;3ah0&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/1*tMyl7fu0ia12zg3NPwzpkA.png&quot; width=&quot;700&quot; /&gt;
    &lt;figcaption&gt;&lt;strong&gt;Настройка Mimir в качестве источника данных&lt;/strong&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;ul id=&quot;xtUv&quot;&gt;
    &lt;li id=&quot;a0e8&quot;&gt;Войдите в Grafana по адресу &lt;code&gt;http://&amp;lt;ip&amp;gt;:3000&lt;/code&gt;(по умолчанию: admin/admin)&lt;/li&gt;
    &lt;li id=&quot;6bf6&quot;&gt;Перейдите в &lt;strong&gt;Settings → Data Sources → Add Data Source&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;d048&quot;&gt;Выберите &lt;strong&gt;Prometheus&lt;/strong&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;d530&quot;&gt;Теперь Grafana подключена к Mimir!&lt;/p&gt;
  &lt;h3 id=&quot;8ca8&quot;&gt;Обзор административного интерфейса Mimir&lt;/h3&gt;
  &lt;figure id=&quot;hTGP&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/1*Le8XZxYiZq6-8eW07J52sQ.png&quot; width=&quot;700&quot; /&gt;
    &lt;figcaption&gt;&lt;strong&gt;Административный интерфейс Grafana Mimir&lt;/strong&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;9kIP&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/1*_vR6HQyz3SFRdV2VOV02Kw.png&quot; width=&quot;700&quot; /&gt;
    &lt;figcaption&gt;&lt;strong&gt;Статус сервисов&lt;/strong&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;bMch&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/1*ttI1hL04H9dhZleSMamvXQ.png&quot; width=&quot;700&quot; /&gt;
    &lt;figcaption&gt;&lt;strong&gt;Статус Hash Ring&lt;/strong&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;hMyT&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:808/1*KtC2l2auW3zdhKVg7utzCA.png&quot; width=&quot;646&quot; /&gt;
    &lt;figcaption&gt;&lt;strong&gt;Статус Ingester&lt;/strong&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;cRz3&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/1*pqIQ-YLdvc9Bve4B8MnueA.png&quot; width=&quot;700&quot; /&gt;
    &lt;figcaption&gt;&lt;strong&gt;Grafana Mimir Memberlist — пары ключ-значение&lt;/strong&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;1e7b&quot;&gt;Эта конфигурация демонстрирует, насколько легко масштабировать Prometheus с помощью Grafana Mimir — без изменения способа сбора метрик.&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;YT9G&quot;&gt;Подписывайтесь на телеграм-канал &lt;a href=&quot;https://t.me/monitorim_it&quot; target=&quot;_blank&quot;&gt;Мониторим ИТ&lt;/a&gt;, там еще больше полезной информации о мониторинге!&lt;/p&gt;
  &lt;/section&gt;

</content></entry><entry><id>monitorim_it:what-kubernetes-logs-wont-tell-you-during-an-incid</id><link rel="alternate" type="text/html" href="https://teletype.in/@monitorim_it/what-kubernetes-logs-wont-tell-you-during-an-incid?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=monitorim_it"></link><title>О чём логи Kubernetes не расскажут вам во время инцидента</title><published>2026-03-21T07:31:48.335Z</published><updated>2026-03-21T07:31:48.335Z</updated><summary type="html">Это перевод оригинальной статьи What Kubernetes Logs Won’t Tell You During an Incident.</summary><content type="html">
  &lt;section style=&quot;background-color:hsl(hsl(24,  24%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;yuqC&quot;&gt;Это перевод оригинальной статьи &lt;a href=&quot;https://naushiljain.medium.com/what-kubernetes-logs-wont-tell-you-during-an-incident-d2f427197c80&quot; target=&quot;_blank&quot;&gt;What Kubernetes Logs Won’t Tell You During an Incident&lt;/a&gt;.&lt;/p&gt;
  &lt;/section&gt;
  &lt;section style=&quot;background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;2fK5&quot;&gt;Перевод сделан специально для телеграм-канала &lt;a href=&quot;https://t.me/monitorim_it&quot; target=&quot;_blank&quot;&gt;Мониторим ИТ.&lt;/a&gt; Подписывайтесь! Там еще больше полезных постов о мониторинге.&lt;/p&gt;
  &lt;/section&gt;
  &lt;p id=&quot;4295&quot;&gt;Если вы достаточно долго используете Kubernetes в продакшене, то уже знаете этот ритуал:&lt;/p&gt;
  &lt;ol id=&quot;7luH&quot;&gt;
    &lt;li id=&quot;JZQS&quot;&gt;Срабатывает алерт.&lt;/li&gt;
    &lt;li id=&quot;6m0b&quot;&gt;Вы открываете логи.&lt;/li&gt;
    &lt;li id=&quot;jzlR&quot;&gt;Они выглядят нормально.&lt;/li&gt;
    &lt;li id=&quot;mUGN&quot;&gt;А продакшен всё ещё «горит».&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;7dfb&quot;&gt;Это не плохая наблюдаемость. Это &lt;strong&gt;неоправданное доверие&lt;/strong&gt;.&lt;/p&gt;
  &lt;p id=&quot;2212&quot;&gt;Логи Kubernetes отлично показывают, &lt;em&gt;что, по мнению вашего приложения, произошло&lt;/em&gt;. Но они совершенно не помогают понять, &lt;strong&gt;почему система ведет себя именно так&lt;/strong&gt;. Именно в этот промежуток времени тратится большая часть времени впустую во время инцидентов.&lt;/p&gt;
  &lt;p id=&quot;9d40&quot;&gt;Вот что обычно не показывают логи — и на что следует обратить внимание вместо них.&lt;/p&gt;
  &lt;h2 id=&quot;5142&quot;&gt;1. В логах не отображается информация о нехватке ресурсов (пока не станет слишком поздно).&lt;/h2&gt;
  &lt;p id=&quot;a459&quot;&gt;В ваших логах указано:&lt;/p&gt;
  &lt;blockquote id=&quot;ymlq&quot;&gt;«Request processed successfully»&lt;/blockquote&gt;
  &lt;p id=&quot;8f81&quot;&gt;Ваши пользователи говорят:&lt;/p&gt;
  &lt;blockquote id=&quot;m4Cf&quot;&gt;«Приложение работает ужасно медленно».&lt;/blockquote&gt;
  &lt;p id=&quot;ad71&quot;&gt;Чего вам не расскажут логи:&lt;/p&gt;
  &lt;ul id=&quot;ERMn&quot;&gt;
    &lt;li id=&quot;9eca&quot;&gt;Ваши поды ограничены по CPU&lt;/li&gt;
    &lt;li id=&quot;71da&quot;&gt;Ваши контейнеры технически &amp;quot;работают&amp;quot;.&lt;/li&gt;
    &lt;li id=&quot;226f&quot;&gt;Ваши запросы находятся в очереди, а не завершаются с ошибкой.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;e3ca&quot;&gt;Ограничение использования CPU не приводит к сбоям в работе подов. Оно &lt;strong&gt;незаметно увеличивает задержку&lt;/strong&gt;. Kubernetes будет спокойно поддерживать работоспособность вашего контейнера, получая при этом 20 мс ресурсов CPU каждые 100 мс.&lt;/p&gt;
  &lt;p id=&quot;22f6&quot;&gt;К тому моменту, когда в логах появляются сообщения о таймаутах, ущерб уже нанесен.&lt;/p&gt;
  &lt;p id=&quot;6119&quot;&gt;&lt;strong&gt;Что действительно помогает&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;c8xZ&quot;&gt;
    &lt;li id=&quot;068f&quot;&gt;Метрики CPU контейнера и его ограничение&lt;/li&gt;
    &lt;li id=&quot;a28d&quot;&gt;Нагрузка CPU на узле&lt;/li&gt;
    &lt;li id=&quot;c559&quot;&gt;Процентили задержки запроса (не средние значения)&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;fc03&quot;&gt;С трудом выработанное правило: если задержка высокая, а логи чисты, &lt;strong&gt;в первую очередь следует подозревать процессор&lt;/strong&gt;.&lt;/p&gt;
  &lt;h2 id=&quot;c368&quot;&gt;2. Логи не объясняют, почему поды перезапускаются&lt;/h2&gt;
  &lt;p id=&quot;7899&quot;&gt;Вы видите:&lt;/p&gt;
  &lt;blockquote id=&quot;XPlz&quot;&gt;«Container terminated with exit code 137»&lt;/blockquote&gt;
  &lt;p id=&quot;0919&quot;&gt;Отлично. Это ничего полезного вам не скажет.&lt;/p&gt;
  &lt;p id=&quot;8d63&quot;&gt;Логи не скажут:&lt;/p&gt;
  &lt;ul id=&quot;2uuj&quot;&gt;
    &lt;li id=&quot;3388&quot;&gt;Был ли pod убит (OOM-killed) из-за нехватки ресурсов на узле&lt;/li&gt;
    &lt;li id=&quot;f2f9&quot;&gt;Выселил ли его kubelet по собственной инициативе&lt;/li&gt;
    &lt;li id=&quot;88a8&quot;&gt;Был ли ограничен другим нагрузкой другого процесса&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;396e&quot;&gt;Логи контейнера обрываются внезапно — потому что контейнер так и не успел зафиксировать собственную гибель.&lt;/p&gt;
  &lt;p id=&quot;e4f5&quot;&gt;&lt;strong&gt;Что действительно помогает&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;LIG0&quot;&gt;
    &lt;li id=&quot;7e03&quot;&gt;Последнее состояние pod (OOMKilled или Evicted)&lt;/li&gt;
    &lt;li id=&quot;8be2&quot;&gt;События, связанные с нехваткой памяти узла&lt;/li&gt;
    &lt;li id=&quot;2a79&quot;&gt;Какие &lt;em&gt;ещё&lt;/em&gt; pod одновременно вызвали всплеск потребления памяти?&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;a002&quot;&gt;Моя давняя ошибка, допущенная на позднем этапе разработки: я&lt;br /&gt;пытался исправить ошибки в приложении, когда реальная проблема заключалась &lt;strong&gt;в конфликтах за память на уровне узлов&lt;/strong&gt;.&lt;/p&gt;
  &lt;h2 id=&quot;ac5e&quot;&gt;3. Логи не показывают решения планировщика (scheduler)&lt;/h2&gt;
  &lt;p id=&quot;6e7f&quot;&gt;Деплой «застрял».&lt;/p&gt;
  &lt;p id=&quot;2177&quot;&gt;В логах отображается следующее:&lt;/p&gt;
  &lt;blockquote id=&quot;zY5n&quot;&gt;«Scaled to 10 replicas»&lt;/blockquote&gt;
  &lt;p id=&quot;a70e&quot;&gt;Но реально работает только 6 подов.&lt;/p&gt;
  &lt;p id=&quot;f0ae&quot;&gt;В логах вы не узнаете:&lt;/p&gt;
  &lt;ul id=&quot;2jUC&quot;&gt;
    &lt;li id=&quot;3f14&quot;&gt;Почему планировщик не может разместить оставшиеся pod&lt;/li&gt;
    &lt;li id=&quot;a50f&quot;&gt;Какие ограничения препятствуют планированию?&lt;/li&gt;
    &lt;li id=&quot;179b&quot;&gt;Провал упаковки в контейнеры произошел незаметно.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;68d2&quot;&gt;Планировщик не записывает в логи причины, по которым он отклонил узлы, так чтобы это было видно в логах приложения.&lt;/p&gt;
  &lt;p id=&quot;5d4d&quot;&gt;&lt;strong&gt;Что действительно помогает&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;rJFW&quot;&gt;
    &lt;li id=&quot;3bd7&quot;&gt;События планирования подов&lt;/li&gt;
    &lt;li id=&quot;d384&quot;&gt;Доступные vs запрошенные ресурсы узла&lt;/li&gt;
    &lt;li id=&quot;18ff&quot;&gt;Конфликты affinity и taint&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;0291&quot;&gt;Суровая правда: большинство «ошибок Kubernetes» во время инцидентов связаны с &lt;strong&gt;математическими ошибками планировщика&lt;/strong&gt;.&lt;/p&gt;
  &lt;h2 id=&quot;6f3a&quot;&gt;4. Логи не фиксируют ухудшение качества сети.&lt;/h2&gt;
  &lt;p id=&quot;fa8a&quot;&gt;Логи говорят:&lt;/p&gt;
  &lt;blockquote id=&quot;3MV9&quot;&gt;«Request sent»&lt;/blockquote&gt;
  &lt;p id=&quot;f4c3&quot;&gt;Они не говорят:&lt;/p&gt;
  &lt;ul id=&quot;6GSj&quot;&gt;
    &lt;li id=&quot;85ef&quot;&gt;Разрешение DNS-запроса заняло 800 мс.&lt;/li&gt;
    &lt;li id=&quot;c8e1&quot;&gt;Между узлами резко возросла потеря пакетов.&lt;/li&gt;
    &lt;li id=&quot;a106&quot;&gt;Правила kube-proxy вышли из строя&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;87b7&quot;&gt;С точки зрения приложения, всё работает нормально. С точки зрения пользователя, всё тормозит.&lt;/p&gt;
  &lt;p id=&quot;2720&quot;&gt;Проблемы в сети сначала приводят к ухудшению качества, &lt;em&gt;а затем&lt;/em&gt; к поломке.&lt;/p&gt;
  &lt;p id=&quot;01e9&quot;&gt;&lt;strong&gt;Что действительно помогает&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;KiP3&quot;&gt;
    &lt;li id=&quot;6a39&quot;&gt;метрики задержки DNS&lt;/li&gt;
    &lt;li id=&quot;58f3&quot;&gt;Потеря пакетов между узлами&lt;/li&gt;
    &lt;li id=&quot;91ae&quot;&gt;Частота повторных попыток подключения&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;03f6&quot;&gt;Совет от опытного пользователя: если работа &lt;em&gt;нескольких сервисов&lt;/em&gt;&lt;br /&gt;тормозит, перестаньте читать логи и &lt;strong&gt;начните проверять DNS и сеть&lt;/strong&gt;.&lt;/p&gt;
  &lt;h2 id=&quot;f07d&quot;&gt;5. Логи обманывают во время Rolling Updates&lt;/h2&gt;
  &lt;p id=&quot;6864&quot;&gt;Во время rollout’ов логи могут вводить в заблуждение.&lt;/p&gt;
  &lt;p id=&quot;b15c&quot;&gt;Вы увидите:&lt;/p&gt;
  &lt;blockquote id=&quot;9PJ2&quot;&gt;«Pod started successfully»&lt;/blockquote&gt;
  &lt;p id=&quot;2810&quot;&gt;Чего вам не расскажут логи:&lt;/p&gt;
  &lt;ul id=&quot;1urM&quot;&gt;
    &lt;li id=&quot;fa68&quot;&gt;Проверки на готовность были пройдены слишком рано.&lt;/li&gt;
    &lt;li id=&quot;8013&quot;&gt;Трафик попал в pod до того, как кеши прогрелись.&lt;/li&gt;
    &lt;li id=&quot;f4d6&quot;&gt;Старые pod освобождались слишком медленно (или вообще не освобождались)&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;1f71&quot;&gt;Приложение считает, что готово. Система — нет.&lt;/p&gt;
  &lt;p id=&quot;8c64&quot;&gt;&lt;strong&gt;Что действительно помогает&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;DSCl&quot;&gt;
    &lt;li id=&quot;5dcd&quot;&gt;Реальные показатели успешности трафика во время rollout&lt;/li&gt;
    &lt;li id=&quot;461a&quot;&gt;Задержка готовности против фактической готовности&lt;/li&gt;
    &lt;li id=&quot;d177&quot;&gt;Поведение балансировщика нагрузки при исчерпании ресурсов соединения&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;4fe2&quot;&gt;Урок усвоен на горьком опыте: зелёное развертывание — это не то же самое, что &lt;strong&gt;безопасное внедрение&lt;/strong&gt;.&lt;/p&gt;
  &lt;h2 id=&quot;ccee&quot;&gt;6. Логи не показывают проблемы control plane&lt;/h2&gt;
  &lt;p id=&quot;d2fb&quot;&gt;В логах вашего приложения мало информации.&lt;br /&gt;Ваш кластер работает медленно.&lt;/p&gt;
  &lt;p id=&quot;7985&quot;&gt;В логах вы не узнаете что:&lt;/p&gt;
  &lt;ul id=&quot;Mx7z&quot;&gt;
    &lt;li id=&quot;2e66&quot;&gt;API-сервер ограничивает количество запросов.&lt;/li&gt;
    &lt;li id=&quot;ee67&quot;&gt;Контроллеры отстают&lt;/li&gt;
    &lt;li id=&quot;b071&quot;&gt;Watch-события задерживаются&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;dc5f&quot;&gt;С точки зрения рабочей нагрузки, &lt;em&gt;проблема заключается в&lt;/em&gt; Kubernetes — но Kubernetes не сообщает об этом вашему приложению.&lt;/p&gt;
  &lt;p id=&quot;ab25&quot;&gt;&lt;strong&gt;Что действительно помогает&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;3pof&quot;&gt;
    &lt;li id=&quot;99e7&quot;&gt;Задержка API-сервера&lt;/li&gt;
    &lt;li id=&quot;6d73&quot;&gt;Метрики ограничения запросов&lt;/li&gt;
    &lt;li id=&quot;a900&quot;&gt;Задержка reconcile контроллеров&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;c4e5&quot;&gt;Если kubectl работает медленно во время инцидента — это сигнал, а не просто неудобство.&lt;/p&gt;
  &lt;h2 id=&quot;f9cd&quot;&gt;7. Логи не показывают того, чего не произошло&lt;/h2&gt;
  &lt;p id=&quot;b418&quot;&gt;Это самая опасная вещь.&lt;/p&gt;
  &lt;p id=&quot;8478&quot;&gt;В логах показано, что произошло.&lt;br /&gt;В них не показано:&lt;/p&gt;
  &lt;ul id=&quot;haxj&quot;&gt;
    &lt;li id=&quot;8cdf&quot;&gt;Запросы, которые так и не дошли до pod&lt;/li&gt;
    &lt;li id=&quot;5eb5&quot;&gt;Pod, которые так и не получили трафика&lt;/li&gt;
    &lt;li id=&quot;a2d7&quot;&gt;Джобы, которые не запустились&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;edb8&quot;&gt;Отсутствие логов редко рассматривают как данные — но во время инцидентов это часто главный сигнал.&lt;/p&gt;
  &lt;p id=&quot;534e&quot;&gt;&lt;strong&gt;Что действительно помогает&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;Nk4x&quot;&gt;
    &lt;li id=&quot;3da0&quot;&gt;Метрики трафика vs ожидаемый объём&lt;/li&gt;
    &lt;li id=&quot;f695&quot;&gt;Коэффициенты отброса запросов upstream&lt;/li&gt;
    &lt;li id=&quot;48f3&quot;&gt;Пропуски событий control plane&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;e0d1&quot;&gt;&lt;strong&gt;Апгрейд инстинкта старшего инженера:&lt;/strong&gt; когда логи пусты, спрашивай: что должно было залогироваться, но не залогировалось?&lt;/p&gt;
  &lt;h2 id=&quot;4fac&quot;&gt;Главный вывод: логи — это запаздывающий сигнал&lt;/h2&gt;
  &lt;p id=&quot;ab3c&quot;&gt;Логи показывают симптомы, а не причины.&lt;/p&gt;
  &lt;p id=&quot;5fdd&quot;&gt;К тому моменту, когда логи «кричат»:&lt;/p&gt;
  &lt;ul id=&quot;0C4z&quot;&gt;
    &lt;li id=&quot;c526&quot;&gt;Задержка уже плохая.&lt;/li&gt;
    &lt;li id=&quot;cb65&quot;&gt;Пользователи уже это заметили&lt;/li&gt;
    &lt;li id=&quot;03c2&quot;&gt;Инцидент уже идёт&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;334f&quot;&gt;Опытные инженеры не перестают использовать логи — они &lt;strong&gt;перестают полагаться только лишь на них&lt;/strong&gt;.&lt;/p&gt;
  &lt;h2 id=&quot;e3a0&quot;&gt;Что я теперь проверяю до логов?&lt;/h2&gt;
  &lt;p id=&quot;356e&quot;&gt;В каждом инциденте я неукоснительно следую одному и тому же списку правил:&lt;/p&gt;
  &lt;ul id=&quot;EMdT&quot;&gt;
    &lt;li id=&quot;0166&quot;&gt;CPU и память на узлах&lt;/li&gt;
    &lt;li id=&quot;9273&quot;&gt;События планирования подов&lt;/li&gt;
    &lt;li id=&quot;227c&quot;&gt;Сигналы троттлинга и eviction-сигналы&lt;/li&gt;
    &lt;li id=&quot;b524&quot;&gt;DNS и задержка сети&lt;/li&gt;
    &lt;li id=&quot;548a&quot;&gt;Состояние API-сервера&lt;/li&gt;
    &lt;li id=&quot;bcf2&quot;&gt;Несоответствие между трафиком и пропускной способностью&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;d31b&quot;&gt;Только &lt;em&gt;после этого&lt;/em&gt; я читаю логи — чтобы подтвердить, а не чтобы обнаружить.&lt;/p&gt;
  &lt;h2 id=&quot;1bd5&quot;&gt;Финал&lt;/h2&gt;
  &lt;p id=&quot;239f&quot;&gt;Если ваше реагирование на инцидент начинается и заканчивается логами, значит, отладка выполняется &lt;strong&gt;слишком поздно&lt;/strong&gt;.&lt;/p&gt;
  &lt;p id=&quot;b132&quot;&gt;Инциденты в Kubernetes происходят в пространстве &lt;strong&gt;между компонентами&lt;/strong&gt; — scheduler, узлы, сеть, control plane — и логи никогда не предназначались для того, чтобы рассказывать эту историю.&lt;/p&gt;
  &lt;p id=&quot;8de8&quot;&gt;Логи не лгут. Они просто не рассказывают всей правды.&lt;/p&gt;
  &lt;p id=&quot;865e&quot;&gt;А в продакшене половина правды — это причина, почему простои длятся дольше, чем должны.&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;Mm8U&quot;&gt;Подписывайтесь на телеграм-канал &lt;a href=&quot;https://t.me/monitorim_it&quot; target=&quot;_blank&quot;&gt;Мониторим ИТ&lt;/a&gt;, там еще больше полезной информации о мониторинге!&lt;/p&gt;
  &lt;/section&gt;

</content></entry><entry><id>monitorim_it:sre-interview-experience</id><link rel="alternate" type="text/html" href="https://teletype.in/@monitorim_it/sre-interview-experience?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=monitorim_it"></link><title>Опыт прохождения собеседования на должность SRE в компании Cisco</title><published>2026-03-01T21:32:35.252Z</published><updated>2026-03-01T21:32:35.252Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img1.teletype.in/files/41/86/41866f8e-b63f-4eb5-8f25-fcab30f49a60.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/0*g2vegV4afLRRa1KC.png&quot;&gt;Это перевод оригинальной статьи Cisco SRE (Site Reliability Engineer) Interview Experience.</summary><content type="html">
  &lt;section style=&quot;background-color:hsl(hsl(24,  24%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;PZhI&quot;&gt;Это перевод оригинальной статьи &lt;a href=&quot;https://medium.com/@sre-devops-interview/cisco-sre-site-reliability-engineer-interview-experience-1f267c2665e6&quot; target=&quot;_blank&quot;&gt;Cisco SRE (Site Reliability Engineer) Interview Experience&lt;/a&gt;.&lt;/p&gt;
  &lt;/section&gt;
  &lt;section style=&quot;background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;H8ce&quot;&gt;Перевод сделан специально для телеграм-канала &lt;a href=&quot;https://t.me/monitorim_it&quot; target=&quot;_blank&quot;&gt;Мониторим ИТ.&lt;/a&gt; Подписывайтесь! Там еще больше полезных постов о мониторинге.&lt;/p&gt;
  &lt;/section&gt;
  &lt;p id=&quot;fd30&quot;&gt;Получение приглашения на собеседование в &lt;strong&gt;Cisco&lt;/strong&gt; стало захватывающей возможностью, а сам процесс оказался одновременно сложным и поучительным. &lt;strong&gt;Вот подробный рассказ о моем опыте собеседования и заданных вопросах.&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;xlE3&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/0*g2vegV4afLRRa1KC.png&quot; width=&quot;700&quot; /&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;dce2&quot;&gt;&lt;strong&gt;Заявки и рекомендации&lt;/strong&gt;&lt;/h2&gt;
  &lt;p id=&quot;3105&quot;&gt;Я подал заявки на несколько вакансий через &lt;strong&gt;LinkedIn&lt;/strong&gt; и обратился за рекомендациями к 4-5 друзьям. Все, кого я нашел в LinkedIn, кто работал в Cisco, получили мое резюме и краткое представление о себе.&lt;/p&gt;
  &lt;p id=&quot;8492&quot;&gt;К счастью, мне позвонили по поводу одной из вакансий, и с этого начался процесс собеседований.&lt;/p&gt;
  &lt;h2 id=&quot;d4cf&quot;&gt;&lt;strong&gt;HR-проверка 💻&lt;/strong&gt;&lt;/h2&gt;
  &lt;p id=&quot;ca0d&quot;&gt;Первый этап представлял собой официальную беседу с представителем отдела кадров. Специалист по кадрам расспросил меня о моих сильных сторонах в работе с различными инструментами и предложил выбрать место работы — &lt;strong&gt;Бангалор или Хайдарабад&lt;/strong&gt;.&lt;/p&gt;
  &lt;p id=&quot;e52b&quot;&gt;Она также упомянула, что в Cisco действует &lt;strong&gt;политика полной удаленной работы&lt;/strong&gt;, что стало большим плюсом.&lt;/p&gt;
  &lt;h2 id=&quot;3a72&quot;&gt;&lt;strong&gt;Первый раунд — Раунд программирования&lt;/strong&gt;&lt;/h2&gt;
  &lt;p id=&quot;cb30&quot;&gt;Этот этап проверял практические технические навыки. Задания включали:&lt;/p&gt;
  &lt;ul id=&quot;EcxG&quot;&gt;
    &lt;li id=&quot;cb7d&quot;&gt;Загрузка файла из &lt;strong&gt;хранилища S3 в контейнере&lt;/strong&gt;.&lt;/li&gt;
    &lt;li id=&quot;2565&quot;&gt;Написание &lt;strong&gt;Terraform-кода&lt;/strong&gt; для создания &lt;strong&gt;EC2-инстанса&lt;/strong&gt; с настройкой &lt;strong&gt;EMR&lt;/strong&gt;.&lt;/li&gt;
    &lt;li id=&quot;49c9&quot;&gt;Создание &lt;strong&gt;Dockerfile&lt;/strong&gt; для контейнера &lt;strong&gt;httpd&lt;/strong&gt;, который копирует файлы из локальной среды в контейнер и обновляет страницу при изменении URL.&lt;/li&gt;
    &lt;li id=&quot;96bd&quot;&gt;Написание &lt;strong&gt;Python-скрипта&lt;/strong&gt; с использованием &lt;strong&gt;boto3&lt;/strong&gt; для получения списка всех S3-бакетов в AWS-аккаунте с указанием их размеров.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;c49c&quot;&gt;После осле выполнения около 70% кода интервьюер попросил объяснить мой подход и задал несколько дополнительных вопросов, чтобы проверить понимание.&lt;/p&gt;
  &lt;h2 id=&quot;8f44&quot;&gt;&lt;strong&gt;Второй раунд — собеседование на должность SRE-специалиста.&lt;/strong&gt;&lt;/h2&gt;
  &lt;p id=&quot;QgP8&quot;&gt;В этом раунде основной упор делался на практики SRE и наблюдаемость (observability). &lt;/p&gt;
  &lt;p id=&quot;e88b&quot;&gt; Мне предоставили архитектуру следующего вида:&lt;br /&gt;&lt;code&gt;Client -&amp;gt; Load Balancer -&amp;gt; Web Tier -&amp;gt; DB Tier -&amp;gt; Messaging Queue -&amp;gt; SMTP -&amp;gt; Process&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;2347&quot;&gt;Интервьюер попросил реализовать лучшие практики SRE в этой системе. Обсуждение длилось &lt;strong&gt;1 час&lt;/strong&gt; и касалось мониторинга, надежности и методов построения отказоустойчивой архитектуры.&lt;/p&gt;
  &lt;h2 id=&quot;e50e&quot;&gt;&lt;strong&gt;Третий этап — Техническое собеседование&lt;/strong&gt;&lt;/h2&gt;
  &lt;p id=&quot;9f04&quot;&gt;В третьем раунде проверялись более глубокие технические знания:&lt;/p&gt;
  &lt;ul id=&quot;WTCz&quot;&gt;
    &lt;li id=&quot;1888&quot;&gt;Настройка &lt;strong&gt;Istio&lt;/strong&gt; для кластера Kubernetes.&lt;/li&gt;
    &lt;li id=&quot;5cda&quot;&gt;Создание &lt;strong&gt;AWS EventBridge&lt;/strong&gt; с помощью Terraform.&lt;/li&gt;
    &lt;li id=&quot;51ef&quot;&gt;Добавление &lt;strong&gt;аннотаций и меток&lt;/strong&gt; к существующему Pod.&lt;/li&gt;
    &lt;li id=&quot;f5f6&quot;&gt;Проектирование &lt;strong&gt;кластера Kubernetes с использованием Ingress&lt;/strong&gt;.&lt;/li&gt;
    &lt;li id=&quot;95dd&quot;&gt;Обработка внезапного всплеска трафика, приводящего к зависанию веб-приложения.&lt;/li&gt;
    &lt;li id=&quot;d6aa&quot;&gt;Развертывание Pod с &lt;code&gt;replica set = 3&lt;/code&gt;, работающим на контейнере &lt;code&gt;apache httpd&lt;/code&gt;.&lt;/li&gt;
    &lt;li id=&quot;53d5&quot;&gt;Уменьшение размера &lt;strong&gt;Dockerfile&lt;/strong&gt;.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;8fbb&quot;&gt;В этом раунде оценивались как &lt;strong&gt;архитектурные навыки, так и практическое решение задач в облачной и контейнеризированной среде.&lt;/strong&gt;&lt;/p&gt;
  &lt;h2 id=&quot;7b01&quot;&gt;&lt;strong&gt;4-й раунд — Менеджерский/технический раунд&lt;/strong&gt;&lt;/h2&gt;
  &lt;p id=&quot;6076&quot;&gt;Я ожидал вопросов исключительно управленческого характера, но этот раунд оказался на &lt;strong&gt;60% техническим&lt;/strong&gt;. Темы включали &lt;strong&gt;Docker, Java, инфраструктуру, Terraform&lt;/strong&gt; и другие основные инструменты DevOps, проверяя глубину технических знаний, так и управленческое понимание.&lt;/p&gt;
  &lt;h2 id=&quot;fc53&quot;&gt;&lt;strong&gt;Основные выводы из моего собеседования в Cisco:&lt;/strong&gt;&lt;/h2&gt;
  &lt;ul id=&quot;tr0U&quot;&gt;
    &lt;li id=&quot;4f96&quot;&gt;Подготовьтесь к изучению &lt;strong&gt;концепций программирования, облачных технологий и SRE&lt;/strong&gt; одновременно.&lt;/li&gt;
    &lt;li id=&quot;fad2&quot;&gt;Будьте готовы к &lt;strong&gt;практическим техническим обсуждениям&lt;/strong&gt;, даже на встречах с руководством.&lt;/li&gt;
    &lt;li id=&quot;9dec&quot;&gt;Для руководящих должностей в сфере DevOps/SRE необходимы практические знания &lt;strong&gt;Docker, Kubernetes, Terraform и AWS.&lt;/strong&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;a575&quot;&gt;Собеседование в Cisco было &lt;strong&gt;строгим, но справедливым&lt;/strong&gt;, с акцентом как на технические знания, так и на навыки решения проблем.&lt;/p&gt;
  &lt;p id=&quot;b6de&quot;&gt;Это был отличный опыт, который подчеркнул важность подготовки, уверенности и ясности в коммуникации.&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;uPqw&quot;&gt;Подписывайтесь на телеграм-канал &lt;a href=&quot;https://t.me/monitorim_it&quot; target=&quot;_blank&quot;&gt;Мониторим ИТ&lt;/a&gt;, там еще больше полезной информации о мониторинге!&lt;/p&gt;
  &lt;/section&gt;

</content></entry><entry><id>monitorim_it:otel-collector-vs-grafana-alloy</id><link rel="alternate" type="text/html" href="https://teletype.in/@monitorim_it/otel-collector-vs-grafana-alloy?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=monitorim_it"></link><title>Разбираем конвейеры OpenTelemetry Collector: стандартный OTel vs. Grafana Alloy — Часть 1</title><published>2026-03-01T21:27:05.587Z</published><updated>2026-03-01T21:27:05.587Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/93/f4/93f418ce-5289-4b26-8d6e-9100607440ae.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/1*8DAS4q7EKhOgjPD26sdG0A.png&quot;&gt;Это перевод оригинальной статьи Demystifying OpenTelemetry Collector Pipelines: Standard OTel vs. Grafana Alloy — Part 1.</summary><content type="html">
  &lt;section style=&quot;background-color:hsl(hsl(24,  24%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;JrGj&quot;&gt;Это перевод оригинальной статьи &lt;a href=&quot;https://medium.com/@pankajhasija2109/demystifying-opentelemetry-collector-pipelines-standard-otel-vs-grafana-alloy-part-1-aba66277bc58&quot; target=&quot;_blank&quot;&gt;Demystifying OpenTelemetry Collector Pipelines: Standard OTel vs. Grafana Alloy — Part 1&lt;/a&gt;.&lt;/p&gt;
  &lt;/section&gt;
  &lt;section style=&quot;background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;yUe4&quot;&gt;Перевод сделан специально для телеграм-канала &lt;a href=&quot;https://t.me/monitorim_it&quot; target=&quot;_blank&quot;&gt;Мониторим ИТ.&lt;/a&gt; Подписывайтесь! Там еще больше полезных постов о мониторинге.&lt;/p&gt;
  &lt;/section&gt;
  &lt;p id=&quot;b96a&quot;&gt;&lt;strong&gt;Введение&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;7ef5&quot;&gt;В современных системах наблюдаемости данные телеметрии (трейсы, метрики и логи) должны надежно передаваться из приложений в бэкэнды, такие как Tempo, Mimir или Loki. &lt;strong&gt;OpenTelemetry Collector&lt;/strong&gt; эффективно справляется с этой задачей, а &lt;strong&gt;Grafana Alloy&lt;/strong&gt; (мощный дистрибутив от Grafana) добавляет &lt;strong&gt;расширенную гибкость и дополнительные возможности управления&lt;/strong&gt;.&lt;/p&gt;
  &lt;p id=&quot;3699&quot;&gt;В этой статье подробно разбираются основные концепции, конфигурации и различия между этими решениями — с примерами кода, официальными диаграммами и подробными пояснениями.&lt;/p&gt;
  &lt;p id=&quot;f2b3&quot;&gt;&lt;strong&gt;Понятная аналогия: система обработки багажа в аэропорту&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;5d88&quot;&gt;Телеметрические данные подобны &lt;strong&gt;багажу пассажира&lt;/strong&gt; — они должны добраться от стойки регистрации (приложения) до нужного рейса (системы наблюдаемости) без риска потери.&lt;/p&gt;
  &lt;p id=&quot;FEe9&quot;&gt;&lt;br /&gt;&lt;strong&gt;Grafana Alloy&lt;/strong&gt; — это современная интеллектуальная система обработки багажа с программируемыми развилками и маршрутизацией в реальном времени: высокоскоростные автоматизированные сортировщики, RFID-отслеживание и программно-управляемые шлюзы позволяют динамически изменять маршрут, распределяя багаж по нескольким рейсам (fan-out), объединяя багаж с разных мест регистрации или мгновенно перенаправляя его в случае задержек. Идеально подходит для загруженных, постоянно развивающихся аэропортов.&lt;/p&gt;
  &lt;figure id=&quot;Gha2&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/1*8DAS4q7EKhOgjPD26sdG0A.png&quot; width=&quot;700&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;635c&quot;&gt;&lt;strong&gt;Стандартный OpenTelemetry Collector&lt;/strong&gt; представляет собой &lt;strong&gt;традиционную систему с фиксированной конвейерной лентой&lt;/strong&gt;: заранее определенные ленты, разделенные по терминалам (signal type), механические сортировщики и линейные пути от стоек регистрации (receivers) через сканеры (processors) к фиксированным каруселям (exporters). Надежен для стандартных операций, но изменения потребуют серьезной переработки конструкции.&lt;/p&gt;
  &lt;figure id=&quot;Qrc5&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/1*LxuaMDh52E-n9ZFDSrGzXA.png&quot; width=&quot;700&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;3536&quot;&gt;Коннекторы? Например, специальные соединительные ленты, соединяющие клеммы.&lt;/p&gt;
  &lt;figure id=&quot;EN34&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/1*d3s-8HYmluNNA6ENyWorrQ.png&quot; width=&quot;700&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;1892&quot;&gt;&lt;strong&gt;Основные компоненты&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;b66c&quot;&gt;Обе программы используют общие компоненты OpenTelemetry:&lt;/p&gt;
  &lt;ul id=&quot;Cu8Y&quot;&gt;
    &lt;li id=&quot;a547&quot;&gt;&lt;strong&gt;Receivers&lt;/strong&gt; — стойки регистрации (приём данных: otlp, prometheus, jaeger).&lt;/li&gt;
    &lt;li id=&quot;6b98&quot;&gt;&lt;strong&gt;Processors&lt;/strong&gt; — сканеры/фильтры безопасности (обработка и трансформация: batch, memory_limiter, attributes).&lt;/li&gt;
    &lt;li id=&quot;ae8b&quot;&gt;&lt;strong&gt;Exporters&lt;/strong&gt; — погрузочные ленты/карусели (отправка данных: otlp, prometheus, loki).&lt;/li&gt;
    &lt;li id=&quot;40e2&quot;&gt;&lt;strong&gt;Connectors&lt;/strong&gt; — мосты передачи (маршрут между сигналами, например, трейсы → метрики).&lt;/li&gt;
    &lt;li id=&quot;51b9&quot;&gt;&lt;strong&gt;Extensions&lt;/strong&gt; — утилиты для аэропорта (health_check, pprof).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;5173&quot;&gt;&lt;strong&gt;Стандартный OpenTelemetry Collector: линейные YAML-пайплайны&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;IUUv&quot;&gt;Как фиксированные конвейерные ленты — пайплайны определяются &lt;strong&gt;по типу сигнала&lt;/strong&gt; в service.pipelines.&lt;/p&gt;
  &lt;figure id=&quot;QQTz&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/1*cv7sfv1Lj181jpigo9AgBg.png&quot; width=&quot;700&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;dd5e&quot;&gt;Простой пример&lt;/p&gt;
  &lt;pre id=&quot;Rhy3&quot; data-lang=&quot;bash&quot;&gt;receivers:
  otlp:
    protocols:
      grpc: {}
      http: {}

processors:
  batch: {}
  memory_limiter:
    check_interval: 1s
    limit_percentage: 75

exporters:
  otlp:
    endpoint: &amp;quot;tempo:4317&amp;quot;

service:
  pipelines:
    traces:
      receivers: [otlp]
      processors: [memory_limiter, batch]
      exporters: [otlp]&lt;/pre&gt;
  &lt;figure id=&quot;bPqi&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/1*UNLhCJTwfF_ZV5PXCmO7Qw.png&quot; width=&quot;700&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;4b81&quot;&gt;&lt;strong&gt;Grafana Alloy: Программируемая River Wiring&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;94fn&quot;&gt;Как интеллектуальные программируемые сортировщики — явные соединения компонентов через блоки &lt;code&gt;output&lt;/code&gt;.&lt;/p&gt;
  &lt;p id=&quot;e652&quot;&gt;&lt;strong&gt;Grafana Alloy&lt;/strong&gt; — это дистрибутив Grafana &lt;strong&gt;на основе OpenTelemetry Collector&lt;/strong&gt;, полностью совместимая с OTLP, с добавленными Prometheus-нативными пайплайнами, кластеризацией и программируемым синтаксисом. Вместо YAML используется язык конфигурации &lt;strong&gt;River&lt;/strong&gt; (похожий на Terraform / HCL).&lt;/p&gt;
  &lt;p id=&quot;c49d&quot;&gt;Grafana Alloy построена на основе OpenTelemetry Collector и использует обертки otelcol.* для стандартных компонентов (otelcol.receiver.otlp, otelcol.processor.batch и т. д.). Это означает, что ваши существующие знания OpenTelemetry переносятся без проблем — вы просто получаете более выразительный язык конфигурации.&lt;/p&gt;
  &lt;p id=&quot;cec5&quot;&gt;Компоненты OTel имеют префикс otelcol.&lt;/p&gt;
  &lt;ul id=&quot;2fRS&quot;&gt;
    &lt;li id=&quot;7219&quot;&gt;Приёмники: otelcol.receiver.* (например, otelcol.receiver.otlp)&lt;/li&gt;
    &lt;li id=&quot;7e19&quot;&gt;Обработчики: otelcol.processor.* (например, otelcol.processor.batch)&lt;/li&gt;
    &lt;li id=&quot;2910&quot;&gt;Экспортеры: otelcol.exporter.* (например, otelcol.exporter.otlp)&lt;/li&gt;
    &lt;li id=&quot;3c6b&quot;&gt;Коннекторы: otelcol.connector.*&lt;/li&gt;
    &lt;li id=&quot;3c52&quot;&gt;Расширения: otelcol.extension.*&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;6132&quot;&gt;&lt;strong&gt;Как соединяются компоненты в Alloy&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;L6hb&quot;&gt;
    &lt;li id=&quot;7663&quot;&gt;Нет глобального раздела &lt;code&gt;service&lt;/code&gt; или &lt;code&gt;pipelines&lt;/code&gt;, как в стандартном OTel&lt;/li&gt;
    &lt;li id=&quot;b1b4&quot;&gt;Компоненты объявляются по отдельности (с метками, например, «default»).&lt;/li&gt;
    &lt;li id=&quot;9bcf&quot;&gt;Соединения задаются явно через блоки &lt;code&gt;output&lt;/code&gt; и ссылки на &lt;code&gt;.input&lt;/code&gt; следующего компонента&lt;/li&gt;
    &lt;li id=&quot;4ac5&quot;&gt;Передача данных осуществляется путем соединения выходов с входами, часто для каждого сигнала отдельно (метрики, логи, трейсы).&lt;/li&gt;
    &lt;li id=&quot;1f2b&quot;&gt;Это позволяет создавать гибкие, программируемые пайплайны: (fan-out, условная маршрутизация, смешивание с компонентами Prometheus).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;c319&quot;&gt;Базовый эквивалент&lt;/p&gt;
  &lt;pre id=&quot;ActU&quot; data-lang=&quot;bash&quot;&gt;otelcol.receiver.otlp &amp;quot;default&amp;quot; {
  grpc { endpoint = &amp;quot;0.0.0.0:4317&amp;quot; }
  http { endpoint = &amp;quot;0.0.0.0:4318&amp;quot; }

  output {
    traces = [otelcol.processor.memory_limiter.default.input]
  }
}

otelcol.processor.memory_limiter &amp;quot;default&amp;quot; {
  output { traces = [otelcol.processor.batch.default.input] }
}

otelcol.processor.batch &amp;quot;default&amp;quot; {
  output { traces = [otelcol.exporter.otlp.tempo.input] }
}

otelcol.exporter.otlp &amp;quot;tempo&amp;quot; {
  client { endpoint = &amp;quot;tempo:4317&amp;quot; }
}&lt;/pre&gt;
  &lt;p id=&quot;6ac9&quot;&gt;Пример fan-out (отправка в несколько бэкендов)&lt;/p&gt;
  &lt;pre id=&quot;vfcT&quot; data-lang=&quot;bash&quot;&gt;otelcol.processor.batch &amp;quot;default&amp;quot; {
  output {
    traces = [otelcol.exporter.otlp.tempo.input, otelcol.exporter.otlp.backup.input]
  }
}&lt;/pre&gt;
  &lt;figure id=&quot;kmXx&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/1*YeccpoUFFwUPEoDQ-0-ejg.png&quot; width=&quot;700&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;8b62&quot;&gt;&lt;strong&gt;Сравнительный анализ:&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;73a0&quot;&gt;Стандартный OpenTelemetry Collector (Линейные пайплайны, разделенные по типам сигналов) против Grafana Alloy (Явная программируемая разводка с поддержкой fan-out).&lt;/p&gt;
  &lt;figure id=&quot;WGkI&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/1*A9JdAHxKwY0t5VWUqiTopg.png&quot; width=&quot;700&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;Xz0H&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/1*PcGt3apZIlFQciH5l29l9g.png&quot; width=&quot;700&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;fd24&quot;&gt;&lt;strong&gt;Когда что выбрать?&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;hVpU&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/1*iAZfxmy0xCiFyiHCGhXxHg.png&quot; width=&quot;700&quot; /&gt;
  &lt;/figure&gt;
  &lt;ul id=&quot;ohbP&quot;&gt;
    &lt;li id=&quot;ad01&quot;&gt;Стандартный OTel → Простые, независимые от поставщика настройки.&lt;/li&gt;
    &lt;li id=&quot;21e5&quot;&gt;Grafana Alloy → стек Grafana, сложная маршрутизация, кластеризация.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;eaf2&quot;&gt;&lt;strong&gt;Общие советы&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;Gs0b&quot;&gt;
    &lt;li id=&quot;e1f9&quot;&gt;Всегда размещайте &lt;code&gt;memory_limiter&lt;/code&gt; первым в пайплайне&lt;/li&gt;
    &lt;li id=&quot;07b3&quot;&gt;Используйте пользовательский интерфейс Alloy для отладки пайплайнов.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;570f&quot;&gt;&lt;strong&gt;В заключение следует отметить&lt;/strong&gt;, что, подобно тому как хорошо организованный аэропорт гарантирует, что каждый чемодан доберется до нужного пункта назначения — эффективно, надежно и вовремя, несмотря на задержки, высокий трафик или неожиданные перенаправления, — так и грамотно настроенный пайплайн OpenTelemetry Collector обеспечивает доставку трейсов, метрик и логов, которые поступят в ваши бэкэнды мониторинга в целостном, обогащенном виде и готовыми к анализу.&lt;br /&gt;Стандартный &lt;strong&gt;OpenTelemetry Collector&lt;/strong&gt; предлагает надежность классических стационарных конвейерных систем: он прост в использовании, не зависит от поставщика и проверен в реальных условиях, где минимализм и чистота архитектуры имеют первостепенное значение.&lt;/p&gt;
  &lt;p id=&quot;b884&quot;&gt;&lt;strong&gt;Однако Grafana Alloy&lt;/strong&gt; поднимает все это на уровень современной интеллектуальной инфраструктуры — программируемые маршрутизаторы, визуализация пайплайнов через встроенный пользовательский интерфейс (:12345/graph), возможности разветвления, встроенная интеграция с Prometheus и кластеризация для масштабирования. Это очевидный выбор, если вы глубоко используете стек Grafana (Mimir, Loki, Tempo) или вам нужна максимальная гибкость без управления множеством агентов.&lt;/p&gt;
  &lt;p id=&quot;Sxxp&quot;&gt;Независимо от выбора — классической надежности OTel или интеллектуальной адаптивности Alloy — владение этими пайплайнами позволяет строить устойчивые, перспективные системы мониторинга.&lt;/p&gt;
  &lt;p id=&quot;a8f1&quot;&gt;Начните с малого, экспериментируйте локально и обязательно используйте интерактивный граф Alloy — он действительно открывает глаза.&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;7m64&quot;&gt;Подписывайтесь на телеграм-канал &lt;a href=&quot;https://t.me/monitorim_it&quot; target=&quot;_blank&quot;&gt;Мониторим ИТ&lt;/a&gt;, там еще больше полезной информации о мониторинге!&lt;/p&gt;
  &lt;/section&gt;

</content></entry><entry><id>monitorim_it:logstash-monitoring-within-prometheus</id><link rel="alternate" type="text/html" href="https://teletype.in/@monitorim_it/logstash-monitoring-within-prometheus?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=monitorim_it"></link><title>Создание системы мониторинга Logstash с использованием Prometheus и Grafana (пошаговое руководство)</title><published>2025-12-26T10:26:17.358Z</published><updated>2025-12-26T10:32:07.091Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img1.teletype.in/files/cd/33/cd33a055-1aca-4a3f-bda7-2d298dea8a9d.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/1*MnJYV3X9vVfh65J3tF53zw.png&quot;&gt;Это перевод оригинальной статьи Building a Logstash Monitoring Stack with Prometheus and Grafana (Step-by-Step Guide).</summary><content type="html">
  &lt;section style=&quot;background-color:hsl(hsl(24,  24%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;yuqC&quot;&gt;Это перевод оригинальной статьи &lt;a href=&quot;https://medium.com/@yashpateld22d/building-a-logstash-monitoring-stack-with-prometheus-and-grafana-step-by-step-guide-d99be702a71e&quot; target=&quot;_blank&quot;&gt;Building a Logstash Monitoring Stack with Prometheus and Grafana (Step-by-Step Guide)&lt;/a&gt;.&lt;/p&gt;
  &lt;/section&gt;
  &lt;section style=&quot;background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;2fK5&quot;&gt;Перевод сделан специально для телеграм-канала &lt;a href=&quot;https://t.me/monitorim_it&quot; target=&quot;_blank&quot;&gt;Мониторим ИТ.&lt;/a&gt; Подписывайтесь! Там еще больше полезных постов о мониторинге.&lt;/p&gt;
  &lt;/section&gt;
  &lt;p id=&quot;6626&quot;&gt;Когда вы работаете со сложными пайплайнами, управляемыми Logstash, наблюдаемость — это не опция, а необходимость. Без мониторинга небольшое изменение конфигурации или перегруженный input могут привести к тому, что ваши логи и метрики начнут тихо накапливаться, что нанесёт ущерб нижестоящим системам. Эта статья поможет создать &lt;strong&gt;стек мониторинга Logstash&lt;/strong&gt; с использованием &lt;strong&gt;Prometheus&lt;/strong&gt;, &lt;strong&gt;Grafana&lt;/strong&gt; и &lt;strong&gt;prometheus-logstash-exporter,&lt;/strong&gt; чтобы вы всегда знали, как работают ваши конвейеры Logstash.&lt;/p&gt;
  &lt;h2 id=&quot;3739&quot;&gt;Постановка проблемы&lt;/h2&gt;
  &lt;p id=&quot;8e8b&quot;&gt;Logstash — мощный инструмент для сбора, преобразования и передачи данных. Однако по мере роста объемов данных могут возникать такие проблемы, как:&lt;/p&gt;
  &lt;ul id=&quot;e1vy&quot;&gt;
    &lt;li id=&quot;8160&quot;&gt;Внезапные падения &lt;strong&gt;пропускной способности&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;a3fb&quot;&gt;Увеличение &lt;strong&gt;задержки пайплайна&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;8b62&quot;&gt;&lt;strong&gt;Утечки памяти в JVM&lt;/strong&gt; или чрезмерное накопление мусора (GC)&lt;/li&gt;
    &lt;li id=&quot;69bd&quot;&gt;Высокая &lt;strong&gt;загрузка CPU&lt;/strong&gt; приводит к потере сообщений.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;fff1&quot;&gt;Эти проблемы часто остаются незамеченными до тех пор, пока ваш пайплайн данных не перестанет работать должным образом. Цель этого стека мониторинга — обеспечить &lt;strong&gt;видимость показателей производительности Logstash в режиме реального времени&lt;/strong&gt;, чтобы вы могли быстро обнаруживать, диагностировать и устранять проблемы.&lt;/p&gt;
  &lt;h2 id=&quot;ac85&quot;&gt;Почему необходим мониторинг?&lt;/h2&gt;
  &lt;p id=&quot;eb83&quot;&gt;Мониторинг имеет решающее значение для поддержания работоспособности инфраструктуры данных. Вот почему:&lt;/p&gt;
  &lt;ul id=&quot;Q08i&quot;&gt;
    &lt;li id=&quot;e222&quot;&gt;&lt;strong&gt;Оптимизация производительности:&lt;/strong&gt; выявление медленных пайплайнов или фильтров, влияющих на пропускную способность.&lt;/li&gt;
    &lt;li id=&quot;5427&quot;&gt;&lt;strong&gt;Планирование ресурсов:&lt;/strong&gt; анализ тенденций использования памяти и процессора для эффективного распределения ресурсов.&lt;/li&gt;
    &lt;li id=&quot;126f&quot;&gt;&lt;strong&gt;Устранение неполадок:&lt;/strong&gt; выявление узких мест до того, как они повлияют на критически важную для бизнеса аналитику.&lt;/li&gt;
    &lt;li id=&quot;c9b7&quot;&gt;&lt;strong&gt;Надежность:&lt;/strong&gt; обеспечение бесперебойной работы и предотвращение потери данных в периоды высокой нагрузки.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;ac4f&quot;&gt;Инструменты, используемые в этом стеке&lt;/h2&gt;
  &lt;p id=&quot;9911&quot;&gt;Данная конфигурация использует несколько инструментов с открытым исходным кодом, которые бесперебойно взаимодействуют друг с другом:&lt;/p&gt;
  &lt;h3 id=&quot;b847&quot;&gt;Logstash&lt;/h3&gt;
  &lt;ul id=&quot;oQU2&quot;&gt;
    &lt;li id=&quot;3ebc&quot;&gt;&lt;strong&gt;Что это:&lt;/strong&gt; конвейер обработки данных, который получает данные из множества источников, преобразует их и отправляет в такие целевые системы, как Elasticsearch или Kafka.&lt;/li&gt;
    &lt;li id=&quot;e742&quot;&gt;&lt;strong&gt;Зачем это нужно:&lt;/strong&gt; это ключевой компонент стека ELK, но его внутренние метрики (такие как скорость обработки событий, размер очереди, показатели JVM) должны быть открыты для внешнего мониторинга.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;7eaf&quot;&gt;Prometheus&lt;/h3&gt;
  &lt;ul id=&quot;Pg4z&quot;&gt;
    &lt;li id=&quot;3861&quot;&gt;&lt;strong&gt;Что это:&lt;/strong&gt; база данных временных рядов, предназначенная для мониторинга и оповещения.&lt;/li&gt;
    &lt;li id=&quot;fcb0&quot;&gt;&lt;strong&gt;Почему используется:&lt;/strong&gt; Prometheus собирает метрики от экспортеров и эффективно их хранит. Он позволяет выполнять гибкие запросы с использованием PromQL и поддерживает оповещения.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;0596&quot;&gt;Prometheus-logstash-exporter&lt;/h3&gt;
  &lt;ul id=&quot;dOZk&quot;&gt;
    &lt;li id=&quot;bf0b&quot;&gt;&lt;strong&gt;Что это:&lt;/strong&gt; небольшой сервис, который получает метрики из API мониторинга Logstash и предоставляет их в формате Prometheus.&lt;/li&gt;
    &lt;li id=&quot;9c08&quot;&gt;&lt;strong&gt;Почему используется:&lt;/strong&gt; Prometheus не может напрямую опрашивать Logstash, поэтому этот экспортер устраняет эту проблему.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;e4b0&quot;&gt;Grafana&lt;/h3&gt;
  &lt;ul id=&quot;yTIW&quot;&gt;
    &lt;li id=&quot;61f5&quot;&gt;&lt;strong&gt;Что это:&lt;/strong&gt; платформа для визуализации данных, предназначенная для создания дашбордов и аналитических отчетов.&lt;/li&gt;
    &lt;li id=&quot;4696&quot;&gt;&lt;strong&gt;Почему используется:&lt;/strong&gt; Grafana подключается к Prometheus и предоставляет многофункциональные дашборды для визуализации метрик, тенденций и аномалий Logstash.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;001a&quot;&gt;Docker и Docker Compose&lt;/h3&gt;
  &lt;ul id=&quot;2ceJ&quot;&gt;
    &lt;li id=&quot;cbc3&quot;&gt;&lt;strong&gt;Что это:&lt;/strong&gt; инструменты для контейнеризации и оркестрации приложений.&lt;/li&gt;
    &lt;li id=&quot;7b2f&quot;&gt;&lt;strong&gt;Почему их используют:&lt;/strong&gt; они упрощают развёртывание — одной командой запускаются все компоненты (Prometheus, экспортер, Grafana) в изолированных контейнерах.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;d07c&quot;&gt;Настройка проекта&lt;/h2&gt;
  &lt;p id=&quot;fe15&quot;&gt;Клонируйте репозиторий:&lt;/p&gt;
  &lt;pre id=&quot;JdMb&quot; data-lang=&quot;bash&quot;&gt;git clone https://github.com/yash22091/logstash-monitoring-stack.git
cd logstash-monitoring-stack/ls-monitor&lt;/pre&gt;
  &lt;p id=&quot;4304&quot;&gt;Если у вас zip-архив:&lt;/p&gt;
  &lt;pre id=&quot;ZHnV&quot; data-lang=&quot;bash&quot;&gt;unzip logstash-monitor.zip &amp;amp;&amp;amp; cd logstash-monitor/ls-monitor&lt;/pre&gt;
  &lt;h2 id=&quot;17dc&quot;&gt;Конфигурация окружения&lt;/h2&gt;
  &lt;p id=&quot;56b2&quot;&gt;Скопируйте пример файла окружения:&lt;/p&gt;
  &lt;pre id=&quot;5Fom&quot; data-lang=&quot;bash&quot;&gt;cp .env.example .env&lt;/pre&gt;
  &lt;p id=&quot;114b&quot;&gt;Настройте переменные среды:&lt;/p&gt;
  &lt;pre id=&quot;nxWB&quot; data-lang=&quot;bash&quot;&gt;LS_HOST=172.17.0.1  # IP of host running Logstash (avoid 127.0.0.1)
LS_PORT=9600
EXPORTER_PORT=9304
PROM_PORT=9090
GRAFANA_PORT=3001
GF_ADMIN_USER=admin
GF_ADMIN_PASSWORD=admin&lt;/pre&gt;
  &lt;h2 id=&quot;7629&quot;&gt;Обзор Docker Compose&lt;/h2&gt;
  &lt;p id=&quot;9305&quot;&gt;Файл &lt;code&gt;docker-compose.yml&lt;/code&gt; определяет три контейнера:&lt;/p&gt;
  &lt;ol id=&quot;pzUz&quot;&gt;
    &lt;li id=&quot;4077&quot;&gt;&lt;strong&gt;prometheus-logstash-exporter&lt;/strong&gt; — подключается к Logstash и предоставляет доступ к метрикам.&lt;/li&gt;
    &lt;li id=&quot;8398&quot;&gt;&lt;strong&gt;Prometheus&lt;/strong&gt; — собирает данные каждые 15 секунд.&lt;/li&gt;
    &lt;li id=&quot;ba83&quot;&gt;&lt;strong&gt;Grafana&lt;/strong&gt; — предоставляет дашборды для визуализации данных.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;4cad&quot;&gt;Запустите стек:&lt;/p&gt;
  &lt;pre id=&quot;Vbr7&quot; data-lang=&quot;bash&quot;&gt;docker compose --env-file .env up -d&lt;/pre&gt;
  &lt;figure id=&quot;R2L6&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/1*MnJYV3X9vVfh65J3tF53zw.png&quot; width=&quot;700&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;8946&quot;&gt;Получите доступ к пользовательским интерфейсам:&lt;/p&gt;
  &lt;ul id=&quot;8993&quot;&gt;
    &lt;li id=&quot;1401&quot;&gt;Prometheus → &lt;a href=&quot;http://localhost:9090/&quot; target=&quot;_blank&quot;&gt;http://localhost:9090&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;38b3&quot;&gt;Grafana → &lt;a href=&quot;http://localhost:3001/&quot; target=&quot;_blank&quot;&gt;http://localhost:3001&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;figure id=&quot;vqwB&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/1*OO6-TRBSCt531ItnUfFb9A.png&quot; width=&quot;700&quot; /&gt;
    &lt;figcaption&gt;LoginScreen&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;qoAU&quot;&gt;Логин:&lt;code&gt;admin / admin&lt;/code&gt;&lt;br /&gt;Затем система попросит изменить пароль по умолчанию&lt;/p&gt;
  &lt;h2 id=&quot;8ffa&quot;&gt;Импорт дашборда Grafana&lt;/h2&gt;
  &lt;p id=&quot;64ba&quot;&gt;Для визуализации данных:&lt;/p&gt;
  &lt;ol id=&quot;gCfS&quot;&gt;
    &lt;li id=&quot;ebb5&quot;&gt;Перейдите в Grafana → &lt;strong&gt;Dashboards → Import&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;c1bf&quot;&gt;Введите ID дашборда&lt;strong&gt;: 17918&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;96b6&quot;&gt;Нажмите Load → выберите Prometheus как источник данных → Import&lt;/li&gt;
  &lt;/ol&gt;
  &lt;figure id=&quot;UWZM&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/1*HmkVu7Emh0ky5R1IymYSmw.png&quot; width=&quot;700&quot; /&gt;
    &lt;figcaption&gt;Импорт&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;j5VE&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/1*9Z-zvQieLWosohVJPDA-xQ.png&quot; width=&quot;700&quot; /&gt;
    &lt;figcaption&gt;Выберите источник данных&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;f91c&quot;&gt;если это не происходит автоматически&lt;/p&gt;
  &lt;p id=&quot;674f&quot;&gt;Затем установите:&lt;/p&gt;
  &lt;ul id=&quot;bFDh&quot;&gt;
    &lt;li id=&quot;e791&quot;&gt;&lt;code&gt;job = logstash&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;93da&quot;&gt;&lt;code&gt;instance = logstash-exporter:9304&lt;/code&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;8271&quot;&gt;Вы увидите дашборды для:&lt;/p&gt;
  &lt;ul id=&quot;4DTV&quot;&gt;
    &lt;li id=&quot;bce2&quot;&gt;Частота событий (input, filtered, output)&lt;/li&gt;
    &lt;li id=&quot;992c&quot;&gt;Использование JVM Heap&lt;/li&gt;
    &lt;li id=&quot;8ef8&quot;&gt;Статистика сбора мусора (GC)&lt;/li&gt;
    &lt;li id=&quot;d4b4&quot;&gt;Использование CPU и задержка пайплайнов&lt;/li&gt;
  &lt;/ul&gt;
  &lt;figure id=&quot;uhuS&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/1*SRlVXZEspuGn-XpKDckqjg.png&quot; width=&quot;700&quot; /&gt;
    &lt;figcaption&gt;Общий&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;YXpc&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/1*AM5AD1cRV_ZgrbIenGcg-A.png&quot; width=&quot;700&quot; /&gt;
    &lt;figcaption&gt;Использование JVM&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;5Tqr&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/1*zwihC69HNM7FhKO72FnrTg.png&quot; width=&quot;700&quot; /&gt;
    &lt;figcaption&gt;Краткий обзор событий&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;W3V8&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/1*BzDec8lJTNnTjmZ4vnIDUQ.png&quot; width=&quot;700&quot; /&gt;
    &lt;figcaption&gt;Трубопровод&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;yMLo&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/1*BjBUckHdxLpbJtGO7pS_PQ.png&quot; width=&quot;700&quot; /&gt;
    &lt;figcaption&gt;Фильтры конвейера&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;95b1&quot;&gt;Как это работает&lt;/h2&gt;
  &lt;pre id=&quot;12sC&quot; data-lang=&quot;bash&quot;&gt;Logstash (9600) → prometheus-logstash-exporter (9304) → Prometheus (9090) → Grafana (3001)&lt;/pre&gt;
  &lt;ul id=&quot;w5Wo&quot;&gt;
    &lt;li id=&quot;923e&quot;&gt;Экспортер использует API мониторинга Logstash для сбора данных.&lt;/li&gt;
    &lt;li id=&quot;e9b5&quot;&gt;Prometheus получает метрики от экспортера.&lt;/li&gt;
    &lt;li id=&quot;7913&quot;&gt;Grafana визуализирует эти метрики в режиме реального времени.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;e61d&quot;&gt;Устранение неполадок&lt;/h2&gt;
  &lt;p id=&quot;822f&quot;&gt;&lt;strong&gt;Экспортер не работает?&lt;/strong&gt; Проверьте, что &lt;code&gt;LS_HOST&lt;/code&gt; — не &lt;code&gt;127.0.0.1&lt;/code&gt;.&lt;/p&gt;
  &lt;p id=&quot;64a4&quot;&gt;&lt;strong&gt;Grafana не отображает данные?&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;RfMA&quot;&gt;
    &lt;li id=&quot;a130&quot;&gt;Откройте Prometheus → Status → Targets → убедитесь, что все они активны.&lt;/li&gt;
    &lt;li id=&quot;0a21&quot;&gt;Выполните:&lt;/li&gt;
  &lt;/ul&gt;
  &lt;pre id=&quot;6prX&quot; data-lang=&quot;bash&quot;&gt;curl http://localhost:9304/metrics | head&lt;/pre&gt;
  &lt;p id=&quot;0c20&quot;&gt;&lt;strong&gt;Конфликты портов?&lt;/strong&gt; Отредактируйте &lt;code&gt;.env&lt;/code&gt; и перезапустите стек.&lt;/p&gt;
  &lt;h2 id=&quot;5b92&quot;&gt;Варианты использования и сценарии&lt;/h2&gt;
  &lt;p id=&quot;ec97&quot;&gt;Этот набор идеально подходит для:&lt;/p&gt;
  &lt;ul id=&quot;YAw7&quot;&gt;
    &lt;li id=&quot;9aa6&quot;&gt;Мониторинга производительности и пропускной способности пайплайнов&lt;strong&gt; Logstash в боевой среде.&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;db01&quot;&gt;&lt;strong&gt;Dev-сред &lt;/strong&gt;— быстрый тест изменений конфигурации и визуализация эффекта.&lt;/li&gt;
    &lt;li id=&quot;ccd3&quot;&gt;&lt;strong&gt;Реагирование на инциденты&lt;/strong&gt; — устранить неполадки медленной загрузки данных или заблокированных пайплайнов.&lt;/li&gt;
    &lt;li id=&quot;968f&quot;&gt;&lt;strong&gt;Планирование  ресурсов &lt;/strong&gt;— отслеживайте тренды, прежде чем масштабировать окружение.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;ee2b&quot;&gt;Он легковесный, полностью контейнеризированный и может быть расширен другими экспортерами (например, Elasticsearch, Node Exporter или Alertmanager).&lt;/p&gt;
  &lt;h2 id=&quot;9921&quot;&gt;Заключение&lt;/h2&gt;
  &lt;p id=&quot;0e31&quot;&gt;Этот набор инструментов мониторинга превращает мониторинг Logstash из догадок в получение ценной информации. Сочетание &lt;strong&gt;Prometheus&lt;/strong&gt;, &lt;strong&gt;Grafana&lt;/strong&gt; и &lt;strong&gt;Docker&lt;/strong&gt; дает вам следующие преимущества:&lt;/p&gt;
  &lt;ul id=&quot;PKAl&quot;&gt;
    &lt;li id=&quot;df39&quot;&gt;Полную видимость состояния пайплайнов.&lt;/li&gt;
    &lt;li id=&quot;c747&quot;&gt;Раннее выявление проблем с производительностью&lt;/li&gt;
    &lt;li id=&quot;ee73&quot;&gt;Простая настройка и воспроизводимость.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;7761&quot;&gt;Независимо от того, используете ли вы кластеры ELK или автономные экземпляры Logstash, эта настройка гарантирует, что ваши конвейеры обработки данных будут работать быстро, стабильно и надежно.&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;3svS&quot;&gt;Подписывайтесь на телеграм-канал &lt;a href=&quot;https://t.me/monitorim_it&quot; target=&quot;_blank&quot;&gt;Мониторим ИТ&lt;/a&gt;, там еще больше полезной информации о мониторинге!&lt;/p&gt;
  &lt;/section&gt;

</content></entry><entry><id>monitorim_it:12-dashboards-for-grafana</id><link rel="alternate" type="text/html" href="https://teletype.in/@monitorim_it/12-dashboards-for-grafana?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=monitorim_it"></link><title>12 дашбордов для дежурных, которые успокаивают всех</title><published>2025-12-26T09:01:42.446Z</published><updated>2025-12-26T09:01:42.446Z</updated><summary type="html">Это перевод оригинальной статьи 12 On-Call Dashboards That Calm Everyone Down.</summary><content type="html">
  &lt;section style=&quot;background-color:hsl(hsl(24,  24%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;o0DF&quot;&gt;Это перевод оригинальной статьи &lt;a href=&quot;https://medium.com/@Modexa/12-on-call-dashboards-that-calm-everyone-down-e4aa8165fc56&quot; target=&quot;_blank&quot;&gt;12 On-Call Dashboards That Calm Everyone Down&lt;/a&gt;.&lt;/p&gt;
  &lt;/section&gt;
  &lt;section style=&quot;background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;6Ydv&quot;&gt;Перевод сделан специально для телеграм-канала &lt;a href=&quot;https://t.me/monitorim_it&quot; target=&quot;_blank&quot;&gt;Мониторим ИТ.&lt;/a&gt; Подписывайтесь! Там еще больше полезных постов о мониторинге.&lt;/p&gt;
  &lt;/section&gt;
  &lt;h2 id=&quot;2d35&quot;&gt;Практичный план действий для специалистов по реагированию на инциденты, позволяющий превратить хаос в ясность.&lt;/h2&gt;
  &lt;p id=&quot;f67c&quot;&gt;&lt;em&gt;Создайте 12 дашбордов для дежурств, которые сокращают среднее время восстановления и панику, охватывая SLO, золотые сигналы, зависимости, развертывания, очереди, затраты и влияние на пользователей с помощью реальных запросов.&lt;/em&gt;&lt;/p&gt;
  &lt;p id=&quot;b729&quot;&gt;Давайте будем честны: самое страшное в инциденте — это не тревожный вызов, а тишина после ответа, когда вы не знаете, куда в первую очередь обратиться. Правильные дашборды заменяют эту тишину сигналом. Они прорезают адреналин, фокусируют команду и, что самое важное, успокаивают всех.&lt;/p&gt;
  &lt;h2 id=&quot;391c&quot;&gt;Как эти дашборды сочетаются друг с другом&lt;/h2&gt;
  &lt;p id=&quot;8a91&quot;&gt;Подумайте &lt;strong&gt;о пирамиде&lt;/strong&gt;: начните с результатов для пользователей (SLO), затем перейдите к состоянию сервиса (золотые сигналы), затем углубитесь в зависимости, развёртывания и затраты. Обеспечьте повторяемость каждой панели для разных сервисов и сред.&lt;/p&gt;
  &lt;pre id=&quot;eGTQ&quot; data-lang=&quot;bash&quot;&gt;[Users/SLO]
   └─&amp;gt; [Golden Signals]
        └─&amp;gt; [Dependencies]
             └─&amp;gt; [Infra/Runtime]
                  └─&amp;gt; [Release/Feature Flags]
                       └─&amp;gt; [Queues/Jobs]
                            └─&amp;gt; [Costs]&lt;/pre&gt;
  &lt;blockquote id=&quot;FkHB&quot;&gt;&lt;em&gt;Все 12 дашбордов могут храниться в виде папок в Grafana, Datadog или New Relic с использованием шаблонных переменных: &lt;code&gt;service&lt;/code&gt;, &lt;code&gt;env&lt;/code&gt;, &lt;code&gt;cluster&lt;/code&gt;, &lt;code&gt;version&lt;/code&gt;.&lt;/em&gt;&lt;/blockquote&gt;
  &lt;h2 id=&quot;1b99&quot;&gt;1) SLO и Error Budget (вид «Мы горим?»)&lt;/h2&gt;
  &lt;p id=&quot;3e59&quot;&gt;&lt;strong&gt;Почему это успокаивает:&lt;/strong&gt; объединяет всех по единственному важному вопросу: &lt;em&gt;соответствует ли пользовательский опыт целевому уровню прямо сейчас?&lt;/em&gt;&lt;/p&gt;
  &lt;p id=&quot;e2f4&quot;&gt;&lt;strong&gt;Дашборды:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;ImCP&quot;&gt;
    &lt;li id=&quot;e964&quot;&gt;Скорость сжигания скользящего SLO (окна 1 ч/6 ч)&lt;/li&gt;
    &lt;li id=&quot;8696&quot;&gt;Оставшийся бюджет ошибок (% и время до исчерпания)&lt;/li&gt;
    &lt;li id=&quot;f7fd&quot;&gt;Наиболее проблемные SLI (доступность, задержка, качество)&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;3b46&quot;&gt;&lt;strong&gt;Пример PromQL:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;fczO&quot; data-lang=&quot;bash&quot;&gt;# 1h burn rate example (availability SLI)
(rate(http_requests_total{service=&amp;quot;$service&amp;quot;,code=~&amp;quot;5..&amp;quot;}[1h]))
/
(rate(http_requests_total{service=&amp;quot;$service&amp;quot;}[1h]))&lt;/pre&gt;
  &lt;p id=&quot;9eed&quot;&gt;&lt;strong&gt;Совет:&lt;/strong&gt; закрепите правила аннотаций для крупных релизов и всплесков трафика.&lt;/p&gt;
  &lt;h2 id=&quot;2d3e&quot;&gt;2) Четыре золотых сигнала (задержка, трафик, ошибки, насыщение)&lt;/h2&gt;
  &lt;p id=&quot;e0dd&quot;&gt;&lt;strong&gt;Почему это успокаивает:&lt;/strong&gt; классический вид SRE, который быстро показывает, что сломано.&lt;/p&gt;
  &lt;p id=&quot;9cfc&quot;&gt;&lt;strong&gt;Дашборды:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;wStF&quot;&gt;
    &lt;li id=&quot;0e72&quot;&gt;Задержка p50/p95/p99, разделенная по маршруту&lt;/li&gt;
    &lt;li id=&quot;a5d6&quot;&gt;Тенденции RPS/QPS&lt;/li&gt;
    &lt;li id=&quot;6a71&quot;&gt;Частота ошибок 4xx/5xx&lt;/li&gt;
    &lt;li id=&quot;03bb&quot;&gt;Насыщенность ресурсов (CPU, память, открытые дескрипторы)&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;0fca&quot;&gt;&lt;strong&gt;Раскладка (ASCII):&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;gbbW&quot; data-lang=&quot;bash&quot;&gt;[ p95 Latency ]  [ Error Rate   ]
[ RPS Trend   ]  [ Saturation % ]&lt;/pre&gt;
  &lt;h2 id=&quot;4af7&quot;&gt;3) Тепловая карта состояния зависимостей&lt;/h2&gt;
  &lt;p id=&quot;2d03&quot;&gt;&lt;strong&gt;Почему это успокаивает:&lt;/strong&gt; большинство сбоев вызваны зависимостями. Позволяет видеть состояние upstream/downstream мгновенно.&lt;/p&gt;
  &lt;p id=&quot;a8d3&quot;&gt;&lt;strong&gt;Дашборды:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;5elB&quot;&gt;
    &lt;li id=&quot;cd4f&quot;&gt;Тепловая карта зависимостей с SLO и частотой ошибок&lt;/li&gt;
    &lt;li id=&quot;9cb5&quot;&gt;Таблица выбросов: «Зависимости с отклонением ошибки &amp;gt;3x»&lt;/li&gt;
    &lt;li id=&quot;0647&quot;&gt;Повторные попытки и тайм-ауты для каждой зависимости&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;dbef&quot;&gt;&lt;strong&gt;Совет по запросу (в стиле LogQL):&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;CX8H&quot; data-lang=&quot;bash&quot;&gt;sum by (dependency) (rate(http_client_errors_total{service=&amp;quot;$service&amp;quot;}[5m]))&lt;/pre&gt;
  &lt;h2 id=&quot;cad7&quot;&gt;4) Развертывание и разница версий&lt;/h2&gt;
  &lt;p id=&quot;970c&quot;&gt;&lt;strong&gt;Почему это успокаивает:&lt;/strong&gt; подтверждает, имеете ли вы дело с неудачным развертыванием или скрытой ошибкой.&lt;/p&gt;
  &lt;p id=&quot;c574&quot;&gt;&lt;strong&gt;Дашборды:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;EcLg&quot;&gt;
    &lt;li id=&quot;8f05&quot;&gt;Запросы/уровень ошибок по &lt;code&gt;version&lt;/code&gt;&lt;/li&gt;
    &lt;li id=&quot;0d09&quot;&gt;Сравнение канареечных и базовых значений&lt;/li&gt;
    &lt;li id=&quot;ce83&quot;&gt;Флаги функций с временными метками&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;88d0&quot;&gt;&lt;strong&gt;Фрагмент PromQL:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;vOYu&quot; data-lang=&quot;bash&quot;&gt;sum by (version) (rate(http_requests_total{service=&amp;quot;$service&amp;quot;}[5m]))&lt;/pre&gt;
  &lt;p id=&quot;34e8&quot;&gt;&lt;strong&gt;Включить:&lt;/strong&gt; развертывание аннотаций, извлеченных из CI/CD (&lt;code&gt;version&lt;/code&gt;, &lt;code&gt;commit&lt;/code&gt;, &lt;code&gt;author&lt;/code&gt;).&lt;/p&gt;
  &lt;h2 id=&quot;0df0&quot;&gt;5) Мониторинг реальных пользователей (RUM) и синтетические пинги&lt;/h2&gt;
  &lt;p id=&quot;a864&quot;&gt;&lt;strong&gt;Почему это успокаивает:&lt;/strong&gt; если браузер кричит, вы это поймете — особенно в регионах, где вас нет.&lt;/p&gt;
  &lt;p id=&quot;ada6&quot;&gt;&lt;strong&gt;Дашборды:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;1HlG&quot;&gt;
    &lt;li id=&quot;c801&quot;&gt;Веб-показатели (LCP, CLS, FID) по странам&lt;/li&gt;
    &lt;li id=&quot;b8a2&quot;&gt;Синтетические проверки успеха/задержки по POP&lt;/li&gt;
    &lt;li id=&quot;3f10&quot;&gt;Ошибки фронтенда (stack traces)&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;068e&quot;&gt;&lt;strong&gt;Подсказка по сортировке:&lt;/strong&gt; зеленый бэкенд с красным RUM обычно означает проблемы с CDN, DNS или JavaScript.&lt;/p&gt;
  &lt;h2 id=&quot;3f7d&quot;&gt;6) API-контракт и «горячие» эндпоинты&lt;/h2&gt;
  &lt;p id=&quot;303f&quot;&gt;&lt;strong&gt;Почему это успокаивает:&lt;/strong&gt; концентрирует внимание на нескольких шумных маршрутах, которые являются причиной 80% инцидентов.&lt;/p&gt;
  &lt;p id=&quot;2c31&quot;&gt;&lt;strong&gt;Дашборды:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;MfCg&quot;&gt;
    &lt;li id=&quot;ca04&quot;&gt;Топ N эндпоинтов по трафику/ошибкам&lt;/li&gt;
    &lt;li id=&quot;f214&quot;&gt;Изменения версии схемы контракта&lt;/li&gt;
    &lt;li id=&quot;e836&quot;&gt;Выбросы размеров запросов/ответов&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;cb5d&quot;&gt;&lt;strong&gt;Пример Datadog-метрики:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;7zY3&quot; data-lang=&quot;bash&quot;&gt;avg:service.request.duration{service:$service,resource:$route}.rollup(p95)&lt;/pre&gt;
  &lt;h2 id=&quot;0fd6&quot;&gt;7) Очереди, задачи и обратное давление&lt;/h2&gt;
  &lt;p id=&quot;2108&quot;&gt;&lt;strong&gt;Почему успокаивает:&lt;/strong&gt; подавляет панику, показывая, восстановится ли система сама или ситуация будет ухудшаться.&lt;/p&gt;
  &lt;p id=&quot;fd52&quot;&gt;&lt;strong&gt;Дашборды:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;Ewy8&quot;&gt;
    &lt;li id=&quot;7a8c&quot;&gt;Глубина очереди и время ожидания (time-in-queue)&lt;/li&gt;
    &lt;li id=&quot;222d&quot;&gt;Задержка потребителя по каждому разделу&lt;/li&gt;
    &lt;li id=&quot;50b8&quot;&gt;Коэффициент DLQ и основные причины сбоев&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;efd5&quot;&gt;&lt;strong&gt;Пример PromQL для Kafka:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;oAdf&quot; data-lang=&quot;bash&quot;&gt;max by (topic, partition) (kafka_consumergroup_lag{group=&amp;quot;$service&amp;quot;})&lt;/pre&gt;
  &lt;h2 id=&quot;2f47&quot;&gt;8) Эффективность базы данных и кэша&lt;/h2&gt;
  &lt;p id=&quot;c7b8&quot;&gt;&lt;strong&gt;Почему это успокаивает:&lt;/strong&gt; позволяет различать ошибки приложения и нагрузку на систему хранения данных.&lt;/p&gt;
  &lt;p id=&quot;3db9&quot;&gt;&lt;strong&gt;Дашборды:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;CDZb&quot;&gt;
    &lt;li id=&quot;fae1&quot;&gt;DB p95/p99 по группам запросов&lt;/li&gt;
    &lt;li id=&quot;b411&quot;&gt;Ожидание блокировки и взаимоблокировки&lt;/li&gt;
    &lt;li id=&quot;a523&quot;&gt;Коэффициент попаданий в кэш (чтение/запись)&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;1ffd&quot;&gt;&lt;strong&gt;Пример Redis LFU:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;typs&quot; data-lang=&quot;bash&quot;&gt;# Ensure smarter eviction for hot keys
maxmemory-policy allkeys-lfu&lt;/pre&gt;
  &lt;p id=&quot;23fa&quot;&gt;&lt;strong&gt;Пример SQL (медленные запросы Postgres):&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;RWXx&quot; data-lang=&quot;bash&quot;&gt;SELECT query, mean_time, calls
FROM pg_stat_statements
ORDER BY mean_time DESC
LIMIT 10;&lt;/pre&gt;
  &lt;h2 id=&quot;c7fc&quot;&gt;9) Ограничения скорости, троттлинг и защитные механизмы&lt;/h2&gt;
  &lt;p id=&quot;b8c3&quot;&gt;&lt;strong&gt;Почему успокаивает:&lt;/strong&gt; показывает, сработали ли «ремни безопасности» — полезно во время наплыва трафика или атак ботов.&lt;/p&gt;
  &lt;p id=&quot;e1a6&quot;&gt;&lt;strong&gt;Дашборды:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;92vD&quot;&gt;
    &lt;li id=&quot;901f&quot;&gt;Запросы, заблокированые правилом&lt;/li&gt;
    &lt;li id=&quot;3255&quot;&gt;Фактический RPS (запросов в секунду) по сравнению с установленным лимитом&lt;/li&gt;
    &lt;li id=&quot;ec84&quot;&gt;Распределение ответов 429 по IP/тенантам&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;b3b5&quot;&gt;&lt;strong&gt;PromQL:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;lDmm&quot; data-lang=&quot;bash&quot;&gt;sum by (rule) (rate(rate_limit_blocked_total{service=&amp;quot;$service&amp;quot;}[5m]))&lt;/pre&gt;
  &lt;h2 id=&quot;6a10&quot;&gt;10) Стоимость и эффективность (да, во время инцидентов)&lt;/h2&gt;
  &lt;p id=&quot;78d8&quot;&gt;&lt;strong&gt;Почему это успокаивает:&lt;/strong&gt; предотвращает необдуманное избыточное резервирование и информирует об откатах с учетом финансового контекста.&lt;/p&gt;
  &lt;p id=&quot;9ca1&quot;&gt;&lt;strong&gt;Дашборды:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;irt4&quot;&gt;
    &lt;li id=&quot;46c9&quot;&gt;Стоимость за 1 тыс. запросов (амортизированная)&lt;/li&gt;
    &lt;li id=&quot;25d7&quot;&gt;Стоимость за минуту по сервису и региону&lt;/li&gt;
    &lt;li id=&quot;8977&quot;&gt;Простаивающий и загруженный CPU&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;2875&quot;&gt;&lt;strong&gt;Пример оценки:&lt;/strong&gt; добавьте таблицу, в которой штраф за пропуск умножается на объем, чтобы спрогнозировать стоимость облака, если вы сохраняете деградировавший кэш.&lt;/p&gt;
  &lt;h2 id=&quot;2f83&quot;&gt;11) Таксономия ошибок и трассировки&lt;/h2&gt;
  &lt;p id=&quot;81eb&quot;&gt;&lt;strong&gt;Почему успокаивает:&lt;/strong&gt; позволяет отделить «известные шумные» ошибки от «новых пугающих».&lt;/p&gt;
  &lt;p id=&quot;1766&quot;&gt;&lt;strong&gt;Дашборды:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;Y6Jl&quot;&gt;
    &lt;li id=&quot;3b14&quot;&gt;Классы ошибок с трендом (тайм-аут, валидация, аутентификация, зависимость)&lt;/li&gt;
    &lt;li id=&quot;7f49&quot;&gt;Новые сигнатуры ошибок за последний час&lt;/li&gt;
    &lt;li id=&quot;cc4e&quot;&gt;Трассировочная диаграмма (waterfall) для трёх наиболее проблемных маршрутов&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;685b&quot;&gt;&lt;strong&gt;Фильтр OTel трассировок (псевдокод):&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;locr&quot; data-lang=&quot;bash&quot;&gt;service.name = &amp;quot;$service&amp;quot; AND status.code = ERROR
| top span.attributes[&amp;quot;http.target&amp;quot;] by count&lt;/pre&gt;
  &lt;h2 id=&quot;05eb&quot;&gt;12) Руководство на одном экране (человеческий дашборд)&lt;/h2&gt;
  &lt;p id=&quot;df62&quot;&gt;&lt;strong&gt;Почему это успокаивает:&lt;/strong&gt; ставит чеклист рядом с графиками. Никому не приходится искать ссылки в Confluence в 3 часа ночи.&lt;/p&gt;
  &lt;p id=&quot;7839&quot;&gt;&lt;strong&gt;Дашборды:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;QDFd&quot;&gt;
    &lt;li id=&quot;77bc&quot;&gt;Руководство в формате Markdown с деревом решений&lt;/li&gt;
    &lt;li id=&quot;977c&quot;&gt;Расписание дежурств и кнопки эскалации&lt;/li&gt;
    &lt;li id=&quot;426a&quot;&gt;Хронология недавних инцидентов и шаблон сообщений&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;2b40&quot;&gt;&lt;strong&gt;Фрагмент ASCII-кода (путь решения):&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;eDlp&quot; data-lang=&quot;bash&quot;&gt;[Budget burning?]--No--&amp;gt;[Monitor]
        |
       Yes
        v
[Latency spike?]--Yes--&amp;gt;[Check Dependencies Heatmap]
        | No
        v
[Error spike]--&amp;gt;[Rollout &amp;amp; Version Diff]-&amp;gt;Rollback?&lt;/pre&gt;
  &lt;h2 id=&quot;80ac&quot;&gt;Минимальный шаблон настройки (чтобы можно было развернуть на этой неделе)&lt;/h2&gt;
  &lt;ul id=&quot;xHgB&quot;&gt;
    &lt;li id=&quot;f914&quot;&gt;&lt;strong&gt;Переменные:&lt;/strong&gt; &lt;code&gt;service&lt;/code&gt; , &lt;code&gt;env&lt;/code&gt;, &lt;code&gt;region&lt;/code&gt;, &lt;code&gt;version&lt;/code&gt;, &lt;code&gt;dependency&lt;/code&gt;.&lt;/li&gt;
    &lt;li id=&quot;5f26&quot;&gt;&lt;strong&gt;Стандартные аннотации: &lt;/strong&gt;деплои, изменения конфигураций, изменения флагов функций, изменения правил rate-limit.&lt;/li&gt;
    &lt;li id=&quot;b76a&quot;&gt;&lt;strong&gt;Распространенные условные обозначения:&lt;/strong&gt; красный = воздействие на пользователя, желтый = риск, синий = норма, серый = фон.&lt;/li&gt;
    &lt;li id=&quot;7816&quot;&gt;&lt;strong&gt;Доступ:&lt;/strong&gt; делитесь ссылками только для чтения с продуктовой командой/саппортом; добавьте подсказку «Что означает этот вид» на каждой панели.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;3b1c&quot;&gt;Пример: спокойный инцидент на 15 минут&lt;/h2&gt;
  &lt;ul id=&quot;swYl&quot;&gt;
    &lt;li id=&quot;efb4&quot;&gt;&lt;strong&gt;Минута 1–3:&lt;/strong&gt; SLO показывает расход за 1 час выше порога; золотые сигналы указывают на p99 задержку только для &lt;code&gt;GET /search&lt;/code&gt;.&lt;/li&gt;
    &lt;li id=&quot;dfa5&quot;&gt;&lt;strong&gt;Минута 4–6:&lt;/strong&gt; индикатор зависимостей высвечивает ошибки &lt;strong&gt;кэша&lt;/strong&gt;; БД выглядит нормально.&lt;/li&gt;
    &lt;li id=&quot;c96f&quot;&gt;&lt;strong&gt;Минута 7–9:&lt;/strong&gt; дашборд с деплоями показывает новую версию на 25% канареечного деплоя, коррелирующую с обращениями к кэшу.&lt;/li&gt;
    &lt;li id=&quot;ba3f&quot;&gt;&lt;strong&gt;Минута 10:&lt;/strong&gt; устранение канареечных ошибок.&lt;/li&gt;
    &lt;li id=&quot;1d29&quot;&gt;&lt;strong&gt;Минуты 11–15:&lt;/strong&gt; очереди освобождаются; расход SLO снижается. Дашборд стоимости подтверждает отсутствие неконтролируемых расходов. Все выдыхают.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;d2ae&quot;&gt;Заметки и фрагменты реализации&lt;/h2&gt;
  &lt;p id=&quot;df00&quot;&gt;&lt;strong&gt;Alert burn-rate (многооконный):&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;NbUi&quot; data-lang=&quot;bash&quot;&gt;# Alerts if both short and long windows exceed thresholds
( rate(sli_errors_total{service=&amp;quot;$s&amp;quot;}[5m]) / rate(sli_total{service=&amp;quot;$s&amp;quot;}[5m]) &amp;gt; 0.02 )
and
( rate(sli_errors_total{service=&amp;quot;$s&amp;quot;}[1h]) / rate(sli_total{service=&amp;quot;$s&amp;quot;}[1h]) &amp;gt; 0.01 )&lt;/pre&gt;
  &lt;p id=&quot;3cd7&quot;&gt;&lt;strong&gt;Пример шаблона Grafana (JSON):&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;tujV&quot; data-lang=&quot;bash&quot;&gt;{
  &amp;quot;templating&amp;quot;: {
    &amp;quot;list&amp;quot;: [
      {&amp;quot;type&amp;quot;:&amp;quot;query&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;service&amp;quot;,&amp;quot;query&amp;quot;:&amp;quot;label_values(up, service)&amp;quot;},
      {&amp;quot;type&amp;quot;:&amp;quot;query&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;env&amp;quot;,&amp;quot;query&amp;quot;:&amp;quot;label_values(up, env)&amp;quot;},
      {&amp;quot;type&amp;quot;:&amp;quot;query&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;version&amp;quot;,&amp;quot;query&amp;quot;:&amp;quot;label_values(http_requests_total, version)&amp;quot;}
    ]
  }
}&lt;/pre&gt;
  &lt;p id=&quot;eec7&quot;&gt;&lt;strong&gt;Пример аннотации таймлайна инцидента (псевдо):&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;w04z&quot; data-lang=&quot;bash&quot;&gt;curl -X POST &amp;quot;$GRAFANA/api/annotations&amp;quot; \
  -H &amp;quot;Authorization: Bearer $TOKEN&amp;quot; \
  -d &amp;#x27;{&amp;quot;text&amp;quot;:&amp;quot;Canary 3 deployed&amp;quot;,&amp;quot;tags&amp;quot;:[&amp;quot;deploy&amp;quot;,&amp;quot;canary&amp;quot;],&amp;quot;time&amp;quot;:1699999999999}&amp;#x27;&lt;/pre&gt;
  &lt;h2 id=&quot;b991&quot;&gt;Распространенные ошибки (и как эти дашборды их предотвращают)&lt;/h2&gt;
  &lt;ul id=&quot;fsd2&quot;&gt;
    &lt;li id=&quot;8141&quot;&gt;&lt;strong&gt;Разрастание панели управления:&lt;/strong&gt; этих 12 достаточно. Не дублируйте по командам; используйте переменные.&lt;/li&gt;
    &lt;li id=&quot;bc3e&quot;&gt;&lt;strong&gt;Отсутствие общего языка:&lt;/strong&gt; называйте панели терминами SRE (SLO, burn rate, p95) и сохраняйте единообразие.&lt;/li&gt;
    &lt;li id=&quot;443e&quot;&gt;&lt;strong&gt;Нет контекста:&lt;/strong&gt; всегда аннотируйте деплои, флаги функций и изменения инфраструктуры.&lt;/li&gt;
    &lt;li id=&quot;2903&quot;&gt;&lt;strong&gt;Устаревшие панели:&lt;/strong&gt; Просматривайте ежемесячно; привязывайте графики к оповещениям, чтобы они никогда не смещались.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;30e6&quot;&gt;Заключение&lt;/h2&gt;
  &lt;p id=&quot;6237&quot;&gt;Спокойствие — это результат &lt;strong&gt;ясности&lt;/strong&gt;. Благодаря этим 12 дашбордам мониторинга вы предоставляете каждому сотруднику дежурной смены единый, надежный путь от устранения последствий для пользователя до первопричины — быстро и эффективно. Инциденты всё ещё случаются. Паника не обязательна.&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;RXNB&quot;&gt;Подписывайтесь на телеграм-канал &lt;a href=&quot;https://t.me/monitorim_it&quot; target=&quot;_blank&quot;&gt;Мониторим ИТ&lt;/a&gt;, там еще больше полезной информации о мониторинге!&lt;/p&gt;
  &lt;/section&gt;

</content></entry><entry><id>monitorim_it:alert-n8n-automatization</id><link rel="alternate" type="text/html" href="https://teletype.in/@monitorim_it/alert-n8n-automatization?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=monitorim_it"></link><title>Автоматизированные процессы реагирования на инциденты с помощью n8n и Prometheus</title><published>2025-12-26T08:42:58.384Z</published><updated>2025-12-26T08:42:58.384Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img4.teletype.in/files/b2/f4/b2f4b5c8-80f2-4fd5-95a4-6bf7d6e94b97.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/0*IaMcE2D_jCf5yrk5.png&quot;&gt;Это перевод оригинальной статьи Automated Incident Response Workflows with n8n and Prometheus.</summary><content type="html">
  &lt;section style=&quot;background-color:hsl(hsl(24,  24%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;5jeP&quot;&gt;Это перевод оригинальной статьи &lt;a href=&quot;https://medium.com/@b0ld8/automated-incident-response-workflows-with-n8n-and-prometheus-0fbffdabc92f&quot; target=&quot;_blank&quot;&gt;Automated Incident Response Workflows with n8n and Prometheus&lt;/a&gt;.&lt;/p&gt;
  &lt;/section&gt;
  &lt;section style=&quot;background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;YWXK&quot;&gt;Перевод сделан специально для телеграм-канала &lt;a href=&quot;https://t.me/monitorim_it&quot; target=&quot;_blank&quot;&gt;Мониторим ИТ.&lt;/a&gt; Подписывайтесь! Там еще больше полезных постов о мониторинге.&lt;/p&gt;
  &lt;/section&gt;
  &lt;p id=&quot;y3zq&quot;&gt;Это руководство поможет команде использовать n8n и Prometheus для автоматизации реагирования на некоторые инциденты.&lt;/p&gt;
  &lt;h2 id=&quot;e9a8&quot;&gt;1. Процесс реагирования на инциденты&lt;/h2&gt;
  &lt;p id=&quot;cde8&quot;&gt;Эффективное управление инцидентами предполагает структурированный подход, который можно улучшить с помощью автоматизации на каждом этапе:&lt;/p&gt;
  &lt;h2 id=&quot;18a1&quot;&gt;Подготовка&lt;/h2&gt;
  &lt;ul id=&quot;mJj7&quot;&gt;
    &lt;li id=&quot;d54a&quot;&gt;&lt;strong&gt;Документация: &lt;/strong&gt;ведение runbook’ов и процедур реагирования&lt;/li&gt;
    &lt;li id=&quot;a342&quot;&gt;&lt;strong&gt;Настройка мониторинга:&lt;/strong&gt; настройте алерты Prometheus с соответствующими порогами.&lt;/li&gt;
    &lt;li id=&quot;8c83&quot;&gt;&lt;strong&gt;Готовность команды:&lt;/strong&gt; убедитесь, что графики дежурств и пути эскалации четко определены.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;72f5&quot;&gt;Обнаружение и анализ&lt;/h2&gt;
  &lt;ul id=&quot;xEYt&quot;&gt;
    &lt;li id=&quot;38cf&quot;&gt;&lt;strong&gt;Активация оповещений:&lt;/strong&gt; Prometheus обнаруживает аномалии на основе предопределенных правил.&lt;/li&gt;
    &lt;li id=&quot;1e56&quot;&gt;&lt;strong&gt;Первоначальная оценка:&lt;/strong&gt; автоматическая классификация по уровню критичности и влиянию.&lt;/li&gt;
    &lt;li id=&quot;4525&quot;&gt;&lt;strong&gt;Контекстное обогащение:&lt;/strong&gt; добавление релевантной системной информации в оповещения.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;17b5&quot;&gt;Восстановление&lt;/h2&gt;
  &lt;ul id=&quot;8MNM&quot;&gt;
    &lt;li id=&quot;0e87&quot;&gt;&lt;strong&gt;Маршрутизация уведомлений:&lt;/strong&gt; направление оповещений по соответствующим каналам (PagerDuty, Slack)&lt;/li&gt;
    &lt;li id=&quot;ef87&quot;&gt;&lt;strong&gt;Руководство по реагированию:&lt;/strong&gt; ссылки на соответствующие руководства или документацию.&lt;/li&gt;
    &lt;li id=&quot;33b7&quot;&gt;&lt;strong&gt;Автоматическое устранение:&lt;/strong&gt; запуск скриптов восстановления для известных проблем.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;b3c5&quot;&gt;Действия после инцидента&lt;/h2&gt;
  &lt;ul id=&quot;shhk&quot;&gt;
    &lt;li id=&quot;9f9b&quot;&gt;&lt;strong&gt;Документация:&lt;/strong&gt; фиксация хронологии и деталей реагирования.&lt;/li&gt;
    &lt;li id=&quot;c9eb&quot;&gt;&lt;strong&gt;Анализ:&lt;/strong&gt; определение корневых причин и возможностей для предотвращения.&lt;/li&gt;
    &lt;li id=&quot;b7d5&quot;&gt;&lt;strong&gt;Улучшение процесса:&lt;/strong&gt; обновление правил мониторинга и рабочих процессов реагирования.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;6288&quot;&gt;На следующих этапах мы создадим поток автоматизации, который будет охватывать обнаружение и анализ, а также направлять оповещения на основе контекста.&lt;/p&gt;
  &lt;h2 id=&quot;c61a&quot;&gt;2. Создание процесса реагирования на инциденты с n8n + Prometheus&lt;/h2&gt;
  &lt;p id=&quot;6b77&quot;&gt;Давайте создадим практичный рабочий процесс, который будет разумно управлять оповещениями Prometheus, гарантируя, что критически важные проблемы будут отправляться с учетом критичности, рабочего времени,…&lt;/p&gt;
  &lt;figure id=&quot;nw8c&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/0*IaMcE2D_jCf5yrk5.png&quot; width=&quot;700&quot; /&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;abc2&quot;&gt;Обзор рабочего процесса&lt;/h2&gt;
  &lt;p id=&quot;6399&quot;&gt;Наша цель — построить систему, которая:&lt;/p&gt;
  &lt;ul id=&quot;6VEQ&quot;&gt;
    &lt;li id=&quot;4b4d&quot;&gt;Получает оповещения от Prometheus/AlertManager&lt;/li&gt;
    &lt;li id=&quot;5eae&quot;&gt;Анализирует уровень критичности и рабочее время.&lt;/li&gt;
    &lt;li id=&quot;8432&quot;&gt;Направляет критически важные алерты вне рабочего времени в PagerDuty для немедленного реагирования.&lt;/li&gt;
    &lt;li id=&quot;7ce8&quot;&gt;Отправляет менее срочные или алерты в рабочее время в Slack/Discord.&lt;/li&gt;
    &lt;li id=&quot;2ca1&quot;&gt;Автоматизирует разрешение инцидентов на основе предложений AI-агента.&lt;/li&gt;
    &lt;li id=&quot;d4eb&quot;&gt;Lambda-функция выполняет ваши операции (можно кастомизировать для ECS, EKS и других).&lt;/li&gt;
    &lt;li id=&quot;770b&quot;&gt;Документирует все инциденты в структурированном формате (Notion)&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;9505&quot;&gt;Такой подход гарантирует, что ваша команда не будет будить вас без необходимости, и в то же время будет обеспечивать быстрое реагирование на действительно чрезвычайные ситуации.&lt;/p&gt;
  &lt;h2 id=&quot;e09e&quot;&gt;Настройка стека мониторинга&lt;/h2&gt;
  &lt;p id=&quot;cb2d&quot;&gt;Перед построением нашего рабочего процесса n8n необходимо правильно настроить систему мониторинга:&lt;/p&gt;
  &lt;ol id=&quot;QGGx&quot;&gt;
    &lt;li id=&quot;b49e&quot;&gt;&lt;strong&gt;Установить стек Prometheus&lt;/strong&gt;&lt;/li&gt;
  &lt;/ol&gt;
  &lt;ul id=&quot;pwIz&quot;&gt;
    &lt;li id=&quot;03a2&quot;&gt;Сервер Prometheus для сбора метрик&lt;/li&gt;
    &lt;li id=&quot;bb44&quot;&gt;Exporters для ваших конкретных сервисов&lt;/li&gt;
    &lt;li id=&quot;9504&quot;&gt;AlertManager для обработки оповещений&lt;/li&gt;
    &lt;li id=&quot;bcec&quot;&gt;Grafana для визуализации&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;32b6&quot;&gt;Для облегчения настройки стека я подготовил скрипты для развёртывания «&lt;a href=&quot;https://github.com/Bubobot-Team/monitoring-stack/tree/main/stacks/prometheus-stack&quot; target=&quot;_blank&quot;&gt;Node Exporter — Prometheus — Alert Manager — Grafana Stack&lt;/a&gt;» по щелчку мыши. Вы можете посмотреть, скачать и развернуть самостоятельно.&lt;/p&gt;
  &lt;p id=&quot;f970&quot;&gt;&lt;strong&gt;2. Настройка правил алертов в Prometheus&lt;/strong&gt;&lt;/p&gt;
  &lt;figure id=&quot;TsUl&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/0*-q1GEvH-FJFxSJdR.png&quot; width=&quot;700&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;812d&quot;&gt;Ниже приведен пример кода для активации оповещений.&lt;/p&gt;
  &lt;pre id=&quot;3Hyb&quot; data-lang=&quot;bash&quot;&gt;groups:
- name: example
  rules:
  - alert: HighCPU
    expr: 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode=&amp;quot;idle&amp;quot;,job=&amp;quot;exporters&amp;quot;}[5m])) * 100) &amp;gt; 10
    for: 1m
    labels:
      severity: critical
      service: node
    annotations:
      description: &amp;quot;CPU usage on {{ $labels.instance }} is {{ $value }}%&amp;quot;
  - alert: HighLatency
    expr: rate(http_request_duration_seconds_sum[5m]) / rate(http_request_duration_seconds_count[5m]) &amp;gt; 0.5
    for: 1m
    labels:
      severity: warning
      service: web
    annotations:
      description: &amp;quot;Response time on {{ $labels.instance }} is {{ $value }}s&amp;quot;&lt;/pre&gt;
  &lt;p id=&quot;b924&quot;&gt;&lt;strong&gt;3. Настройка AlertManager для пересылки на n8n&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;mUxG&quot; data-lang=&quot;bash&quot;&gt;route:
  receiver: &amp;#x27;n8n-webhook&amp;#x27;
  group_by: [&amp;#x27;alertname&amp;#x27;, &amp;#x27;instance&amp;#x27;]
  group_wait: 30s
  group_interval: 1m
  repeat_interval: 30m

receivers:
- name: &amp;#x27;n8n-webhook&amp;#x27;
  webhook_configs:
  - url: &amp;#x27;&amp;lt;http://your-n8n-instance:5678/webhook/prometheus&amp;gt;&amp;#x27;
    send_resolved: true&lt;/pre&gt;
  &lt;h2 id=&quot;09c7&quot;&gt;Создание рабочего процесса n8n&lt;/h2&gt;
  &lt;p id=&quot;e3b7&quot;&gt;Теперь давайте создадим наш рабочий процесс n8n для интеллектуальной обработки этих оповещений:&lt;/p&gt;
  &lt;ol id=&quot;Gs6h&quot;&gt;
    &lt;li id=&quot;b4fb&quot;&gt;&lt;strong&gt;Создайте узел Webhook&lt;/strong&gt;&lt;/li&gt;
  &lt;/ol&gt;
  &lt;ul id=&quot;mLOB&quot;&gt;
    &lt;li id=&quot;4a94&quot;&gt;Это позволит получать оповещения от AlertManager.&lt;/li&gt;
    &lt;li id=&quot;b9b9&quot;&gt;Настройте его на разбор JSON-данных.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;figure id=&quot;wXjd&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/0*mbjCmj_xytgzzJey.png&quot; width=&quot;700&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;f278&quot;&gt;&lt;strong&gt;Примечание:&lt;/strong&gt; чтобы использовать «Production URL», необходимо перевести рабочий процесс в состояние «Active» (активный).&lt;/p&gt;
  &lt;p id=&quot;0257&quot;&gt;&lt;strong&gt;2. Добавьте узел Function для классификации оповещений&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;eplA&quot;&gt;Чтобы проанализировать полезную нагрузку от Prometheus, мы попытаемся разобрать JSON. Также мы рассчитаем рабочее время и продолжительность инцидента, что поможет нам точнее оценить ситуацию.&lt;/p&gt;
  &lt;p id=&quot;f13b&quot;&gt;Добавьте узел кода, введите следующий код JavaScript:&lt;/p&gt;
  &lt;pre id=&quot;O9ok&quot; data-lang=&quot;bash&quot;&gt;const alerts = items[0].json.body.alerts || [];
return alerts.map(alert =&amp;gt; ({
  const startsAt = new Date(alert.startsAt);
  const endsAt = new Date(alert.endsAt);
  const hour = endsAt.getUTCHours();
  const isBusinessHours = hour &amp;gt;= 9 &amp;amp;&amp;amp; hour &amp;lt; 17; // 9 AM–5 PM UTC
  const durationMinutes = (endsAt - startsAt) / 1000 / 60; // Duration in minutes
  json: {
    status: alert.status, // firing or resolved
    alertname: alert.labels.alertname, // e.g., HighCPU
    severity: alert.labels.severity, // e.g., critical
    instance: alert.labels.instance, // e.g., 47.129.163.27:9100
    service: alert.labels.service, // e.g., node
    description: alert.annotations.description, // e.g., CPU usage description
    startsAt: alert.startsAt, // e.g., 2025-05-25T06:40:29.682Z
    endsAt: alert.endsAt, // e.g., 2025-05-25T06:42:59.682Z
    fingerprint: alert.fingerprint, // e.g., 80e7d055dbb50b48
    isBusinessHours: isBusinessHours, // true if within 9 AM–5 PM UTC
    durationMinutes: durationMinutes // Duration in minutes
  }
}));&lt;/pre&gt;
  &lt;p id=&quot;1cc5&quot;&gt;&lt;strong&gt;3. Добавьте узел Switch для маршрутизации.&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;2559&quot;&gt;Маршрутизация будет осуществляться на основе критичности и рабочего времени, будет три пути:&lt;/p&gt;
  &lt;ul id=&quot;zZtT&quot;&gt;
    &lt;li id=&quot;c972&quot;&gt;Критический + вне рабочего дня → PagerDuty&lt;/li&gt;
    &lt;li id=&quot;b5aa&quot;&gt;Критический + Рабочие часы → Discord (канал для срочных сообщений)&lt;/li&gt;
    &lt;li id=&quot;1d1a&quot;&gt;Некритический → Discord (общий канал оповещений)&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;2134&quot;&gt;&lt;strong&gt;4. Настройте интеграцию с сервисами&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;e84c&quot;&gt;&lt;strong&gt;Узел PagerDuty:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;HQU0&quot;&gt;
    &lt;li id=&quot;0c66&quot;&gt;Подключитесь к сервису PagerDuty&lt;/li&gt;
    &lt;li id=&quot;262d&quot;&gt;Сопоставьте данные оповещения с полями инцидента&lt;/li&gt;
    &lt;li id=&quot;07cf&quot;&gt;Установите соответствующую критичность&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;2a3f&quot;&gt;&lt;strong&gt;Узел Discord:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;kRWo&quot;&gt;
    &lt;li id=&quot;7f03&quot;&gt;Создайте отформатированные сообщения с подробностями об оповещении.&lt;/li&gt;
    &lt;li id=&quot;757a&quot;&gt;Включите ссылки на дашборды Grafana&lt;/li&gt;
    &lt;li id=&quot;a680&quot;&gt;Добавьте ссылки на runbook’и, если они доступны.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;7e0a&quot;&gt;&lt;strong&gt;5. Добавьте интеграцию с Notion для документации&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;LESi&quot;&gt;
    &lt;li id=&quot;2928&quot;&gt;Создайте узел базы данных Notion&lt;/li&gt;
    &lt;li id=&quot;cd8e&quot;&gt;Регистрируйте все инциденты с временными метками, уровнем серьёзности и деталями реагирования&lt;/li&gt;
    &lt;li id=&quot;565d&quot;&gt;Добавляйте статус решения и последующие задачи&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;81f3&quot;&gt;При запуске указанного выше процесса вы будете направлять оповещения на основе определенных вами правил. Это всего лишь мой пример:&lt;/p&gt;
  &lt;p id=&quot;76c5&quot;&gt;Оповещения среднего уровня отправляются в Discord, команда может проверить их позже.&lt;/p&gt;
  &lt;figure id=&quot;bfqQ&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/0*xeRspwslzvE_zu0a.png&quot; width=&quot;700&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;aff7&quot;&gt;Критические оповещения, поступающие поступающие вне рабочих часов или в праздничные дни, отправляются в PagerDuty. На панели управления PagerDuty вы можете настроить правила звонков и эскалации.&lt;/p&gt;
  &lt;figure id=&quot;zHnO&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/0*XclRMRaiNzHSHh52.png&quot; width=&quot;700&quot; /&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;4355&quot;&gt;Урегулировать инцидент&lt;/h2&gt;
  &lt;p id=&quot;28c3&quot;&gt;Предлагаемая подсказка(prompt) для ИИ-агента, которая обработает контекст для вас:&lt;/p&gt;
  &lt;pre id=&quot;bzfI&quot; data-lang=&quot;bash&quot;&gt;Analyze the following Prometheus alert to determine if it should be auto-resolved by restarting the EC2 instance to handle issues like high CPU usage, especially when the team is unavailable. The context is:

- Alert Name: {{ $node[&amp;quot;Code&amp;quot;].json[&amp;quot;alertname&amp;quot;] }}
- Severity: {{ $node[&amp;quot;Code&amp;quot;].json[&amp;quot;severity&amp;quot;] }}
- Duration: {{ $node[&amp;quot;Code&amp;quot;].json.durationMinutes }} minutes
- Business Hours: {{ $node[&amp;quot;Code&amp;quot;].json[&amp;quot;isBusinessHours&amp;quot;] }} (true if 9 AM–5 PM UTC, false otherwise)
- Description: {{ $node[&amp;quot;Code&amp;quot;].json[&amp;quot;description&amp;quot;] }}

Extract the CPU usage (X%) from the description, formatted as: &amp;quot;On &amp;lt;instance&amp;gt; at &amp;lt;alertname&amp;gt;: CPU usage is X%, Memory available is Y%, Swap usage is Z%, Disk I/O is A s, Network received is B MB/s, Latency is C s&amp;quot;.

Decide to auto-resolve (restart the EC2 instance) if:
1. CPU usage &amp;gt; 80% AND outside business hours (isBusinessHours is false).
2. CPU usage &amp;gt; 90% AND duration &amp;lt; 5 minutes.
3. Severity is &amp;quot;critical&amp;quot; AND outside business hours (isBusinessHours is false).

Return only the following JSON object, with no additional text, explanations, or markdown:
{
  &amp;quot;shouldAutoResolve&amp;quot;: boolean,
  &amp;quot;reason&amp;quot;: &amp;quot;Explanation of the reason why this action should or should not be auto-resolved, referencing CPU usage, duration, severity, and business hours if relevant.&amp;quot;
}

- If shouldAutoResolve is true, a Lambda function will be triggered to restart the EC2 instance.
- If shouldAutoResolve is false, no restart will occur.
- Keep the reason concise and clear, referencing the specific criteria met or not met.
- If CPU usage cannot be extracted, assume 0% and include it in the reason.&lt;/pre&gt;
  &lt;p id=&quot;38c3&quot;&gt;Он будет следовать ожидаемому контексту и принимать решение о том, перезапускать сервис или нет:&lt;/p&gt;
  &lt;figure id=&quot;6HPV&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/0*TOfZ7lDP8d0L05aM.png&quot; width=&quot;700&quot; /&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;3637&quot;&gt;3. Улучшение рабочего процесса&lt;/h2&gt;
  &lt;p id=&quot;188f&quot;&gt;Вы можете улучшить рабочий процесс в соответствии со своими потребностями. Я порекомендую несколько подходов:&lt;/p&gt;
  &lt;h2 id=&quot;b9c5&quot;&gt;Этап уведомления&lt;/h2&gt;
  &lt;p id=&quot;339e&quot;&gt;N8n поддерживает различные типы интеграций, такие как Slack, Telegram, Rocketchat и т.д. Вы можете интегрировать все, что вам нужно.&lt;/p&gt;
  &lt;h2 id=&quot;0880&quot;&gt;Этап анализа&lt;/h2&gt;
  &lt;p id=&quot;9264&quot;&gt;Можно подключить ИИ-агента, LLM-chain или OpenLLM для оценки метрик и маршрутизации инцидентов.&lt;/p&gt;
  &lt;p id=&quot;223f&quot;&gt;Вы можете значительно улучшить рабочий процесс следующим образом:&lt;/p&gt;
  &lt;ul id=&quot;CXnJ&quot;&gt;
    &lt;li id=&quot;1fb0&quot;&gt;Реализуйте интеллектуальное подавление: агрегируя метрики из Prometheus Alertmanager, можно использовать узел ИИ в n8n, чтобы подавлять или эскалировать проблему для команды.&lt;/li&gt;
    &lt;li id=&quot;9530&quot;&gt;Проверки внешних зависимостей: мы можем интегрироваться с некоторыми внешними сервисами, такими как DNS, Vercel, AWS и т. д., чтобы убедиться, что инцидент обработан корректно.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;1fd6&quot;&gt;Этап логирования инцидентов&lt;/h2&gt;
  &lt;p id=&quot;98ad&quot;&gt;Вы можете интегрировать в хранилища, такие как GoogleSheet, MongoDB, SQL и т. д. Поддерживаются многие типы баз данных.&lt;/p&gt;
  &lt;h2 id=&quot;5295&quot;&gt;4. Примеры кодов и рабочего процесса&lt;/h2&gt;
  &lt;ul id=&quot;FYKu&quot;&gt;
    &lt;li id=&quot;6095&quot;&gt;Рабочий процесс реагирования на инциденты (json) — &lt;a href=&quot;https://github.com/Bubobot-Team/automation-workflow-monitoring/blob/main/n8n/n8n___Incident_Response___1.json&quot; target=&quot;_blank&quot;&gt;https://github.com/Bubobot-Team/automation-workflow-monitoring/blob/main/n8n/n8n___Incident_Response___1.json&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;51a8&quot;&gt;Развертывание Node Exporter — Prometheus — Alert Manager — Grafana Stack в режиме Click-Run: &lt;a href=&quot;https://github.com/Bubobot-Team/monitoring-stack/tree/main/stacks/prometheus-stack&quot; target=&quot;_blank&quot;&gt;https://github.com/Bubobot-Team/monitoring-stack/tree/main/stacks/prometheus-stack&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;section style=&quot;background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;oyOM&quot;&gt;Подписывайтесь на телеграм-канал &lt;a href=&quot;https://t.me/monitorim_it&quot; target=&quot;_blank&quot;&gt;Мониторим ИТ&lt;/a&gt;, там еще больше полезной информации о мониторинге!&lt;/p&gt;
  &lt;/section&gt;

</content></entry><entry><id>monitorim_it:ImjdvcmwEU_</id><link rel="alternate" type="text/html" href="https://teletype.in/@monitorim_it/ImjdvcmwEU_?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=monitorim_it"></link><title>10 вопросов о наблюдаемости Kubernetes, которые задают на каждом собеседовании в DevOps.</title><published>2025-12-26T08:25:44.144Z</published><updated>2025-12-26T08:25:44.144Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img4.teletype.in/files/7e/bd/7ebde5f6-e63a-4d46-a5d1-358276ebf025.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/1*JVqLd413JrBp6bcQmSlQKQ.png&quot;&gt;Это перевод оригинальной статьи 10 Kubernetes Observability Questions That Show Up in Every DevOps Interview.</summary><content type="html">
  &lt;section style=&quot;background-color:hsl(hsl(24,  24%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;Ohut&quot;&gt;Это перевод оригинальной статьи &lt;a href=&quot;https://medium.com/@akhilesh-mishra/10-kubernetes-observability-questions-that-show-up-in-every-devops-interview-6d06e2ae1f82&quot; target=&quot;_blank&quot;&gt;10 Kubernetes Observability Questions That Show Up in Every DevOps Interview&lt;/a&gt;.&lt;/p&gt;
  &lt;/section&gt;
  &lt;section style=&quot;background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;Kc1c&quot;&gt;Перевод сделан специально для телеграм-канала &lt;a href=&quot;https://t.me/monitorim_it&quot; target=&quot;_blank&quot;&gt;Мониторим ИТ.&lt;/a&gt; Подписывайтесь! Там еще больше полезных постов о мониторинге.&lt;/p&gt;
  &lt;/section&gt;
  &lt;h3 id=&quot;6559&quot;&gt;Вопросы о наблюдаемости Kubernetes, от которых зависит ваш успех или провал на следующем собеседовании по DevOps.&lt;/h3&gt;
  &lt;p id=&quot;LDBM&quot;&gt;Я провёл собеседования с более чем 150 кандидатами на должность DevOps за последний год. И тема, на которой я больше всего сосредотачиваюсь, — наблюдаемость.&lt;/p&gt;
  &lt;p id=&quot;6440&quot;&gt;Когда я спрашиваю: «Расскажите мне о вашей архитектуре логирования», я обычно получаю в ответ либо пустые взгляды, либо расплывчатые ответы вроде «использую Prometheus и Grafana». Но этого уже недостаточно.&lt;/p&gt;
  &lt;p id=&quot;0fa7&quot;&gt;Компании ищут не просто людей, знающих названия инструментов. Им нужны инженеры, которые понимают, как на самом деле работают производственные системы. Как происходит обмен логами. Как собираются метрики. Как оповещения доходят до нужных людей в 3 часа ночи.&lt;/p&gt;
  &lt;p id=&quot;b678&quot;&gt;Поэтому я делюсь теми самыми вопросами, которые задаю, вместе с ответами, которые отличают младших специалистов от старших.&lt;/p&gt;
  &lt;figure id=&quot;hdjr&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/1*JVqLd413JrBp6bcQmSlQKQ.png&quot; width=&quot;700&quot; /&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;09a8&quot;&gt;Расскажите, пожалуйста, о вашей текущей архитектуре логирования. Как вы собираете и храните логи в своей среде Kubernetes?&lt;/h2&gt;
  &lt;p id=&quot;f6eb&quot;&gt;&lt;strong&gt;Вот как должен звучать хороший ответ:&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;OG91&quot;&gt;Мы используем паттерн сайдкара. Основной контейнер пишет логи в общий том. Sidecar Fluentd считывает эти логи и отправляет их в CloudWatch. Оттуда логи проходят через Kinesis Firehose в OpenSearch для быстрых запросов. Мы храним 7 дней в OpenSearch, 30 дней в CloudWatch и архивируем все в S3 для соответствия требованиям.&lt;/p&gt;
  &lt;p id=&quot;d371&quot;&gt;&lt;strong&gt;Почему этот ответ работает:&lt;/strong&gt; он показывает, что вы понимаете весь поток данных, а не только отдельные инструменты. Вы знаете, зачем нужен каждый компонент и как долго следует хранить данные на каждом этапе.&lt;/p&gt;
  &lt;p id=&quot;22c6&quot;&gt;&lt;strong&gt;Что делает этот ответ неработоспособным:&lt;/strong&gt; утверждение «мы используем Fluentd» без объяснения архитектуры. Или, что еще хуже, незнание того, куда на самом деле попадают ваши логи.&lt;/p&gt;
  &lt;h2 id=&quot;9acf&quot;&gt;Я вижу, вы используете OpenSearch. Почему бы просто не хранить все данные в CloudWatch? Разве это не проще?&lt;/h2&gt;
  &lt;p id=&quot;9ec8&quot;&gt;Этот вопрос проверяет ваше понимание компромиссов, а не только используемых инструментов.&lt;/p&gt;
  &lt;p id=&quot;8fad&quot;&gt;CloudWatch становится дорогим и медленным при обработке петабайтов данных. OpenSearch создан для высокоскоростных запросов к огромным массивам данных. Для небольшого стартапа CloudWatch вполне подойдет. Но в больших масштабах OpenSearch необходим для анализа в реальном времени, и он обходится дешевле при частых запросах.&lt;/p&gt;
  &lt;p id=&quot;4751&quot;&gt;&lt;strong&gt;Почему это важно:&lt;/strong&gt; боевые системы генерируют тонны логов. Вам нужно быстро запрашивать их, когда что-то ломается. CloudWatch для этого не предназначен. А вот OpenSearch — предназначен.&lt;/p&gt;
  &lt;p id=&quot;1482&quot;&gt;&lt;strong&gt;Тревожный ответ:&lt;/strong&gt; «Потому что все используют OpenSearch» или «В моей предыдущей компании его использовали». Это говорит о том, что вы не принимаете архитектурные решения, а просто копируете то, что делают другие.&lt;/p&gt;
  &lt;h2 id=&quot;89a9&quot;&gt;Вопрос 3: Можете объяснить разницу между логами и метриками? Когда следует использовать каждый из них?&lt;/h2&gt;
  &lt;p id=&quot;365c&quot;&gt;Большинство людей считают, что это одно и то же. Это не так.&lt;/p&gt;
  &lt;p id=&quot;5cd8&quot;&gt;&lt;strong&gt;Правильный ответ:&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;5aef&quot;&gt;Логи событий похожи на дневник. В них записывается всё, что произошло. Пользователь вошёл в систему из Индии. API выдал ошибку 500. Платеж не удался при оформлении заказа.&lt;/p&gt;
  &lt;p id=&quot;Gl7j&quot;&gt;Метрики — как монитор состояния. Они измеряют, как всё работает. CPU на уровне 80 %. Время ответа — 250 мс. Приложение работает 99,5 % времени.&lt;/p&gt;
  &lt;p id=&quot;ac8d&quot;&gt;Подумайте об этом так:&lt;/p&gt;
  &lt;p id=&quot;e001&quot;&gt;Логи = что произошло, Метрики = насколько хорошо работает&lt;/p&gt;
  &lt;p id=&quot;8bbb&quot;&gt;&lt;strong&gt;Вот почему вам нужны оба в продакшене:&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;7425&quot;&gt;Ваш API внезапно стал работать медленно. Метрики показывают, что проблема существует. Латентность выросла со 100 мс до 5 секунд. Что-то не так.&lt;/p&gt;
  &lt;p id=&quot;6a34&quot;&gt;Но метрики не говорят вам, ПОЧЕМУ это происходит медленно. Вот тут-то и пригодятся логи. Вы проверяете логи и обнаруживаете, что один конкретный запрос к базе данных выдал ошибку тайм-аута.&lt;/p&gt;
  &lt;p id=&quot;454e&quot;&gt;Метрики говорят вам, что есть пожар. Логи говорят вам, где он начался и что горит.&lt;/p&gt;
  &lt;p id=&quot;a601&quot;&gt;Невозможно устранить проблемы, используя только один из методов. Вам нужны оба.&lt;/p&gt;
  &lt;h2 id=&quot;6a8f&quot;&gt;Я вижу Prometheus и Grafana в вашем наборе инструментов. В чём разница? Зачем вам оба?&lt;/h2&gt;
  &lt;p id=&quot;2797&quot;&gt;Это сбивает с толку многих людей, потому что, видя, как эти инструменты используются вместе, они предполагают, что делают одно и то же.&lt;/p&gt;
  &lt;p id=&quot;7e8d&quot;&gt;Prometheus собирает и временно хранит метрики, обычно 10–15 дней. Он сканирует конечные точки вашего приложения каждые 15–30 секунд. Grafana просто визуализирует данные. Она делает некрасивые цифры красивыми. Представьте Prometheus как сборщик данных, а Grafana — как слой их визуализации.&lt;/p&gt;
  &lt;p id=&quot;79e7&quot;&gt;Вот в чём большинство людей ошибаются: Prometheus НЕ хранит долговременные данные. Если вам нужны исторические метрики за период более нескольких недель, вам потребуется что-то другое. Именно поэтому в боевых системах часто добавляют Thanos или Cortex для долговременного хранения данных.&lt;/p&gt;
  &lt;h2 id=&quot;49cc&quot;&gt;В вашем соглашении об уровне обслуживания (SLA) клиентам гарантируется 99,5% времени бесперебойной работы. Что это на самом деле означает с точки зрения допустимого времени простоя?&lt;/h2&gt;
  &lt;p id=&quot;eb04&quot;&gt;Я задаю этот вопрос, чтобы проверить, понимают ли кандидаты влияние своей работы на бизнес, а не только техническую сторону вопроса.&lt;/p&gt;
  &lt;p id=&quot;ceed&quot;&gt;В 30-дневном месяце у вас есть 2 592 000 секунд. 99,5% времени безотказной работы означает, что допустимый простой составляет 0,5%. Это 12 960 секунд, или максимум около 3,6 часов в месяц. Мы отслеживаем это в режиме реального времени, и клиенты могут видеть фактическое время безотказной работы на панелях мониторинга.&lt;/p&gt;
  &lt;p id=&quot;d74f&quot;&gt;Почему это важно: DevOps — это не просто поддержание работоспособности систем. Это выполнение обязательств перед бизнесом. Если вы не можете перевести технические показатели в бизнес-результаты, вы упускаете половину картины.&lt;/p&gt;
  &lt;h2 id=&quot;0ac0&quot;&gt;Как вы аутентифицируете Grafana для получения данных из CloudWatch? Расскажите подробнее о вашем подходе к обеспечению безопасности.&lt;/h2&gt;
  &lt;p id=&quot;1d0f&quot;&gt;Именно здесь я выявляю людей, которые просто следуют инструкциям, не понимая принципов безопасности.&lt;/p&gt;
  &lt;p id=&quot;e898&quot;&gt;Никогда не используем ключи доступа. Мы создаём роль IAM с правами чтения CloudWatch, а затем сопоставляем её с сервисной учётной записью пода Grafana с помощью OIDC. Тот же паттерн, что и у AWS Load Balancer Controller. Под автоматически получает эту роль. Никакие учётные данные не хранятся в коде.&lt;/p&gt;
  &lt;p id=&quot;2781&quot;&gt;Тревожный сигнал: если кто-то упоминает о жестком кодировании учетных данных AWS или их хранении в ConfigMaps, собеседование практически закончено. Это потенциальный инцидент, связанный с безопасностью боевой среды.&lt;/p&gt;
  &lt;h2 id=&quot;e2e2&quot;&gt;Какой интервал скрапинга вы используете для Prometheus и почему выбрали именно его?&lt;/h2&gt;
  &lt;p id=&quot;9ecd&quot;&gt;Это проверяет соответствие практических знаний теоретическим.&lt;/p&gt;
  &lt;p id=&quot;8f4d&quot;&gt;Наш стандарт — 15–30 секунд. Меньшее значение нежелательно, так как это приведет к перегрузке системы запросами. Мы настраиваем путь endpoint’а, обычно &lt;code&gt;/metrics&lt;/code&gt;, частоту сбора данных и время хранения в манифесте ServiceMonitor.&lt;/p&gt;
  &lt;p id=&quot;e5ed&quot;&gt;В продолжение я всегда спрашиваю: «Что произойдет, если установить время на 5 секунд?» Хорошие кандидаты знают, что это создает ненужную нагрузку. Отличные кандидаты действительно ломали систему таким образом и извлекали из этого урок.&lt;/p&gt;
  &lt;h2 id=&quot;e451&quot;&gt;Мы рассматриваем Datadog. Вы использовали и Datadog, и Prometheus плюс Grafana. Что вы думаете о том, когда стоит использовать каждый из них?&lt;/h2&gt;
  &lt;p id=&quot;ba74&quot;&gt;Этот вопрос покажет, понимаете ли вы компромисс между стоимостью и сложностью.&lt;/p&gt;
  &lt;p id=&quot;9603&quot;&gt;Datadog — это универсальное решение. Мониторинг, логи, метрики, панели мониторинга — всё встроено. Не требует настройки. Но оно очень дорогое. Prometheus плюс Grafana — это решение с открытым исходным кодом, более дешевое, но требует специальных знаний для правильной настройки. Ключевой момент: есть ли у вас команда и время? Используйте Prometheus. Хотите быстро продвинуться вперед и у вас есть бюджет? Используйте Datadog.&lt;/p&gt;
  &lt;p id=&quot;dce6&quot;&gt;По сути, я спрашиваю: можно ли принимать архитектурные решения, исходя из размера команды, бюджета и технических требований? Или вы просто выбираете то, что популярно в LinkedIn?&lt;/p&gt;
  &lt;h2 id=&quot;38bd&quot;&gt;Я заметил, что вы упомянули sidecar контейнеры для логирования. Можете объяснить, как работает этот паттерн?&lt;/h2&gt;
  &lt;p id=&quot;ce49&quot;&gt;Этот тест проверяет, понимаете ли вы Kubernetes-паттерны, а не просто отдельные контейнеры.&lt;/p&gt;
  &lt;p id=&quot;8984&quot;&gt;Оба контейнера работают в одном поде и используют общий смонтированный том. Ваше приложение записывает логи в этот том. Sidecar, например Fluentd, читает из того же тома и отправляет логи в CloudWatch или OpenSearch. Это позволяет отделить ведение логов от вашего приложения. Вы можете менять инфраструктуру логирования без изменения кода приложения.&lt;/p&gt;
  &lt;p id=&quot;9d39&quot;&gt;Почему этот паттерн важен: в продакшене вам нужно менять backend логирования, добавлять новые назначения или менять вендоров. Если логирование встроено в код приложения, любое изменение требует нового деплоя. Sidecar решает это.&lt;/p&gt;
  &lt;h2 id=&quot;520d&quot;&gt;Если бы завтра вы настраивали мониторинг для нового микросервисного приложения, какие метрики вы бы отслеживали с первого дня?&lt;/h2&gt;
  &lt;p id=&quot;ca87&quot;&gt;Это мой любимый вопрос, потому что он показывает, как кандидаты оценивают готовность к работе в боевых средах.&lt;/p&gt;
  &lt;p id=&quot;2078&quot;&gt;Задержка. Время ответа в миллисекундах. Частота ошибок. 500-е, 400-е по эндпоинтам. Пропускная способность. Количество запросов в секунду. Процент времени безотказной работы. Использование CPU и памяти по сервисам. Типы запросов. Шаблоны GET, POST, DELETE. Географические данные. Откуда поступает трафик. Это помогает соблюдать SLA и выявлять проблемы до того, как их заметят клиенты.&lt;/p&gt;
  &lt;p id=&quot;51c4&quot;&gt;Кандидаты, которые произвели на меня впечатление, добавляют: «И я бы настроил оповещения по этим показателям до запуска системы, а не после возникновения инцидента».&lt;/p&gt;
  &lt;figure id=&quot;Uy0N&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/0*sCtR4oWlUO6SBTlk&quot; width=&quot;700&quot; /&gt;
    &lt;figcaption&gt;Фото &lt;a href=&quot;https://unsplash.com/@marilezhava?utm_source=medium&amp;utm_medium=referral&quot; target=&quot;_blank&quot;&gt;Мари Лежавы&lt;/a&gt; на &lt;a href=&quot;https://unsplash.com/?utm_source=medium&amp;utm_medium=referral&quot; target=&quot;_blank&quot;&gt;Unsplash&lt;/a&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;e112&quot;&gt;Вот что важно на собеседованиях по DevOps.&lt;/h2&gt;
  &lt;p id=&quot;7270&quot;&gt;Речь идёт не о запоминании инструментов, а о понимании процесса. От приложения к сбору данных, к хранению, к визуализации и к оповещениям.&lt;/p&gt;
  &lt;p id=&quot;bfec&quot;&gt;Освоив этот принцип, вы сможете объяснить работу любой системы мониторинга. Будь то Prometheus и Grafana, Datadog, New Relic или любой новый инструмент, который появится в следующем году.&lt;/p&gt;
  &lt;p id=&quot;4a6b&quot;&gt;Я видел кандидатов с двухлетним опытом, которые отлично понимают этот процесс, и они с легкостью проходят собеседования. А также видел ветеранов с пятилетним стажем, которые запомнили команды инструментов, но не могут объяснить архитектуру, и терпят сокрушительное поражение.&lt;/p&gt;
  &lt;h2 id=&quot;d77f&quot;&gt;Чего на самом деле хотят компании?&lt;/h2&gt;
  &lt;p id=&quot;319e&quot;&gt;Когда я нанимаю DevOps-инженеров, я ищу человека, который может объяснить, почему он выбрал тот или иной инструмент, а не просто как им пользоваться.&lt;/p&gt;
  &lt;p id=&quot;42c5&quot;&gt;Можете ли отследить поток данных через несколько систем?&lt;/p&gt;
  &lt;p id=&quot;2ef8&quot;&gt;Понимаете ли вы влияние простоев на бизнес? Можете ли вы принимать компромиссные решения, учитывая стоимость, сложность и размер команды?&lt;/p&gt;
  &lt;p id=&quot;7d13&quot;&gt;Если вы умеете это делать, конкретные инструменты не имеют значения. Вы освоите тот набор технологий, который использует компания.&lt;/p&gt;
  &lt;h2 id=&quot;b3cf&quot;&gt;Как на самом деле подготовиться к этим вопросам&lt;/h2&gt;
  &lt;p id=&quot;ad1d&quot;&gt;Прекратите смотреть 10-часовые курсы по каждому инструменту мониторинга. Вместо этого постройте один полный стек мониторинга с нуля.&lt;/p&gt;
  &lt;ul id=&quot;xjOE&quot;&gt;
    &lt;li id=&quot;0d00&quot;&gt;Возьмите Prometheus и Grafana.&lt;/li&gt;
    &lt;li id=&quot;f103&quot;&gt;Настройте его для реального применения.&lt;/li&gt;
    &lt;li id=&quot;9c9f&quot;&gt;Сломайте. Почините.&lt;/li&gt;
    &lt;li id=&quot;b90b&quot;&gt;Поймите, зачем существует каждый элемент.&lt;/li&gt;
    &lt;li id=&quot;cbe8&quot;&gt;Затем проделайте то же самое с логами.&lt;/li&gt;
    &lt;li id=&quot;4cb3&quot;&gt;Настройте Fluentd или Fluent Bit.&lt;/li&gt;
    &lt;li id=&quot;593b&quot;&gt;Отправьте логи в CloudWatch или Loki.&lt;/li&gt;
    &lt;li id=&quot;d77c&quot;&gt;Делайте запросы. Ломайте пайплайн. Чините его.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;3f0f&quot;&gt;За две недели практических занятий вы узнаете больше, чем за шесть месяцев просмотра обучающих видеороликов.&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;YOJJ&quot;&gt;Подписывайтесь на телеграм-канал &lt;a href=&quot;https://t.me/monitorim_it&quot; target=&quot;_blank&quot;&gt;Мониторим ИТ&lt;/a&gt;, там еще больше полезной информации о мониторинге!&lt;/p&gt;
  &lt;/section&gt;

</content></entry><entry><id>monitorim_it:10-grafana-dashboards-to-understand-problems</id><link rel="alternate" type="text/html" href="https://teletype.in/@monitorim_it/10-grafana-dashboards-to-understand-problems?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=monitorim_it"></link><title>10 дашбордов Grafana, которые позволяют выявлять инциденты на ранней стадии</title><published>2025-12-19T11:34:05.058Z</published><updated>2025-12-19T11:34:05.058Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img4.teletype.in/files/b9/50/b950448a-8de8-474d-88cb-35c079b4d5a7.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/1*xHmQU9XSouvbF-92PBhvDA.png&quot;&gt;Это перевод оригинальной статьи 10 Grafana Dashboards That Catch Incidents Early.</summary><content type="html">
  &lt;section style=&quot;background-color:hsl(hsl(24,  24%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;Gdlb&quot;&gt;Это перевод оригинальной статьи &lt;a href=&quot;https://medium.com/@kaushalsinh73/10-grafana-dashboards-that-catch-incidents-early-d2357e5a5a71&quot; target=&quot;_blank&quot;&gt;10 Grafana Dashboards That Catch Incidents Early&lt;/a&gt;.&lt;/p&gt;
  &lt;/section&gt;
  &lt;section style=&quot;background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;DISd&quot;&gt;Перевод сделан специально для телеграм-канала &lt;a href=&quot;https://t.me/monitorim_it&quot; target=&quot;_blank&quot;&gt;Мониторим ИТ.&lt;/a&gt; Подписывайтесь! Там еще больше полезных постов о мониторинге.&lt;/p&gt;
  &lt;/section&gt;
  &lt;h3 id=&quot;02d6&quot;&gt;В этой статье собраны практичные, легко копируемые и вставляемые дашборды, которые выявляют проблемы на ранней стадии, позволяя устранить их до того, как это заметят клиенты.&lt;/h3&gt;
  &lt;figure id=&quot;XMQb&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/v2/resize:fit:875/1*xHmQU9XSouvbF-92PBhvDA.png&quot; width=&quot;700&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;3e7f&quot;&gt;Десять дашбордов Grafana — расход SLO, путь пользователя, насыщение, очереди, база данных, кэш, CDN, механизмы контроля релизов и «ситуационная комната» дежурного — которые позволяют обнаруживать инциденты на ранней стадии.&lt;/p&gt;
  &lt;p id=&quot;dd5f&quot;&gt;Давайте будем реалистами: тысяча графиков не спасет вас в 2 часа ночи. Спасут вас &lt;strong&gt;десять правильных графиков&lt;/strong&gt;, основанных на фундаментальных принципах и настроенные на сигнал, а не на шум. Ниже приведены дашборды, которые я снова и снова видел превращающими «загадочные падения» в «незначительные сбои». Каждый из них объясняет, как он работает, и содержит фрагмент кода, который вы можете адаптировать под себя.&lt;/p&gt;
  &lt;blockquote id=&quot;xE1d&quot;&gt;&lt;em&gt;Предположения: в примере использованы Prometheus/PromQL для метрик, Loki для логов, Tempo/OTel для трассировок. Меняйте компоненты в своей системе по мере необходимости; основные принципы остаются неизменными.&lt;/em&gt;&lt;/blockquote&gt;
  &lt;h2 id=&quot;0a77&quot;&gt;1) SLO Pulse: расход бюджета ошибок (канарейка среди канареек)&lt;/h2&gt;
  &lt;p id=&quot;17b1&quot;&gt;&lt;strong&gt;Что показывает: &lt;/strong&gt;расходуется ли бюджет ошибок прямо &lt;em&gt;сейчас&lt;/em&gt;?&lt;br /&gt;&lt;strong&gt;Панели:&lt;/strong&gt; скорость расхода за 4 часа и за 30 дней, коэффициент расхода, коэффициент успешности, наиболее проблемные конечные точки.&lt;/p&gt;
  &lt;p id=&quot;017f&quot;&gt;&lt;strong&gt;PromQL (многооконное вычисление выгорания):&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;kDC4&quot; data-lang=&quot;bash&quot;&gt;# 99.9% SLO
ratio_5m = sum(rate(http_request_duration_seconds_count{status!~&amp;quot;5..&amp;quot;}[5m]))
 / sum(rate(http_request_duration_seconds_count[5m]))
ratio_1h = sum(rate(http_request_duration_seconds_count{status!~&amp;quot;5..&amp;quot;}[1h]))
 / sum(rate(http_request_duration_seconds_count[1h]))
burn = ((1 - ratio_5m) / (1 - 0.999)) + ((1 - ratio_1h) / (1 - 0.999))&lt;/pre&gt;
  &lt;p id=&quot;373c&quot;&gt;&lt;strong&gt;Почему это работает:&lt;/strong&gt; функция Burn Rate сопоставляет оповещения с проблемами клиентов, а не с поверхностными скачками загрузки CPU.&lt;/p&gt;
  &lt;h2 id=&quot;5066&quot;&gt;2) Воронка пользовательского пути: где произошло снижение конверсий?&lt;/h2&gt;
  &lt;p id=&quot;20f7&quot;&gt;&lt;strong&gt;Что показывает:&lt;/strong&gt; какой этап в последовательности «поиск → товар → оформление заказа → оплата» вызывает сбой — &lt;em&gt;практически в режиме реального времени&lt;/em&gt;.&lt;br /&gt;&lt;strong&gt;Панели:&lt;/strong&gt; процент конверсии на каждом этапе, отклонение относительно прошлой недели, задержка на этапе p95, тепловая карта отвалов по регионам.&lt;/p&gt;
  &lt;p id=&quot;11a8&quot;&gt;&lt;strong&gt;PromQL:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;FnE5&quot; data-lang=&quot;bash&quot;&gt;# Per-step success ratios
sum(rate(app_event_total{event=&amp;quot;checkout_success&amp;quot;}[5m]))
/ ignoring(event) group_left
sum(rate(app_event_total{event=&amp;quot;checkout_start&amp;quot;}[5m]))&lt;/pre&gt;
  &lt;p id=&quot;1628&quot;&gt;&lt;strong&gt;Почему это работает:&lt;/strong&gt; вы обнаруживаете неработающие кнопки, сбои сторонних разработчиков или предупреждения о проблемах с функциями задолго до того, как это сделает Twitter.&lt;/p&gt;
  &lt;h2 id=&quot;8cb7&quot;&gt;3) USE-дашборд для инфраструктуры(Utilization, Saturation, Errors)&lt;/h2&gt;
  &lt;p id=&quot;732b&quot;&gt;&lt;strong&gt;Что показывает:&lt;/strong&gt; нагрузка на CPU/память/ввод-вывод &lt;em&gt;и&lt;/em&gt; фактическая загрузка (очереди, ограничение скорости).&lt;br /&gt;&lt;strong&gt;Панели:&lt;/strong&gt; загрузка CPU узла, длина очереди выполнения, загрузка диска (%), время ожидания диска (disk await), потери в сети, контейнеры с ограничением (throttled).&lt;/p&gt;
  &lt;p id=&quot;abe0&quot;&gt;&lt;strong&gt;PromQL:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;mIJc&quot; data-lang=&quot;bash&quot;&gt;# CPU saturation (runnable tasks)
node_load1 / count(count(node_cpu_seconds_total{mode=&amp;quot;idle&amp;quot;}) by (instance))
# Disk saturation
rate(node_disk_io_time_seconds_total[5m])&lt;/pre&gt;
  &lt;p id=&quot;7cd3&quot;&gt;&lt;strong&gt;Почему это работает:&lt;/strong&gt; метод USE выявляет &lt;em&gt;запас прочности&lt;/em&gt;. Вы увидите надвигающуюся конкуренцию за ресурсы ещё до того, как показатели упрутся в 100%.&lt;/p&gt;
  &lt;h2 id=&quot;4709&quot;&gt;4) Очереди и обратное давление: панель «Справляемся ли мы?»&lt;/h2&gt;
  &lt;p id=&quot;4659&quot;&gt;&lt;strong&gt;Что это показывает:&lt;/strong&gt; задержки и пропускную способность для Kafka/Rabbit/SQS; состояние потребителей.&lt;br /&gt;&lt;strong&gt;Панели:&lt;/strong&gt; задержка по группам потребителей, скорость записи и чтения, количество сообщений в dead-letter очередях, возраст самого старого сообщения.&lt;/p&gt;
  &lt;p id=&quot;fcee&quot;&gt;&lt;strong&gt;PromQL:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;t8xh&quot; data-lang=&quot;bash&quot;&gt;# Kafka consumer lag (exporter varies)
max(kafka_consumergroup_lag{group=&amp;quot;payments&amp;quot;}) by (topic, partition)
# Oldest message age (seconds)
max_over_time(kafka_topic_oldest_message_age_seconds[5m])&lt;/pre&gt;
  &lt;p id=&quot;2abf&quot;&gt;&lt;strong&gt;Почему это работает:&lt;/strong&gt; медленные потребители услуги часто являются &lt;em&gt;первым&lt;/em&gt; первым признаком проблем на последующих этапах обработки.&lt;/p&gt;
  &lt;h2 id=&quot;e46d&quot;&gt;5) Проверка базы данных в реальных условиях: соединения, блокировки, медленные запросы&lt;/h2&gt;
  &lt;p id=&quot;0b1c&quot;&gt;&lt;strong&gt;Что это показывает:&lt;/strong&gt; насколько работоспособна Postgres/MySQL под реальной нагрузкой?&lt;br /&gt;&lt;strong&gt;Панели:&lt;/strong&gt; активные соединения против максимального количества, количество и длительность ожидания блокировки, время выполнения запроса p95 по типу, топ-N медленных запросов (Loki), задержка репликации.&lt;/p&gt;
  &lt;p id=&quot;5e37&quot;&gt;&lt;strong&gt;PromQL (Postgres):&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;wCsl&quot; data-lang=&quot;bash&quot;&gt;# Waiting locks
sum(pg_locks_count{mode!=&amp;quot;AccessShareLock&amp;quot;,state=&amp;quot;waiting&amp;quot;})
# Replication lag seconds
max(pg_stat_replication_lag_seconds)&lt;/pre&gt;
  &lt;p id=&quot;dda1&quot;&gt;&lt;strong&gt;Loki (медленный запрос к таблице):&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;IdXx&quot; data-lang=&quot;bash&quot;&gt;{app=&amp;quot;postgres&amp;quot;} |= &amp;quot;duration:&amp;quot; | json | duration &amp;gt; 200ms
| stats count() by query&lt;/pre&gt;
  &lt;p id=&quot;ec0c&quot;&gt;&lt;strong&gt;Почему это работает: &lt;/strong&gt;ожидания блокировок резко растут перед тем, как приложение падает.&lt;/p&gt;
  &lt;h2 id=&quot;45e3&quot;&gt;6) Cache Truth Serum: обращения с учетом контекста&lt;/h2&gt;
  &lt;p id=&quot;da57&quot;&gt;&lt;strong&gt;Что это вам говорит:&lt;/strong&gt; не переплачиваете ли вы за обращения к основному хранилищу?&lt;br /&gt;&lt;strong&gt;Панели:&lt;/strong&gt; соотношение обращений/потерь во времени, причины потерь (новые данные — cold, или удалённые из кэша — evicted), задержка кэша p95, объём вытесненных данных.&lt;/p&gt;
  &lt;p id=&quot;0f0c&quot;&gt;&lt;strong&gt;PromQL (Redis/Dragonfly):&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;SsLJ&quot; data-lang=&quot;bash&quot;&gt;sum(rate(redis_keyspace_hits_total[5m]))
/ (sum(rate(redis_keyspace_hits_total[5m])) + sum(rate(redis_keyspace_misses_total[5m])))&lt;/pre&gt;
  &lt;p id=&quot;b775&quot;&gt;&lt;strong&gt;Почему это работает:&lt;/strong&gt; незаметное падение hit ratio — одно из самых ранних предупреждений о проблемах.&lt;/p&gt;
  &lt;h2 id=&quot;de30&quot;&gt;7) Раннее предупреждение на уровне CDN и edge: задержки, TLS и ошибки на источнике.&lt;/h2&gt;
  &lt;p id=&quot;c807&quot;&gt;&lt;strong&gt;Что это показывает:&lt;/strong&gt; есть ли помехи на сети?&lt;br /&gt;&lt;strong&gt;Панели:&lt;/strong&gt; p90 и p99 задержки edge по POP, время установления соединения TLS, процент ошибок 5xx от источника, состояние кэша (HIT/MISS/BYPASS).&lt;/p&gt;
  &lt;p id=&quot;bafd&quot;&gt;&lt;strong&gt;LogQL (структурированные логи edge):&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;bGdN&quot; data-lang=&quot;bash&quot;&gt;{source=&amp;quot;edge&amp;quot;} | json | status &amp;gt;= 500
| stats sum(count) by pop, route&lt;/pre&gt;
  &lt;p id=&quot;f6b6&quot;&gt;&lt;strong&gt;Почему это работает:&lt;/strong&gt; вы быстро отделяете проблемы origin от неисправного POP или провайдера, не тратя время на ложные поиски.&lt;/p&gt;
  &lt;h2 id=&quot;734d&quot;&gt;8) Ограничения при развертывании: feature-флаги и изменения ошибок по когортам&lt;/h2&gt;
  &lt;p id=&quot;403d&quot;&gt;&lt;strong&gt;Что это показывает:&lt;/strong&gt; навредила ли новая функция какой-то конкретной когорте пользователей?&lt;br /&gt;&lt;strong&gt;Панели:&lt;/strong&gt; разница в уровне ошибок при &lt;code&gt;flag=on&lt;/code&gt; и при &lt;code&gt;off&lt;/code&gt;, разница в задержке p95, наиболее затронутые конечные точки, подсказка по автоматическому откату.&lt;/p&gt;
  &lt;p id=&quot;a5c6&quot;&gt;&lt;strong&gt;PromQL (сравнение когорт):&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;bWuc&quot; data-lang=&quot;bash&quot;&gt;err_on  = sum(rate(http_requests_total{status=~&amp;quot;5..&amp;quot;,flag=&amp;quot;on&amp;quot;}[5m]))
/ sum(rate(http_requests_total{flag=&amp;quot;on&amp;quot;}[5m]))
err_off = sum(rate(http_requests_total{status=~&amp;quot;5..&amp;quot;,flag=&amp;quot;off&amp;quot;}[5m]))
delta   = err_on - err_off&lt;/pre&gt;
  &lt;p id=&quot;072c&quot;&gt;&lt;strong&gt;Почему это работает:&lt;/strong&gt; вы получаете не просто корреляцию, а &lt;em&gt;причинно-&lt;/em&gt; следственные связи. Идеально подходит для поэтапной подачи информации.&lt;/p&gt;
  &lt;h2 id=&quot;5fa2&quot;&gt;9) Мини-карта трассировок: куда на самом деле уходит время?&lt;/h2&gt;
  &lt;p id=&quot;daf9&quot;&gt;&lt;strong&gt;Что это показывает:&lt;/strong&gt; какой сервис или эндпоинт отвечает за последний всплеск задержек.&lt;br /&gt;&lt;strong&gt;Панели:&lt;/strong&gt; граф зависимостей сервисов (Tempo/OTel), p95 длительности спанов по операциям, очаги ошибок, автоматическая фокусировка на «красной ноде».&lt;/p&gt;
  &lt;p id=&quot;ef4d&quot;&gt;&lt;strong&gt;Преобразование Grafana:&lt;/strong&gt; используйте панель «График сервисов» (Tempo) и таблицу со столбцами &lt;code&gt;service.operation&lt;/code&gt;, &lt;code&gt;p95&lt;/code&gt;, &lt;code&gt;error_rate&lt;/code&gt;.&lt;/p&gt;
  &lt;p id=&quot;1698&quot;&gt;&lt;strong&gt;Почему это работает:&lt;/strong&gt; трассировка устраняет взаимные обвинения. Горячий узел светится красным; вы связываетесь с нужной командой.&lt;/p&gt;
  &lt;h2 id=&quot;0aea&quot;&gt;10) Ситуационная комната дежурного: один взгляд, одно место&lt;/h2&gt;
  &lt;p id=&quot;1726&quot;&gt;&lt;strong&gt;Что это вам говорит:&lt;/strong&gt; «Всё ли у нас в порядке?» И если нет, &lt;em&gt;куда смотреть в первую очередь&lt;/em&gt;.&lt;br /&gt;&lt;strong&gt;Структура:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;lSVI&quot;&gt;
    &lt;li id=&quot;3d43&quot;&gt;&lt;strong&gt;Строка 1:&lt;/strong&gt; Индикатор расхода SLO, активные оповещения (небольшая таблица), контакт дежурного.&lt;/li&gt;
    &lt;li id=&quot;3612&quot;&gt;&lt;strong&gt;Строка 2:&lt;/strong&gt; задержка p95 + частота ошибок (глобальная), объем запросов, насыщение (CPU/очередь).&lt;/li&gt;
    &lt;li id=&quot;85b0&quot;&gt;&lt;strong&gt;Строка 3:&lt;/strong&gt; «Последние 5 релизов» (аннотации), ошибки по конечным точкам, топ медленных запросов.&lt;/li&gt;
    &lt;li id=&quot;87e4&quot;&gt;&lt;strong&gt;Строка 4:&lt;/strong&gt; Ссылки на руководство по выполнению заданий и переключатель «убрать шум» (сравнение с прошлой неделей).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;782e&quot;&gt;&lt;strong&gt;ASCII-эскиз:&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;n9LR&quot; data-lang=&quot;bash&quot;&gt;+------------------+----------------------+------------------+
|  SLO Burn Gauge  |   Active Alerts      |  On-call: @you   |
+------------------+----------------------+------------------+
| p95 Latency      | Error Rate           | Request Volume   |
+------------------+----------------------+------------------+
| CPU Saturation   | Queue Lag            | DB Lock Waits    |
+------------------+----------------------+------------------+
| Deploy Annotations | Endpoint Errors    | Slow Queries     |
+--------------------+--------------------+------------------+
| Runbooks | Feature Flags | Toggle: compare to last week      |
+--------------------------------------------------------------+&lt;/pre&gt;
  &lt;p id=&quot;f305&quot;&gt;&lt;strong&gt;Почему это работает:&lt;/strong&gt; во время инцидента вам не нужна навигация. Вам нужна приборная панель пилота.&lt;/p&gt;
  &lt;h2 id=&quot;a5ee&quot;&gt;Алерты, которые не засыпают вас сообщениями.&lt;/h2&gt;
  &lt;p id=&quot;fdab&quot;&gt;Каждый дашборд сопоставьте с одним алертом, &lt;strong&gt;учитывающим бюджет&lt;/strong&gt;:&lt;/p&gt;
  &lt;ul id=&quot;qCIj&quot;&gt;
    &lt;li id=&quot;31c6&quot;&gt;&lt;strong&gt;SLO Burn:&lt;/strong&gt; срабатывание при 2× burn (быстро), 1× burn (медленно) с группировкой по меткам ({&lt;code&gt;service, region&lt;/code&gt;}), 10 минут для быстрого, 30 минут для медленного.&lt;/li&gt;
    &lt;li id=&quot;3b0e&quot;&gt;&lt;strong&gt;Очереди:&lt;/strong&gt; оповещение по &lt;em&gt;наклону задержки,&lt;/em&gt; а не по абсолютному значению: &lt;code&gt;deriv(lag[10m]) &amp;gt; 0&lt;/code&gt; и &lt;code&gt;lag &amp;gt; threshold&lt;/code&gt;.&lt;/li&gt;
    &lt;li id=&quot;3b29&quot;&gt;&lt;strong&gt;БД:&lt;/strong&gt; время ожидания блокировки &amp;gt; 20 с в течение 3 мин; задержка репликации &amp;gt; 60 с.&lt;/li&gt;
    &lt;li id=&quot;4cc2&quot;&gt;&lt;strong&gt;CDN:&lt;/strong&gt; ошибки origin 5xx &amp;gt; 1% в любом POP в течение 5 минут.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;6513&quot;&gt;&lt;strong&gt;Grafana Mimir/Alerting JSON (скетч):&lt;/strong&gt;&lt;/p&gt;
  &lt;pre id=&quot;TSWZ&quot; data-lang=&quot;bash&quot;&gt;{
  &amp;quot;title&amp;quot;: &amp;quot;Fast burn (99.9% SLO)&amp;quot;,
  &amp;quot;condition&amp;quot;: &amp;quot;B&amp;quot;,
  &amp;quot;data&amp;quot;: [
    {
      &amp;quot;refId&amp;quot;: &amp;quot;A&amp;quot;,
      &amp;quot;expr&amp;quot;: &amp;quot;((1 - ratio_5m)/(1-0.999)) &amp;gt; 2&amp;quot;,
      &amp;quot;intervalMs&amp;quot;: 60000
    }
  ],
  &amp;quot;for&amp;quot;: &amp;quot;10m&amp;quot;,
  &amp;quot;labels&amp;quot;: {&amp;quot;severity&amp;quot;:&amp;quot;page&amp;quot;,&amp;quot;team&amp;quot;:&amp;quot;api&amp;quot;},
  &amp;quot;annotations&amp;quot;: {&amp;quot;runbook&amp;quot;:&amp;quot;https://…/runbooks/slo-burn&amp;quot;}
}&lt;/pre&gt;
  &lt;h2 id=&quot;e32b&quot;&gt;Маленькие привычки, которые дают большой эффект&lt;/h2&gt;
  &lt;ul id=&quot;8PYw&quot;&gt;
    &lt;li id=&quot;fed1&quot;&gt;&lt;strong&gt;Сдвиги во времени&lt;/strong&gt; ( &lt;code&gt;now-1w&lt;/code&gt;) на ключевых панелях нормализуют сезонность, связанную с днями недели.&lt;/li&gt;
    &lt;li id=&quot;c59a&quot;&gt;&lt;strong&gt;Аннотации,&lt;/strong&gt; полученные в ходе CI/CD (развертывания, изменения функций), уменьшают количество догадок.&lt;/li&gt;
    &lt;li id=&quot;83bc&quot;&gt;&lt;strong&gt;Единообразие единиц измерения:&lt;/strong&gt; отображать миллисекунды (а не секунды), проценты (а не десятичные дроби).&lt;/li&gt;
    &lt;li id=&quot;075c&quot;&gt;&lt;strong&gt;Связи:&lt;/strong&gt; каждая панель должна вести либо на углублённый дашборд, либо в режим исследования.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;4d4c&quot;&gt;Заключительные мысли&lt;/h2&gt;
  &lt;p id=&quot;4618&quot;&gt;Вам не нужно больше графиков — вам нужно &lt;strong&gt;более четкое понимание цели&lt;/strong&gt;. Начните с SLO и ситуационной комнаты для дежурных, добавьте очереди и базу, затем внедрите механизмы контроля, позволяющие выявлять проблемы в группе на ранней стадии. Сделайте это, и инциденты перестанут быть внезапными пугающими событиями и начнут превращаться в управляемые истории.&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;Intg&quot;&gt;Подписывайтесь на телеграм-канал &lt;a href=&quot;https://t.me/monitorim_it&quot; target=&quot;_blank&quot;&gt;Мониторим ИТ&lt;/a&gt;, там еще больше полезной информации о мониторинге!&lt;/p&gt;
  &lt;/section&gt;

</content></entry></feed>