Инженер, тимлид и архитектор с 10-летним стажем. Опыт С 2010 г. занимаюсь разработкой. С 2021 г. работаю в компании «Флант». С 2022 г. — руководитель разработки «хранилища мониторинга». С чем работаю больше всего Обо мне
с нашей поддержкой 1 000+ компаний доверяют нам свой production > 150 компаний под нашим управлением > 6 000 серверов работают на наших решениях > 30 000 приложений Количество заказчиков 2008 1 2010 11 2012 25 2014 52 2016 52 2018 107 2020 131 2022 202 Прямо сейчас:
в production > 6 000 хостов с каждого хоста > 5 000 метрик по фактическим значениям > 30 000 000 метрик в минуту зрелый продукт, сотни проектов 12 лет эксплуатации круглосуточная помощь в любой ситуации 24/7 поддержка
K8s… Prometheus взаимодействует с различными API для получения списка источников данных. 1. Service Discovering 2. Scraping Собирает данные с источников по pull- модели и протоколу HTTP.
K8s… exporter 3rd Party Application Источники данных: • exporter — приложение, которое само собирает метрики и отдает их в формате Prometheus Prometheus взаимодействует с различными API для получения списка источников данных. 1. Service Discovering 2. Scraping Собирает данные с источников по pull- модели и протоколу HTTP.
K8s… exporter client library 3rd Party Application Application Источники данных: • exporter — приложение, которое само собирает метрики и отдает их в формате Prometheus • приложения Prometheus взаимодействует с различными API для получения списка источников данных. 1. Service Discovering 2. Scraping Собирает данные с источников по pull- модели и протоколу HTTP.
Consul, K8s… exporter client library 3rd Party Application Application Prometheus взаимодействует с различными API для получения списка источников данных. 1. Service Discovering 2. Scraping Собирает данные с источников по pull- модели и протоколу HTTP. 3. Storage Полученные данные сохраняются в Time Series Database (TSDB).
Consul, K8s… exporter client library 3rd Party Application Grafana Application Prometheus взаимодействует с различными API для получения списка источников данных. 1. Service Discovering 2. Scraping Собирает данные с источников по pull- модели и протоколу HTTP. 3. Storage Полученные данные сохраняются в Time Series Database (TSDB). 4. Визуализация данных Для получения данных используется PromQL. Для визуализации, как правило, используется Grafana.
and Alerts EC2, Consul, K8s… exporter client library 3rd Party Application Grafana Application Prometheus взаимодействует с различными API для получения списка источников данных. 1. Service Discovering 2. Scraping Собирает данные с источников по pull- модели и протоколу HTTP. 3. Storage Полученные данные сохраняются в Time Series Database (TSDB). 4. Визуализация данных Для получения данных используется PromQL. Для визуализации, как правило, используется Grafana. 5. Prometheus Rules Создание новых метрик. Проверка «триггеров».
and Alerts EC2, Consul, K8s… exporter client library 3rd Party Application Alertmanager Email, Slack, Telegram, etc. Grafana Application Prometheus взаимодействует с различными API для получения списка источников данных. 1. Service Discovering 2. Scraping Собирает данные с источников по pull- модели и протоколу HTTP. 3. Storage Полученные данные сохраняются в Time Series Database (TSDB). 6. Alertmanager Постобработка уведомлений и отправка их по каналам доставки. 4. Визуализация данных Для получения данных используется PromQL. Для визуализации, как правило, используется Grafana. 5. Prometheus Rules Создание новых метрик. Проверка «триггеров».
получения списка источников данных. 1. Service Discovering 2. Scraping Собирает данные с источников по pull- модели и протоколу HTTP. 3. Storage Полученные данные сохраняются в Time Series Database (TSDB). Prometheus Service Discovering Scraping Rules And Alerts ec2, konsul, K8s… exporter client library 3rd Part Application Alertmanager Email, Slack, Telegram, etc Grafana Application Storage 6. Alertmanager Постобработка уведомлений и отправка их по каналам доставки. 4. Визуализация данных Для получения данных используется PromQL. Для визуализации, как правило, используется Grafana. 5. Prometheus Rules Создание новых метрик. Проверка «триггеров».
ts 10 ts 10 ts 10 ts 10 ts 10 ts 10 ts 10 1 000 000 Вариант № 1: с каждого источника в свой «файл» 1 000 000 IO / 60 sec 1 Как собираются данные со многих источников
ts 10 ts 10 ts 10 ts 10 ts 10 ts 10 ts 10 1 000 000 Вариант № 1: с каждого источника в свой «файл» 1 000 000 IO / 60 sec = 16 500 IOPS 1 Как собираются данные со многих источников
10 ts 10 ts 10 ts 10 ts 10 ts 10 ts 10 ts 10 ts 10 ts 10 ts 10 ts 10 ts 10 ts 10 ts 10 ts 10 ts 10 Вариант № 2: со всех источников в один «файл» 16 byte * 1 000 000 Как собираются данные со многих источников
storage becomes corrupted for whatever reason, the best strategy to address the problem is to shut down Prometheus then remove the entire storage directory. You can also try removing individual block directories, or the WAL directory to resolve the problem. Note that this means losing approximately two hours data per block directory. Again, Prometheus's local storage is not intended to be durable long-term storage; external solutions offer extended retention and data durability. If both time and size retention policies are specified, whichever triggers first will be used. https://prometheus.io/docs/prometheus/latest/storage/
1 Prometheus Agent 2 VM Agent 3 Grafana Agent • Не будет работать HPA / VPA • Могут быть вопросы с record rules • Могут проблемы с алертами Нюансы • Использовать Prometheus c retention 1d Решение
Frontend Querier Store Gateway Result Cache etcd Read path Mimir Ruler Alertmanager Принимает запросы, валидирует их и направляет в Ingester 1. Distributor Distributor Write path 1
Store Gateway Result Cache etcd Read path Mimir Принимает запросы, валидирует их и направляет в Ingester Ruler Alertmanager 1. Distributor Отвечает на запросы по данным за последние 2 часа 2. Ingester Distributor Ingester Write path 1 2
etcd Read path Mimir Принимает запросы, валидирует их и направляет в Ingester 1. Distributor Отвечает на запросы по данным за последние 2 часа 2. Ingester Блок после формирования отправляется в S3 3. Blocks Storage (S3) Ruler Alertmanager Distributor Ingester Blocks Storage (S3) Write path 1 2 3
Read path Mimir Принимает запросы, валидирует их и направляет в Ingester 1. Distributor Отвечает на запросы по данным за последние 2 часа 2. Ingester Блок после формирования отправляется в S3 3. Blocks Storage (S3) Оптимизирует хранение блоков 4. Compactor Ruler Alertmanager Distributor Ingester Compactor Blocks Storage (S3) Write path 1 2 3 4
Read path Mimir Принимает запросы, валидирует их и направляет в Ingester 1. Distributor Отвечает на запросы по данным за последние 2 часа 2. Ingester Блок после формирования отправляется в S3 Ruler Alertmanager 3. Blocks Storage (S3) Оптимизирует хранение блоков 4. Compactor Distributor Ingester Compactor Blocks Storage (S3) Write path 1 2 3 4
Mimir Принимает запрос, валидирует и разделяет на подзапросы 1. Query Frontend Проверяет, есть ли нужный ответ в кэше 2. Query Frontend Distributor Compactor Ruler Alertmanager Write path Query Frontend Result Cache Read path 1 2
Mimir Принимает запрос, валидирует и разделяет на подзапросы 1. Query Frontend Проверяет, есть ли нужный ответ в кэше 2. Query Frontend Distributor Compactor Ruler Alertmanager Write path Query Frontend Result Cache Read path 1 2 Кэширование данных Многоуровневое кэширование данных позволяет сократить аппаратные ресурсы и время для отображения данных.
Принимает запрос, валидирует и разделяет на подзапросы 1. Query Frontend Проверяет, есть ли нужный ответ в кэше 2. Query Frontend Забирает запросы, для которых не нашлось ответа в кэше 3. Querier Distributor Compactor Ruler Alertmanager Write path Query Frontend Querier Result Cache Read path 1 2 3
и разделяет на подзапросы 1. Query Frontend Проверяет, есть ли нужный ответ в кэше 2. Query Frontend Забирает запросы, для которых не нашлось ответа в кэш 3. Querier Получает данные из Ingester и S3 (используя интерфейс Store Gateway) 4. Querier Distributor Compactor Ruler Alertmanager Write path Query Frontend Querier Store Gateway Result Cache Read path Ingester 1 2 3 4 4
подзапросы 1. Query Frontend Проверяет, есть ли нужный ответ в кэше 2. Query Frontend Забирает запросы, для которых не нашлось ответа в кэш 3. Querier Получает данные из Ingester и S3 (используя интерфейс Store Gateway) 4. Querier Distributor Compactor Ruler Alertmanager Write path Query Frontend Querier Store Gateway Result Cache Read path Ingester Blocks Storage (S3) Ищет нужные данные на основании индекса и запрашивает данные в S3 5. Store Gateway 1 2 3 4 4 5
подзапросы 1. Query Frontend Проверяет, есть ли нужный ответ в кэше 2. Query Frontend Забирает запросы, для которых не нашлось ответа в кэш 3. Querier Получает данные из Ingester и S3 (используя интерфейс Store Gateway) 4. Querier Distributor Compactor Ruler Alertmanager Write path Query Frontend Querier Store Gateway Result Cache Read path Ingester Blocks Storage (S3) Производит поиск нужных данных на основании индекса и запрашивает данные в S3 5. Store Gateway Собирает все данные, выполняет PromQL и возвращает ответ 6. Query Frontend 1 2 3 4 4 5 6
подзапросы 1. Query Frontend Проверяет, есть ли нужный ответ в кэше 2. Query Frontend Забирает запросы, для которых не нашлось ответа в кэш 3. Querier Получает данные из Ingester и S3 (используя интерфейс Store Gateway) 4. Querier Distributor Compactor Ruler Alertmanager Write path Query Frontend Querier Store Gateway Result Cache Read path Ingester Blocks Storage (S3) Ищет нужные данные на основании индекса и запрашивает данные в S3 5. Store Gateway Собирает все данные, выполняет PromQL и возвращает ответ 6. Query Frontend 1 2 3 4 4 5 6
Compactor Query Frontend Querier Ruler Alertmanager Независимое горизонтальное масштабирование компонентов Все компоненты Mimir поддерживают горизонтальное масштабирование. Это позволяет гибко подстраиваться под любые нагрузки и экономить ресурсы. Отказоустойчивость Компоненты Mimir запускаются в нескольких экземплярах, а данные реплицируются между ними. Так достигается необходимый уровень отказоустойчивости — в том числе и для беспростойного обновления компонентов. Blocks Storage (S3) Ingester Ingester Store Gateway Store Gateway
Compactor Query Frontend Querier Независимое горизонтальное масштабирование компонентов Все компоненты Mimir поддерживают горизонтальное масштабирование. Это позволяет гибко подстраиваться под любые нагрузки и экономить ресурсы. Ruler Alertmanager Отказоустойчивость Компоненты Mimir запускаются в нескольких экземплярах, а данные реплицируются между ними. Так достигается необходимый уровень отказоустойчивости — в том числе и для беспростойного обновления компонентов. Blocks Storage (S3) Ingester Ingester Ingester Распределение нагрузки Все компоненты Mimir поддерживают механизмы шардирования и решардирования данных для распределения нагрузки. Ingester Store Gateway Store gateway
Query Frontend Querier Ruler Alertmanager Независимое горизонтальное масштабирование компонентов Все компоненты Mimir поддерживают горизонтальное масштабирование. Это позволяет гибко подстраиваться под любые нагрузки и экономить ресурсы. Отказоустойчивость Компоненты Mimir запускаются в нескольких экземплярах, а Mimir реплицируются между ними. Так достигается необходимый уровень отказоустойчивости — в том числе и для беспростойного обновления компонентов. Blocks Storage (S3) Ingester Ingester Ingester Распределение нагрузки Все компоненты Mimir поддерживают механизмы шардирования и решардирования данных для распределения нагрузки. Ingester Store Gateway etcd Store gateway
Query Frontend Querier Store Gateway Независимое горизонтальное масштабирование компонентов Все компоненты Mimir поддерживают горизонтальное масштабирование. Это позволяет гибко подстраиваться под любые нагрузки и экономить ресурсы. Отказоустойчивость Компоненты Mimir запускаются в нескольких экземплярах, а данные реплицируются между ними. Так достигается необходимый уровень отказоустойчивости — в том числе и для беспростойного обновления компонентов. Ingester Ingester Ingester Ruler Alertmanager Распределение нагрузки Все компоненты Mimir поддерживают механизмы шардирования и решардирования данных для распределения нагрузки. Оптимизация хранения Compactor оптимизирует хранение блоков за счет дедупликации данных и агрегации данных нескольких блоков в блоки большего размера. Compactor Blocks Storage (S3)
возможностью шардирования данных) • Возможность хранить мониторинговые данные десятки лет • Разделение мониторинговых данных Плюсы • Сложность • Дополнительные компетенции Минусы • Нет механизмов авторизации Нерешенные вопросы Mimir Result Cache etcd Distributor Query Frontend Querier Store Gateway Ingester Compactor Blocks Storage (S3) Ruler Alertmanager Read path Write path
возможностью шардирования данных) • Возможность хранить мониторинговые данные десятки лет • Разделение мониторинговых данных Плюсы • Сложность • Дополнительные компетенции Минусы • Нет механизмов авторизации • Высокое потребление ресурсов Нерешенные вопросы Mimir Result Cache etcd Distributor Query Frontend Querier Store Gateway Ingester Compactor Blocks Storage (S3) Ruler Alertmanager Read path Write path
возможностью шардирования данных) • Возможность хранить мониторинговые данные десятки лет • Разделение мониторинговых данных Плюсы • Сложность • Дополнительные компетенции Минусы • Нет механизмов авторизации • Высокое потребление ресурсов • Скорость работы зависит от производительности сети Нерешенные вопросы Mimir Result Cache etcd Distributor Query Frontend Querier Store Gateway Ingester Compactor Blocks Storage (S3) Ruler Alertmanager Read path Write path
youtube.com/c/Флант flant.ru t.me/flant_ru t.me/Magvai69 vladimir.guryanov@flant.com Ещё один доклад Оценить доклад Solution Architect системы мониторинга Okmeter