Владимир Гурьянов Solution Architect системы мониторинга Okmeter vladimir.guryanov@flant.com Чем занимаюсь Инженер, тимлид и архитектор с 10-летним стажем. Опыт С 2010 г. занимаюсь разработкой. С 2021 г. работаю в компании «Флант». С 2022 г. — руководитель разработки «хранилища мониторинга». С чем работаю больше всего Обо мне
Опыт «Фланта» За 14 лет более тысячи компаний построили инфраструктуру с нашей поддержкой 1 000+ компаний доверяют нам свой production > 150 компаний под нашим управлением > 6 000 серверов работают на наших решениях > 30 000 приложений Количество заказчиков 2008 1 2010 11 2012 25 2014 52 2016 52 2018 107 2020 131 2022 202 Прямо сейчас:
Опыт Okmeter используют Okmeter в качестве системы мониторинга 250+ компаний в production > 6 000 хостов с каждого хоста > 5 000 метрик по фактическим значениям > 30 000 000 метрик в минуту зрелый продукт, сотни проектов 12 лет эксплуатации круглосуточная помощь в любой ситуации 24/7 поддержка
Современный ландшафт «Бизнес-метрики» в приложениях ~ 10 000–50 000 метрик с одного хоста Kubernetes Микросервисная архитектура Облака Релизы по 1–100 раз в неделю
Современный ландшафт «Бизнес-метрики» в приложениях ~ 10 000–50 000 метрик с одного хоста Релизы по 10–100 раз в день Kubernetes Микросервисная архитектура Облака Инфраструктура динамичная
Какая система мониторинга нам нужна? Может обрабатывать миллионы метрик Может делать сложные агрегации над данными Может собирать «бизнес-метрики» Может сама находить источники метрик
Кто вы, мистер Prometheus? Prometheus Service Discovering EC2, Consul, K8s… Prometheus взаимодействует с различными API для получения списка источников данных. 1. Service Discovering
Кто вы, мистер Prometheus? Prometheus Service Discovering Scraping EC2, Consul, K8s… Prometheus взаимодействует с различными API для получения списка источников данных. 1. Service Discovering 2. Scraping Собирает данные с источников по pull- модели и протоколу HTTP.
Кто вы, мистер Prometheus? Prometheus Service Discovering Scraping EC2, Consul, K8s… exporter 3rd Party Application Источники данных: ● exporter — приложение, которое само собирает метрики и отдает их в формате Prometheus Prometheus взаимодействует с различными API для получения списка источников данных. 1. Service Discovering 2. Scraping Собирает данные с источников по pull- модели и протоколу HTTP.
Кто вы, мистер Prometheus? Prometheus Service Discovering Scraping EC2, Consul, K8s… exporter client library 3rd Party Application Application Источники данных: ● exporter — приложение, которое само собирает метрики и отдает их в формате Prometheus ● приложения Prometheus взаимодействует с различными API для получения списка источников данных. 1. Service Discovering 2. Scraping Собирает данные с источников по pull- модели и протоколу HTTP.
Кто вы, мистер Prometheus? Prometheus Service Discovering Scraping Storage EC2, Consul, K8s… exporter client library 3rd Party Application Application Prometheus взаимодействует с различными API для получения списка источников данных. 1. Service Discovering 2. Scraping Собирает данные с источников по pull- модели и протоколу HTTP. 3. Storage Полученные данные сохраняются в Time Series Database (TSDB).
Кто вы, мистер Prometheus? Prometheus Service Discovering Scraping Storage 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.
Кто вы, мистер Prometheus? Prometheus Service Discovering Scraping Storage Rules 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 Создание новых метрик. Проверка «триггеров».
Кто вы, мистер Prometheus? Prometheus Service Discovering Scraping Storage 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 Создание новых метрик. Проверка «триггеров».
Кто вы, мистер Prometheus? Prometheus взаимодействует с различными API для получения списка источников данных. 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 ts 10 ts 10 ts 10 ts 10 ts 10 Вариант № 1: с каждого источника в свой «файл» Как собираются данные со многих источников
ts 10 ts 10 ts 10 ts 10 ts 10 ts 10 ts 10 ts 10 ts 10 ts 10 ts 10 ts 10 1 000 000 Вариант № 1: с каждого источника в свой «файл» Как собираются данные со многих источников
ts 10 ts 10 ts 10 ts 10 ts 10 ts 10 ts 10 ts 10 ts 10 ts 10 ts 10 ts 10 1 000 000 Вариант № 1: с каждого источника в свой «файл» Как собираются данные со многих источников
ts 10 ts 10 ts 10 ts 10 ts 10 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 Как собираются данные со многих источников
Нам нужен Prometheus! База данных, заточенная под хранение метрик Полноценный язык запросов — PromQL Инструментарий для сбора метрик с приложения Service Discovery
Нам нужен Prometheus! База данных, заточенная под хранение метрик Полноценный язык запросов — PromQL Инструментарий для сбора метрик с приложения Service Discovery Большое комьюнити
Prometheus не рассчитан для длительного хранения данных If your local 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/
Kubernetes Cluster НА Prometheus Exporter Application ● Сбор метрик ● Отказоустойчивость Для чего LB Grafana ● Не масштабируется ● Нет возможности хранить данные долго Минусы
Привет, Снежана! Уже 20 минут часть сервисов недоступна. Что случилось? ВАСЯ СНЕЖАНА Да кто ж его знает? У нас глобальный сбой, пытаемся найти причины, но у нас 10 ДЦ и везде разные системы мониторинга…
А можно без Prometheus Kubernetes Cluster App Exporter Grafana Mimir 1 Prometheus Agent 2 VM Agent 3 Grafana Agent ● Не будет работать HPA / VPA Нюансы
А можно без Prometheus Kubernetes Cluster App Exporter Grafana Mimir 1 Prometheus Agent 2 VM Agent 3 Grafana Agent ● Не будет работать HPA / VPA ● Могут быть вопросы с record rules Нюансы
А можно без Prometheus Kubernetes Cluster App Exporter Grafana Mimir 1 Prometheus Agent 2 VM Agent 3 Grafana Agent ● Не будет работать HPA / VPA ● Могут быть вопросы с record rules ● Могут проблемы с алертами Нюансы
А можно без Prometheus Kubernetes Cluster App Exporter Grafana Mimir 1 Prometheus Agent 2 VM Agent 3 Grafana Agent ● Не будет работать HPA / VPA ● Могут быть вопросы с record rules ● Могут проблемы с алертами Нюансы ● Использовать Prometheus c retention 1d Решение
Хранение метрик Mimir ● Микросервисная версия Prometheus ● С возможностью разделения мониторинговых данных по тенантам ● С возможностью мультитенантных запросов Mimir — это
Blocks Storage (S3) 3 Compactor Запись метрик Query Frontend Querier Store Gateway Result Cache etcd Read path Mimir Принимает запросы, валидирует их и направляет в Ingester Ruler Alertmanager 1. Distributor Отвечает на запросы по данным за последние 2 часа 2. Ingester Distributor Ingester Write path 1 2
Compactor Запись метрик Query Frontend Querier Store Gateway Result Cache 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
Запись метрик Query Frontend Querier Store Gateway Result Cache etcd 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
Запись метрик Query Frontend Querier Store Gateway Result Cache etcd 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
Querier Ingester Store Gateway Blocks Storage (S3) Чтение метрик etcd Mimir Принимает запрос, валидирует и разделяет на подзапросы 1. Query Frontend Проверяет, есть ли нужный ответ в кэше 2. Query Frontend Distributor Compactor Ruler Alertmanager Write path Query Frontend Result Cache Read path 1 2
Querier Ingester Store Gateway Blocks Storage (S3) Чтение метрик etcd Mimir Принимает запрос, валидирует и разделяет на подзапросы 1. Query Frontend Проверяет, есть ли нужный ответ в кэше 2. Query Frontend Distributor Compactor Ruler Alertmanager Write path Query Frontend Result Cache Read path 1 2 Кэширование данных Многоуровневое кэширование данных позволяет сократить аппаратные ресурсы и время для отображения данных.
Ingester Store Gateway Blocks Storage (S3) Чтение метрик etcd Mimir Принимает запрос, валидирует и разделяет на подзапросы 1. Query Frontend Проверяет, есть ли нужный ответ в кэше 2. Query Frontend Забирает запросы, для которых не нашлось ответа в кэше 3. Querier Distributor Compactor Ruler Alertmanager Write path Query Frontend Querier Result Cache Read path 1 2 3
Blocks Storage (S3) Чтение метрик etcd Mimir Принимает запрос, валидирует и разделяет на подзапросы 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
Чтение метрик etcd Mimir Принимает запрос, валидирует и разделяет на подзапросы 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
Чтение метрик etcd Mimir Принимает запрос, валидирует и разделяет на подзапросы 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
Чтение метрик etcd Mimir Принимает запрос, валидирует и разделяет на подзапросы 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
Mimir Надёжность Result Cache etcd Read path Write path Distributor Compactor Query Frontend Querier Ruler Alertmanager Независимое горизонтальное масштабирование компонентов Все компоненты Mimir поддерживают горизонтальное масштабирование. Это позволяет гибко подстраиваться под любые нагрузки и экономить ресурсы. Отказоустойчивость Компоненты Mimir запускаются в нескольких экземплярах, а данные реплицируются между ними. Так достигается необходимый уровень отказоустойчивости — в том числе и для беспростойного обновления компонентов. Blocks Storage (S3) Ingester Ingester Store Gateway Store Gateway
Mimir Масштабируемость Result Cache etcd Read path Write path Distributor Compactor Query Frontend Querier Независимое горизонтальное масштабирование компонентов Все компоненты Mimir поддерживают горизонтальное масштабирование. Это позволяет гибко подстраиваться под любые нагрузки и экономить ресурсы. Ruler Alertmanager Отказоустойчивость Компоненты Mimir запускаются в нескольких экземплярах, а данные реплицируются между ними. Так достигается необходимый уровень отказоустойчивости — в том числе и для беспростойного обновления компонентов. Blocks Storage (S3) Ingester Ingester Ingester Распределение нагрузки Все компоненты Mimir поддерживают механизмы шардирования и решардирования данных для распределения нагрузки. Ingester Store Gateway Store gateway
Mimir Масштабируемость Result Cache Read path Write path Distributor Compactor Query Frontend Querier Ruler Alertmanager Независимое горизонтальное масштабирование компонентов Все компоненты Mimir поддерживают горизонтальное масштабирование. Это позволяет гибко подстраиваться под любые нагрузки и экономить ресурсы. Отказоустойчивость Компоненты Mimir запускаются в нескольких экземплярах, а Mimir реплицируются между ними. Так достигается необходимый уровень отказоустойчивости — в том числе и для беспростойного обновления компонентов. Blocks Storage (S3) Ingester Ingester Ingester Распределение нагрузки Все компоненты Mimir поддерживают механизмы шардирования и решардирования данных для распределения нагрузки. Ingester Store Gateway etcd Store gateway
Mimir Масштабируемость Result Cache etcd Read path Write path Distributor Query Frontend Querier Store Gateway Независимое горизонтальное масштабирование компонентов Все компоненты Mimir поддерживают горизонтальное масштабирование. Это позволяет гибко подстраиваться под любые нагрузки и экономить ресурсы. Отказоустойчивость Компоненты Mimir запускаются в нескольких экземплярах, а данные реплицируются между ними. Так достигается необходимый уровень отказоустойчивости — в том числе и для беспростойного обновления компонентов. Ingester Ingester Ingester Ruler Alertmanager Распределение нагрузки Все компоненты Mimir поддерживают механизмы шардирования и решардирования данных для распределения нагрузки. Оптимизация хранения Compactor оптимизирует хранение блоков за счет дедупликации данных и агрегации данных нескольких блоков в блоки большего размера. Compactor Blocks Storage (S3)
Итого Mimir ● Отказоустойчивость из коробки ● Горизонтальное масштабирование (с возможностью шардирования данных) ● Возможность хранить мониторинговые данные десятки лет ● Разделение мониторинговых данных Плюсы ● Сложность ● Дополнительные компетенции Минусы ● Нет механизмов авторизации Нерешенные вопросы Mimir Result Cache etcd Distributor Query Frontend Querier Store Gateway Ingester Compactor Blocks Storage (S3) Ruler Alertmanager Read path Write path
Итого Mimir ● Отказоустойчивость из коробки ● Горизонтальное масштабирование (с возможностью шардирования данных) ● Возможность хранить мониторинговые данные десятки лет ● Разделение мониторинговых данных Плюсы ● Сложность ● Дополнительные компетенции Минусы ● Нет механизмов авторизации ● Высокое потребление ресурсов Нерешенные вопросы Mimir Result Cache etcd Distributor Query Frontend Querier Store Gateway Ingester Compactor Blocks Storage (S3) Ruler Alertmanager Read path Write path
Итого Mimir ● Отказоустойчивость из коробки ● Горизонтальное масштабирование (с возможностью шардирования данных) ● Возможность хранить мониторинговые данные десятки лет ● Разделение мониторинговых данных Плюсы ● Сложность ● Дополнительные компетенции Минусы ● Нет механизмов авторизации ● Высокое потребление ресурсов ● Скорость работы зависит от производительности сети Нерешенные вопросы Mimir Result Cache etcd Distributor Query Frontend Querier Store Gateway Ingester Compactor Blocks Storage (S3) Ruler Alertmanager Read path Write path
okmeter.ru Владимир Гурьянов Флант DevOps и Kubernetes, обслуживание 24/7 habr.com/ru/company/flant youtube.com/c/Флант flant.ru t.me/flant_ru t.me/Magvai69 vladimir.guryanov@flant.com Ещё один доклад Оценить доклад Solution Architect системы мониторинга Okmeter