Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Мимо тёщиного дома я без метрик не хожу. То им пром в забор просуну, то mimir'у покажу!

flant
March 21, 2023

Мимо тёщиного дома я без метрик не хожу. То им пром в забор просуну, то mimir'у покажу!

Доклад архитектора решений Okmeter (https://okmeter.ru/) Владимира Гурьянова на DevOpsConf 2023.

flant

March 21, 2023
Tweet

More Decks by flant

Other Decks in Technology

Transcript

  1. Мимо тёщиного дома я без метрик
    не хожу. То им пром в забор просуну
    то mimir-у покажу!

    View Slide

  2. Владимир Гурьянов
    Solution Architect системы
    мониторинга Okmeter
    vladimir.guryanov@flant.com
    Чем занимаюсь
    Инженер, тимлид и архитектор с 10-летним стажем.
    Опыт
    С 2010 г. занимаюсь разработкой.
    С 2021 г. работаю в компании «Флант».
    С 2022 г. — руководитель разработки «хранилища мониторинга».
    С чем работаю больше всего
    Обо мне

    View Slide

  3. Опыт «Фланта»
    За 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
    Прямо сейчас:

    View Slide

  4. Опыт Okmeter
    используют Okmeter в качестве
    системы мониторинга
    250+ компаний
    в production
    > 6 000 хостов
    с каждого хоста
    > 5 000 метрик
    по фактическим значениям
    > 30 000 000 метрик в минуту
    зрелый продукт, сотни проектов
    12 лет эксплуатации
    круглосуточная помощь
    в любой ситуации
    24/7 поддержка

    View Slide

  5. View Slide

  6. Zabbix initial release:
    April 2001, 21 years ago

    View Slide

  7. Как выглядел ИТ-ландшафт
    15–20 лет назад?

    View Slide

  8. Ландшафт 15 лет назад
    Физические серверы

    View Slide

  9. Ландшафт 15 лет назад
    Монолитные приложения
    Физические серверы

    View Slide

  10. Ландшафт 15 лет назад
    Монолитные приложения
    Физические серверы
    Релизы 1–2 раза в год

    View Slide

  11. Ландшафт 15 лет назад
    Монолитная инфраструктура
    Монолитные приложения
    Физические серверы
    Релизы 1–2 раза в год

    View Slide

  12. Ландшафт 15 лет назад
    Монолитные приложения
    Физические серверы
    ~ 10 000 метрик на весь проект
    Монолитная инфраструктура
    Релизы 1–2 раза в год

    View Slide

  13. Как сейчас выглядит ИТ-ландшафт?

    View Slide

  14. Современный ландшафт
    Облака

    View Slide

  15. Современный ландшафт
    Микросервисная архитектура
    Облака

    View Slide

  16. Современный ландшафт
    Kubernetes
    Микросервисная архитектура
    Облака

    View Slide

  17. Современный ландшафт
    Релизы по 1–100 раз в неделю
    Kubernetes
    Микросервисная архитектура
    Облака

    View Slide

  18. Современный ландшафт
    «Бизнес-метрики» в приложениях
    Kubernetes
    Микросервисная архитектура
    Облака
    Релизы по 1–100 раз в неделю

    View Slide

  19. Современный ландшафт
    «Бизнес-метрики» в приложениях
    ~ 10 000–50 000 метрик с одного хоста
    Kubernetes
    Микросервисная архитектура
    Облака
    Релизы по 1–100 раз в неделю

    View Slide

  20. Современный ландшафт
    «Бизнес-метрики» в приложениях
    ~ 10 000–50 000 метрик с одного хоста
    Релизы по 10–100 раз в день
    Kubernetes
    Микросервисная архитектура
    Облака
    Инфраструктура динамичная

    View Slide

  21. Какая система мониторинга нам нужна?
    Может сама находить источники метрик

    View Slide

  22. Какая система мониторинга нам нужна?
    Может собирать «бизнес-метрики»
    Может сама находить источники метрик

    View Slide

  23. Какая система мониторинга нам нужна?
    Может делать сложные агрегации над данными
    Может собирать «бизнес-метрики»
    Может сама находить источники метрик

    View Slide

  24. Какая система мониторинга нам нужна?
    Может обрабатывать миллионы метрик
    Может делать сложные агрегации над данными
    Может собирать «бизнес-метрики»
    Может сама находить источники метрик

    View Slide

  25. View Slide

  26. Нужна система мониторинга,
    подходящая под современные реалии!

    View Slide

  27. Нам нужен
    Prometheus?

    View Slide

  28. Кто вы, мистер Prometheus?
    Prometheus

    View Slide

  29. Кто вы, мистер Prometheus?
    Prometheus
    Service
    Discovering

    View Slide

  30. Кто вы, мистер Prometheus?
    Prometheus
    Service
    Discovering
    EC2, Consul,
    K8s…
    Prometheus взаимодействует
    с различными API для получения
    списка источников данных.
    1. Service Discovering

    View Slide

  31. Кто вы, мистер Prometheus?
    Prometheus
    Service
    Discovering
    Scraping
    EC2, Consul,
    K8s…
    Prometheus взаимодействует
    с различными API для получения
    списка источников данных.
    1. Service Discovering
    2. Scraping
    Собирает данные с источников по pull-
    модели и протоколу HTTP.

    View Slide

  32. Кто вы, мистер Prometheus?
    Prometheus
    Service
    Discovering
    Scraping
    EC2, Consul,
    K8s…
    exporter
    3rd Party
    Application
    Источники данных:
    ● exporter — приложение, которое
    само собирает метрики и отдает
    их в формате Prometheus
    Prometheus взаимодействует
    с различными API для получения
    списка источников данных.
    1. Service Discovering
    2. Scraping
    Собирает данные с источников по pull-
    модели и протоколу HTTP.

    View Slide

  33. Кто вы, мистер 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.

    View Slide

  34. Кто вы, мистер 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).

    View Slide

  35. Кто вы, мистер 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.

    View Slide

  36. Кто вы, мистер 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
    Создание новых метрик. Проверка «триггеров».

    View Slide

  37. Кто вы, мистер 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
    Создание новых метрик. Проверка «триггеров».

    View Slide

  38. Кто вы, мистер 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
    Создание новых метрик. Проверка «триггеров».

    View Slide

  39. Как устроена TSDB

    View Slide

  40. Как собираются данные с одного источника

    View Slide

  41. источник
    Как собираются данные с одного источника

    View Slide

  42. 60 sec
    ts
    10
    источник
    Как собираются данные с одного источника

    View Slide

  43. 60 sec
    ts
    10
    источник
    data
    Как собираются данные с одного источника

    View Slide

  44. 60 sec
    ts
    10
    источник
    data timestamp
    Как собираются данные с одного источника

    View Slide

  45. 60 sec
    ts
    10
    источник
    data timestamp
    16 byte
    Как собираются данные с одного источника

    View Slide

  46. 60 sec
    ts
    10
    источник «файл»
    Как собираются данные с одного источника

    View Slide

  47. 60 sec
    ts
    10 ts
    10 ts
    10 ts
    10
    источник «файл»
    Как собираются данные с одного источника

    View Slide

  48. 60 sec
    ts
    10 ts
    10 ts
    10 ts
    10
    источник «файл»
    Как собираются данные с одного источника
    линия на графике

    View Slide

  49. А если у нас
    1 000 000 источников?

    View Slide

  50. Вариант № 1: с каждого источника в свой «файл»
    Как собираются данные со многих источников

    View Slide

  51. ts
    10 ts
    10 ts
    10 ts
    10
    Вариант № 1: с каждого источника в свой «файл»
    Как собираются данные со многих источников

    View Slide

  52. ts
    10 ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10 ts
    10 ts
    10
    Вариант № 1: с каждого источника в свой «файл»
    Как собираются данные со многих источников

    View Slide

  53. 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: с каждого источника в свой «файл»
    Как собираются данные со многих источников

    View Slide

  54. 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: с каждого источника в свой «файл»
    Как собираются данные со многих источников

    View Slide

  55. 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: с каждого источника в свой «файл»
    Как собираются данные со многих источников

    View Slide

  56. 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
    Как собираются данные со многих источников

    View Slide

  57. 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 = 16 500 IOPS
    1
    Как собираются данные со многих источников

    View Slide

  58. 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 = 16 500 IOPS 16 500 IOPS * 16 byte
    1 2
    Как собираются данные со многих источников

    View Slide

  59. 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 = 16 500 IOPS 16 500 IOPS * 16 byte = 22 GB / day
    1 2
    Как собираются данные со многих источников

    View Slide

  60. 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 = 16 500 IOPS
    1 2
    16 byte
    16 500 IOPS * 16 byte = 22 GB / day
    Как собираются данные со многих источников

    View Slide

  61. 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 = 16 500 IOPS
    1 2
    16 byte
    16 500 IOPS * 16 byte = 22 GB / day
    Как собираются данные со многих источников

    View Slide

  62. 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 = 16 500 IOPS
    1 2
    16 byte 16 KB
    16 500 IOPS * 16 byte = 22 GB / day
    Как собираются данные со многих источников

    View Slide

  63. 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 = 16 500 IOPS
    1 2 16 500 IOPS * 16 KB
    Как собираются данные со многих источников

    View Slide

  64. 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 = 16 500 IOPS
    1 2 16 500 IOPS * 16 KB = 22 TB / day
    Как собираются данные со многих источников

    View Slide

  65. 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 = 16 500 IOPS 16 500 IOPS * 16 KB = 22 TB / day
    1 2
    Как собираются данные со многих источников

    View Slide

  66. Вариант № 2: со всех источников в один «файл»
    Как собираются данные со многих источников

    View Slide

  67. Вариант № 2: со всех источников в один «файл»
    1 000 000
    Как собираются данные со многих источников

    View Slide

  68. Вариант № 2: со всех источников в один «файл»
    1 000 000
    Как собираются данные со многих источников

    View Slide

  69. Вариант № 2: со всех источников в один «файл»
    1 000 000
    ts
    10 ts
    10 ts
    10
    Как собираются данные со многих источников

    View Slide

  70. Вариант № 2: со всех источников в один «файл»
    1 000 000
    ts
    10 ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10
    Как собираются данные со многих источников

    View Slide

  71. Вариант № 2: со всех источников в один «файл»
    1 000 000
    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 ts
    10 ts
    10
    ts
    10 ts
    10
    Как собираются данные со многих источников

    View Slide

  72. 1 000 000
    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 ts
    10 ts
    10
    ts
    10 ts
    10
    Вариант № 2: со всех источников в один «файл»
    16 byte * 1 000 000
    Как собираются данные со многих источников

    View Slide

  73. 1 000 000
    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 ts
    10 ts
    10
    ts
    10 ts
    10
    Вариант № 2: со всех источников в один «файл»
    16 byte * 1 000 000 = 15 MB / 60 sec
    Как собираются данные со многих источников

    View Slide

  74. 1 000 000
    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 ts
    10 ts
    10
    ts
    10 ts
    10
    Вариант № 2: со всех источников в один «файл»
    16 byte * 1 000 000 = 15 MB / 60 sec = 23 GB / day
    Как собираются данные со многих источников

    View Slide

  75. Вариант № 2: со всех источников в один «файл»
    1 000 000
    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 ts
    10 ts
    10
    ts
    10 ts
    10
    ?
    24 hours
    Как собираются данные со многих источников

    View Slide

  76. Вариант № 2: со всех источников в один «файл»
    1 000 000
    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 ts
    10 ts
    10
    ts
    10 ts
    10
    ?
    24 hours
    Как собираются данные со многих источников

    View Slide

  77. Вариант № 2: со всех источников в один «файл»
    1 000 000
    ?
    24 hours
    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 ts
    10 ts
    10
    ts
    10 ts
    10
    Как собираются данные со многих источников

    View Slide

  78. Вариант № 2: со всех источников в один «файл»
    1 000 000
    ?
    24 hours
    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 ts
    10 ts
    10
    ts
    10 ts
    10
    Как собираются данные со многих источников

    View Slide

  79. Проблема

    View Slide

  80. Проблема
    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

    View Slide

  81. 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
    Читаем
    всегда горизонтально
    Проблема

    View Slide

  82. 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
    Проблема
    Пишем
    всегда вертикально

    View Slide

  83. Как решать?

    View Slide

  84. 1 000 000
    Как решать?

    View Slide

  85. ts
    10 ts
    10 ts
    10
    1 000 000
    Как решать?

    View Slide

  86. ts
    10 ts
    10 ts
    10
    1 000 000
    ts
    10 ts
    10
    ts
    10 ts
    10
    ts
    10 ts
    10
    Как решать?

    View Slide

  87. ts
    10 ts
    10 ts
    10
    1 000 000
    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 hour
    Как решать?

    View Slide

  88. ts
    10 ts
    10 ts
    10
    1 000 000
    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 hour
    Как решать?

    View Slide

  89. ts
    10 ts
    10 ts
    10
    1 000 000
    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 hour
    Как решать?

    View Slide

  90. ts
    10 ts
    10
    1 000 000
    ts
    10
    ts
    10
    ts
    10
    ts
    10 ts
    10
    ts
    10 ts
    10
    ts
    10 ts
    10
    1 hour
    Как решать?

    View Slide

  91. Как решать?

    View Slide

  92. ts
    10 ts
    10
    ts
    10 ts
    10
    ts
    10 ts
    10
    1 hour
    Как решать?

    View Slide

  93. ts
    10 ts
    10
    ts
    10 ts
    10
    ts
    10 ts
    10
    1 hour
    ts
    10 ts
    10
    ts
    10 ts
    10
    ts
    10 ts
    10
    1 hour
    Как решать?

    View Slide

  94. Спустя месяц...
    Как решать?

    View Slide

  95. ts
    10 ts
    10
    ts
    10 ts
    10
    ts
    10 ts
    10
    1 hour
    ts
    10 ts
    10
    ts
    10 ts
    10
    ts
    10 ts
    10
    1 hour
    ts
    10 ts
    10
    ts
    10 ts
    10
    ts
    10 ts
    10
    1 hour
    ts
    10 ts
    10
    ts
    10 ts
    10
    ts
    10 ts
    10
    1 hour
    Как решать?

    View Slide

  96. Операция “merge”
    ts
    10 ts
    10
    ts
    10 ts
    10
    ts
    10 ts
    10
    1 hour
    ts
    10 ts
    10
    ts
    10 ts
    10
    ts
    10 ts
    10
    1 hour
    ts
    10 ts
    10
    ts
    10 ts
    10
    ts
    10 ts
    10
    1 hour
    ts
    10 ts
    10
    ts
    10 ts
    10
    ts
    10 ts
    10
    1 hour
    4 hours

    View Slide

  97. 16 hours
    Операция “merge”

    View Slide

  98. Проблема
    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

    View Slide

  99. Проблема больше не проблема
    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

    View Slide

  100. ts
    10 ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10 ts
    10 ts
    10

    View Slide

  101. Как идентифицировать?
    ts
    10 ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10 ts
    10 ts
    10
    ?

    View Slide

  102. Как идентифицировать?
    ts
    10 ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10 ts
    10 ts
    10
    LabelSet

    View Slide

  103. Как идентифицировать?
    {
    ключ: значение,
    ключ: значение, …
    }
    LabelSet

    View Slide

  104. Как идентифицировать?
    {
    ключ: значение,
    ключ: значение, …
    }
    {
    name: cpu_usage,
    node: curiosity,
    core: 4
    }
    LabelSet

    View Slide

  105. Как идентифицировать?
    ts
    10 ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10 ts
    10 ts
    10
    LabelSet

    View Slide

  106. {
    name: cpu_usage,
    node: curiosity,
    core: 0
    }
    Как идентифицировать?
    ts
    10 ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10 ts
    10 ts
    10
    {
    name: cpu_usage,
    node: curiosity,
    core: 1
    }
    {
    name: cpu_usage,
    node: curiosity,
    core: 999999
    }
    LabelSet

    View Slide

  107. {
    name: cpu_usage,
    node: curiosity,
    core: 0
    }
    Как идентифицировать?
    ts
    10 ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10 ts
    10 ts
    10
    {ls}
    {
    name: cpu_usage,
    node: curiosity,
    core: 1
    }
    {
    name: cpu_usage,
    node: curiosity,
    core: 999999
    }

    View Slide

  108. {
    name: cpu_usage,
    node: curiosity,
    core: 0
    }
    Как идентифицировать?
    ts
    10 ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10 ts
    10 ts
    10
    {
    name: cpu_usage,
    node: curiosity,
    core: 1
    }
    {
    name: cpu_usage,
    node: curiosity,
    core: 999999
    }
    #t_id
    {ls}

    View Slide

  109. {
    name: cpu_usage,
    node: curiosity,
    core: 0
    }
    Как идентифицировать?
    ts
    10 ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10 ts
    10 ts
    10
    {
    name: cpu_usage,
    node: curiosity,
    core: 1
    }
    {
    name: cpu_usage,
    node: curiosity,
    core: 999999
    }
    Временной ряд
    #t_id
    {ls}

    View Slide

  110. Как идентифицировать?
    1 000 000
    {ls}
    {ls}
    {ls}

    View Slide

  111. Как идентифицировать?
    map
    1 000 000
    {ls}
    {ls}
    {ls}

    View Slide

  112. Как идентифицировать?
    {ls}➞#id
    map
    {ls}
    {ls}
    {ls}
    1 000 000

    View Slide

  113. {ls}➞#id
    Как идентифицировать?
    {ls}➞#id
    map
    {ls}
    {ls}
    {ls}
    1 000 000

    View Slide

  114. {ls}➞#id ts
    10
    #id
    Как идентифицировать?
    {ls}➞#id
    map
    {ls}
    {ls}
    {ls}
    1 000 000

    View Slide

  115. {ls}➞#id ts
    10
    #id
    Как идентифицировать?
    {ls}➞#id
    map
    ts
    10
    #id
    {ls}
    {ls}
    {ls}
    1 000 000

    View Slide

  116. Как идентифицировать?
    {ls}➞#id {ls}➞#id
    map
    ts
    10
    #id
    {ls}➞#id ts
    10
    #id
    {ls}
    1 000 000
    {ls}
    {ls}

    View Slide

  117. {ls}
    1 000 000
    {ls}
    {ls}
    Как идентифицировать?
    {ls}➞#id
    map
    ts
    10
    #id
    {ls}➞#id ts
    10
    #id
    {ls}➞#id

    View Slide

  118. {ls}
    1 000 000
    {ls}
    {ls}
    Как идентифицировать?
    {ls}➞#id
    map
    ts
    10
    #id
    {ls}➞#id ts
    10
    #id
    {ls}➞#id
    {ls}➞#id ts
    10
    #id

    View Slide

  119. {ls}
    1 000 000
    {ls}
    {ls}
    Как идентифицировать?
    {ls}➞#id
    map
    ts
    10
    #id
    {ls}➞#id
    {ls}➞#id ts
    10
    #id
    {ls}➞#id ts
    10
    #id
    ts
    10
    #id
    ts
    10
    #id

    View Slide

  120. {ls}
    1 000 000
    {ls}
    {ls}
    Как идентифицировать?
    {ls}➞#id
    map
    ts
    10
    #id
    {ls}➞#id
    {ls}➞#id ts
    10
    #id
    {ls}➞#id ts
    10
    #id
    ts
    10
    #id
    ts
    10
    #id
    ts
    10
    #id
    ts
    10
    #id ts
    10
    #id
    ts
    10
    #id
    ts
    10
    ts
    10
    ts
    10

    View Slide

  121. {ls}
    1 000 000
    {ls}
    {ls}
    Как идентифицировать?
    {ls}➞#id
    map
    ts
    10
    #id
    {ls}➞#id
    {ls}➞#id ts
    10
    #id
    {ls}➞#id ts
    10
    #id
    ts
    10
    #id
    ts
    10
    #id
    ts
    10
    #id
    ts
    10
    #id ts
    10
    #id
    ts
    10
    #id
    ts
    10
    ts
    10
    ts
    10

    View Slide

  122. {ls}
    1 000 000
    {ls}
    {ls}
    Как идентифицировать?
    {ls}➞#id
    map
    ts
    10
    #id
    {ls}➞#id
    {ls}➞#id ts
    10
    #id
    {ls}➞#id ts
    10
    #id
    ts
    10
    #id
    ts
    10
    #id
    ts
    10
    #id
    ts
    10
    #id ts
    10
    #id
    ts
    10
    #id
    ts
    10
    ts
    10
    ts
    10
    {ls}➞#id {ls}➞#id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    map

    View Slide

  123. {ls}
    1 000 000
    {ls}
    {ls}
    Как идентифицировать?
    {ls}➞#id
    map
    ts
    10
    #id
    {ls}➞#id
    {ls}➞#id ts
    10
    #id
    {ls}➞#id ts
    10
    #id
    ts
    10
    #id
    ts
    10
    #id
    ts
    10
    #id
    ts
    10
    #id ts
    10
    #id
    ts
    10
    #id
    ts
    10
    ts
    10
    ts
    10
    {ls}➞#id {ls}➞#id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    map {ls}➞#id {ls}➞#id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    map

    View Slide

  124. {ls}
    1 000 000
    {ls}
    {ls}
    Рисуем график
    {ls}➞#id
    map
    ts
    10
    #id
    {ls}➞#id
    {ls}➞#id ts
    10
    #id
    {ls}➞#id ts
    10
    #id
    ts
    10
    #id
    ts
    10
    #id
    ts
    10
    #id
    ts
    10
    #id ts
    10
    #id
    ts
    10
    #id
    ts
    10
    ts
    10
    ts
    10
    {ls}➞#id {ls}➞#id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    map {ls}➞#id {ls}➞#id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    map

    View Slide

  125. {ls}➞#id ts
    10
    #id
    {ls}➞#id ts
    10
    #id ts
    10
    #id
    ts
    10
    #id ts
    10
    #id
    ts
    10
    #id
    {ls}➞#id {ls}➞#id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    map {ls}➞#id {ls}➞#id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    map
    ts
    10 ts
    10
    #id
    {ls}➞#id {ls}➞#id
    map
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    Рисуем график {name: cpu_usage, node: curiosity, core: 4}
    {ls}
    {ls}
    1 000 000
    {ls}
    {ls}

    View Slide

  126. {ls}
    1 000 000
    {ls}
    {ls}
    {ls}➞#id ts
    10
    #id
    ts
    10
    #id ts
    10
    #id
    ts
    10
    #id ts
    10
    #id
    ts
    10
    #id
    ts
    10 ts
    10
    #id
    {ls}➞#id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    Рисуем график {name: cpu_usage, node: curiosity, core: 4}
    {ls}➞#id
    {ls}➞#id {ls}➞#id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    map {ls}➞#id {ls}➞#id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    map
    {ls}➞#id
    map
    {ls}

    View Slide

  127. {ls}
    1 000 000
    {ls}
    {ls}
    {ls}➞#id ts
    10
    #id
    ts
    10
    #id ts
    10
    #id
    ts
    10
    #id ts
    10
    #id
    ts
    10
    #id
    ts
    10 ts
    10
    #id
    {ls}➞#id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    Рисуем график {name: cpu_usage, node: curiosity, core: 4}
    {ls}➞#id
    {ls}➞#id {ls}➞#id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    map {ls}➞#id {ls}➞#id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    map
    {ls}➞#id
    map
    {ls}

    View Slide

  128. {ls}
    1 000 000
    {ls}
    {ls}
    {ls}➞#id ts
    10
    #id
    ts
    10
    #id ts
    10
    #id
    ts
    10
    #id ts
    10
    #id
    ts
    10
    #id
    ts
    10 ts
    10
    #id
    {ls}➞#id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    Рисуем график {name: cpu_usage, node: curiosity, core: 4}
    {ls}➞#id
    {ls}➞#id {ls}➞#id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    map {ls}➞#id {ls}➞#id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    map
    {ls}➞#id
    map
    {ls}
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id

    View Slide

  129. {ls}
    1 000 000
    {ls}
    {ls}
    {ls}➞#id ts
    10
    #id
    {ls}➞#id ts
    10
    #id ts
    10
    #id
    ts
    10
    #id ts
    10
    #id
    ts
    10
    #id
    {ls}➞#id {ls}➞#id
    {ls}➞#id
    {ls}➞#id
    map
    {ls}➞#id
    map {ls}➞#id
    map
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    ts
    10
    #id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    ts
    10
    #id {ls}➞#id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    Рисуем график {name: cpu_usage, node: curiosity, core: 4}
    {ls}

    View Slide

  130. {ls}
    1 000 000
    {ls}
    {ls}
    {ls}➞#id ts
    10
    #id
    {ls}➞#id ts
    10
    #id ts
    10
    #id
    ts
    10
    #id ts
    10
    #id
    ts
    10
    #id
    {ls}➞#id {ls}➞#id
    {ls}➞#id
    {ls}➞#id
    map
    {ls}➞#id
    map {ls}➞#id
    map
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    ts
    10
    #id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    ts
    10
    #id {ls}➞#id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    Рисуем график {name: cpu_usage, node: curiosity, core: 4}
    {ls}
    ts
    10 ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10 ts
    10

    View Slide

  131. 1 000 000
    {ls}➞#id ts
    10
    #id
    {ls}➞#id ts
    10
    #id ts
    10
    #id
    ts
    10
    #id ts
    10
    #id
    ts
    10
    #id
    {ls}➞#id {ls}➞#id
    {ls}➞#id
    {ls}➞#id
    map
    {ls}➞#id
    map {ls}➞#id
    map
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    ts
    10
    #id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    ts
    10
    #id {ls}➞#id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    Рисуем график {name: cpu_usage, node: curiosity, core: 4}
    {ls}
    ts
    10 ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10 ts
    10
    {ls}
    {ls}
    {ls}

    View Slide

  132. В итоге

    View Slide

  133. «Поворот» на 90°
    В итоге

    View Slide

  134. «Поворот» на 90° LabelSet’ы
    В итоге

    View Slide

  135. “Поворот” на 90° LabelSet’ы
    Журнал
    В итоге

    View Slide

  136. “Поворот” на 90° LabelSet’ы
    Журнал «Активный» блок
    В итоге

    View Slide

  137. “Поворот” на 90° LabelSet’ы
    Журнал «Активный» блок
    «Завершенные» блоки
    В итоге

    View Slide

  138. Журнал «Активный» блок
    Log Structured Merge Tree
    LSMT
    В итоге
    «Завершенные» блоки

    View Slide

  139. TSDB на базе LSMT
    Log Structured Merge Tree

    View Slide

  140. Нам нужен Prometheus!
    Service Discovery

    View Slide

  141. Нам нужен Prometheus!
    Инструментарий для сбора метрик с приложения
    Service Discovery

    View Slide

  142. Нам нужен Prometheus!
    Полноценный язык запросов — PromQL
    Инструментарий для сбора метрик с приложения
    Service Discovery

    View Slide

  143. Нам нужен Prometheus!
    База данных, заточенная под хранение метрик
    Полноценный язык запросов — PromQL
    Инструментарий для сбора метрик с приложения
    Service Discovery

    View Slide

  144. Нам нужен Prometheus!
    База данных, заточенная под хранение метрик
    Полноценный язык запросов — PromQL
    Инструментарий для сбора метрик с приложения
    Service Discovery
    Большое комьюнити

    View Slide

  145. КОМПАНИЯ
    ПРОМЕТЕЙ
    Серия 1: cтартап

    View Slide

  146. СТО и идейный вдохновитель
    Разработчик backend/Ops Разработчик frontend
    ПЕТЯ ВАСЯ ГЕНА
    В РОЛЯХ

    View Slide

  147. А что у нас было с нагрузкой
    во время демонстрации
    инвесторам?
    Да кто ж его знает?
    ВАСЯ
    ПЕТЯ

    View Slide

  148. Задача: сбор метрик

    View Slide

  149. Cluster
    Single Prometheus?
    Exporter
    Application
    ● Сбор метрик
    Для чего
    Grafana

    View Slide

  150. А что, если Prometheus
    упадет?
    ВАСЯ
    Графиков не будет!
    ПЕТЯ

    View Slide

  151. Cluster
    Single Prometheus?
    Exporter
    Application
    ● Сбор метрик
    Для чего
    Grafana
    ● Нет отказоустойчивости
    Минусы

    View Slide

  152. Cluster
    Single Prometheus?
    Exporter
    Application
    ● Сбор метрик
    Для чего
    Grafana
    ● Нет отказоустойчивости
    ● Не масштабируется
    Минусы

    View Slide

  153. КОМПАНИЯ
    ПРОМЕТЕЙ
    Серия 2: небольшая компания
    Год первый

    View Slide

  154. СТО и идейный вдохновитель
    Teamlead команды
    backend-разработчиков + Ops
    Teamlead frontend-команды
    + помогает Пете с Ops
    ПЕТЯ ВАСЯ ГЕНА
    В РОЛЯХ

    View Slide

  155. Клиент пишет, что у нас
    платежи не обрабатываются.
    Что случилось?
    Да кто ж его знает?
    У нас VM с мониторингом
    недоступна.
    ВАСЯ
    ПЕТЯ

    View Slide

  156. Задача: отказоустойчивость

    View Slide

  157. Cluster
    НА Prometheus
    Exporter
    Application
    ● Сбор метрик
    Для чего
    Grafana

    View Slide

  158. Kubernetes Cluster
    НА Prometheus
    Exporter Application
    ● Сбор метрик
    ● Отказоустойчивость
    Для чего
    LB Grafana

    View Slide

  159. А как это работает?
    ВАСЯ
    Сейчас расскажу...
    ПЕТЯ

    View Slide

  160. НА Prometheus
    {ls}
    {ls}
    {ls}
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    1
    2
    LB Grafana
    Timeline
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    ts
    10

    View Slide

  161. НА Prometheus
    {ls}
    {ls}
    {ls}
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    1
    2
    LB Grafana
    Timeline
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    ts
    10

    View Slide

  162. НА Prometheus
    {ls}
    {ls}
    {ls}
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    1
    2
    LB Grafana
    Timeline
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    ts
    10 ts
    10

    View Slide

  163. НА Prometheus
    {ls}
    {ls}
    {ls}
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    1
    2
    LB Grafana
    Timeline
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    ts
    10

    View Slide

  164. НА Prometheus
    {ls}
    {ls}
    {ls}
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    1
    2
    LB Grafana
    Timeline
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    ts
    10 ts
    10

    View Slide

  165. А если один из Prometheus
    упадет?
    ВАСЯ

    View Slide

  166. НА Prometheus
    {ls}
    {ls}
    {ls}
    ts
    10 ts
    10
    ts
    10 ts
    10
    ts
    10
    ts
    10
    1
    2
    LB Grafana
    Timeline
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    ts
    10

    View Slide

  167. НА Prometheus
    {ls}
    {ls}
    {ls}
    ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10
    ts
    10 ts
    10
    1
    2
    LB Grafana
    Timeline
    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

    View Slide

  168. НА Prometheus
    {ls}
    {ls}
    {ls}
    ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10
    ts
    10 ts
    10
    1
    2
    LB Grafana
    Timeline
    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
    ? ?

    View Slide

  169. НА Prometheus
    {ls}
    {ls}
    {ls}
    ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10
    ts
    10 ts
    10
    1
    2
    LB Grafana
    Timeline
    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 ts
    10
    ? ?

    View Slide

  170. НА Prometheus
    {ls}
    {ls}
    {ls}
    ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10
    ts
    10 ts
    10
    1
    2
    LB Grafana
    Timeline
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    ts
    10 ts
    10
    ts
    10
    ts
    10
    ts
    10 ts
    10
    Prometheus 1
    Prometheus 2
    ts
    10
    ts
    10
    ts
    10
    ? ?
    ts
    10
    ts
    10 ts
    10
    ? ?

    View Slide

  171. НА Prometheus
    {ls}
    {ls}
    {ls}
    ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10
    ts
    10 ts
    10
    1
    2
    LB Grafana
    Timeline
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    ts
    10 ts
    10
    ts
    10
    ts
    10
    ts
    10 ts
    10
    Prometheus 1
    Prometheus 2
    ts
    10
    ts
    10
    ts
    10

    View Slide

  172. НА Prometheus
    {ls}
    {ls}
    {ls}
    ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10
    ts
    10 ts
    10
    1
    2
    LB Grafana
    Timeline
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    ts
    10 ts
    10
    ts
    10
    ts
    10
    ts
    10 ts
    10
    Prometheus 1
    Prometheus 2
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    ts
    10 ts
    10
    ts
    10 ts
    10

    View Slide

  173. А мы сможем обновлять
    Prometheus?
    ВАСЯ

    View Slide

  174. НА Prometheus
    {ls}
    {ls}
    {ls}
    ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10
    ts
    10 ts
    10
    1
    2
    LB Grafana
    Timeline
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    ts
    10 ts
    10
    ts
    10
    ts
    10
    ts
    10 ts
    10
    Prometheus 1
    Prometheus 2

    View Slide

  175. НА Prometheus
    {ls}
    {ls}
    {ls}
    ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10
    ts
    10 ts
    10
    1
    2
    LB Grafana
    Timeline
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    ts
    10 ts
    10
    ts
    10
    ts
    10
    ts
    10 ts
    10
    Prometheus 1
    Prometheus 2
    ?

    View Slide

  176. НА Prometheus
    {ls}
    {ls}
    {ls}
    ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10
    ts
    10 ts
    10
    1
    2
    LB Grafana
    Timeline
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    ts
    10 ts
    10
    ts
    10
    ts
    10
    ts
    10 ts
    10
    Prometheus 1
    Prometheus 2
    ?
    ts
    10
    ts
    10 ts
    10
    ? ts
    10

    View Slide

  177. НА Prometheus
    {ls}
    {ls}
    {ls}
    ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10
    ts
    10 ts
    10
    1
    2
    LB Grafana
    Timeline
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    ts
    10 ts
    10
    ts
    10
    ts
    10
    ts
    10 ts
    10
    Prometheus 1
    Prometheus 2
    ? ?

    View Slide

  178. НА Prometheus
    {ls}
    {ls}
    {ls}
    ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10
    ts
    10 ts
    10
    1
    2
    LB Grafana
    Timeline
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    ts
    10 ts
    10
    ts
    10
    ts
    10
    ts
    10 ts
    10
    Prometheus 1
    Prometheus 2
    ? ?
    ts
    10
    ts
    10 ts
    10
    ? ?

    View Slide

  179. Я знаю,
    что делать!
    ПЕТЯ

    View Slide

  180. НА Prometheus
    {ls}
    {ls}
    {ls}
    ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10
    ts
    10 ts
    10
    1
    2
    Proxy Grafana
    Timeline
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    ts
    10 ts
    10
    ts
    10
    ts
    10
    ts
    10 ts
    10

    View Slide

  181. НА Prometheus
    {ls}
    {ls}
    {ls}
    ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10
    ts
    10 ts
    10
    1
    2
    Proxy Grafana
    Timeline
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    ts
    10
    ts
    10 ts
    10
    ts
    10
    ts
    10 ts
    10 ts
    10

    View Slide

  182. НА Prometheus
    {ls}
    {ls}
    {ls}
    ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10 ts
    10
    ts
    10 ts
    10
    ts
    10 ts
    10
    1
    2
    Proxy Grafana
    Timeline
    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

    View Slide

  183. Kubernetes Cluster
    НА Prometheus
    Exporter Application
    ● Сбор метрик
    ● Отказоустойчивость
    Для чего
    LB Grafana
    Минусы

    View Slide

  184. Kubernetes Cluster
    НА Prometheus
    Exporter Application
    ● Сбор метрик
    ● Отказоустойчивость
    Для чего
    LB Grafana
    ● Не масштабируется
    Минусы

    View Slide

  185. 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/

    View Slide

  186. Kubernetes Cluster
    НА Prometheus
    Exporter Application
    ● Сбор метрик
    ● Отказоустойчивость
    Для чего
    LB Grafana
    ● Не масштабируется
    ● Нет возможности хранить
    данные долго
    Минусы

    View Slide

  187. КОМПАНИЯ
    ПРОМЕТЕЙ
    Серия 3: корпорация

    View Slide

  188. СТО и идейный вдохновитель
    Teamlead команды
    backend-разработчиков
    Teamlead команды frontend-
    разработчиков
    ПЕТЯ ВАСЯ ГЕНА
    В РОЛЯХ

    View Slide

  189. Teamlead команды
    эксплуатации
    СНЕЖАНА
    В РОЛЯХ
    Команда техподдержки Команды разработки

    View Slide

  190. Хорошо работает
    Kubernetes Cluster
    App
    Grafana
    Exporter

    View Slide

  191. Хорошо работает

    View Slide

  192. Привет, Снежана!
    Уже 20 минут часть сервисов
    недоступна. Что случилось?
    ВАСЯ
    СНЕЖАНА
    Да кто ж его знает? У нас
    глобальный сбой, пытаемся
    найти причины, но у нас
    10 ДЦ и везде разные
    системы мониторинга…

    View Slide

  193. Уже не работает

    View Slide

  194. Уже не работает
    Grafana

    View Slide

  195. Задача: централизация метрик

    View Slide

  196. Thanos / Cortex / Mimir
    Kubernetes Cluster
    App
    Exporter
    Mimir
    Grafana

    View Slide

  197. Мы теперь можем отказаться
    от локальных Prometheus?
    ВАСЯ
    СНЕЖАНА
    Не совсем. И к тому
    же с нюансами…

    View Slide

  198. А можно без Prometheus
    Kubernetes Cluster
    App
    Exporter
    Grafana
    Mimir
    1 Prometheus Agent
    2 VM Agent
    3 Grafana Agent
    ● Не будет работать HPA / VPA
    Нюансы

    View Slide

  199. А можно без Prometheus
    Kubernetes Cluster
    App
    Exporter
    Grafana
    Mimir
    1 Prometheus Agent
    2 VM Agent
    3 Grafana Agent
    ● Не будет работать HPA / VPA
    ● Могут быть вопросы с record rules
    Нюансы

    View Slide

  200. А можно без Prometheus
    Kubernetes Cluster
    App
    Exporter
    Grafana
    Mimir
    1 Prometheus Agent
    2 VM Agent
    3 Grafana Agent
    ● Не будет работать HPA / VPA
    ● Могут быть вопросы с record rules
    ● Могут проблемы с алертами
    Нюансы

    View Slide

  201. А можно без Prometheus
    Kubernetes Cluster
    App
    Exporter
    Grafana
    Mimir
    1 Prometheus Agent
    2 VM Agent
    3 Grafana Agent
    ● Не будет работать HPA / VPA
    ● Могут быть вопросы с record rules
    ● Могут проблемы с алертами
    Нюансы
    ● Использовать Prometheus
    c retention 1d
    Решение

    View Slide

  202. Thanos / Cortex / Mimir
    Mimir
    Grafana

    View Slide

  203. Так-так, интересненько,
    а можно поподробнее?
    ВАСЯ
    СНЕЖАНА
    Конечно, но будет непросто!

    View Slide

  204. Хранение метрик
    Mimir
    Mimir — это

    View Slide

  205. Хранение метрик
    Mimir
    ● Микросервисная версия
    Prometheus
    Mimir — это

    View Slide

  206. Хранение метрик
    Mimir
    ● Микросервисная версия
    Prometheus
    ● С возможностью разделения
    мониторинговых данных
    по тенантам
    Mimir — это

    View Slide

  207. Хранение метрик
    Mimir
    ● Микросервисная версия
    Prometheus
    ● С возможностью разделения
    мониторинговых данных
    по тенантам
    ● С возможностью
    мультитенантных запросов
    Mimir — это

    View Slide

  208. Хранение метрик
    Distributor
    Ingester
    Compactor
    Query Frontend
    Querier
    Store Gateway
    Blocks
    Storage
    (S3)
    Result
    Cache
    etcd
    Mimir
    Ruler Alertmanager

    View Slide

  209. Запись метрик
    Storage

    View Slide

  210. Ingester
    2
    Blocks
    Storage
    (S3)
    3
    Compactor
    Запись метрик
    Query Frontend
    Querier
    Store Gateway
    Result
    Cache
    etcd
    Read path
    Mimir
    Ruler Alertmanager
    Принимает запросы, валидирует их
    и направляет в Ingester
    1. Distributor
    Distributor
    Write path
    1

    View Slide

  211. 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

    View Slide

  212. 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

    View Slide

  213. Запись метрик
    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

    View Slide

  214. Запись метрик
    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

    View Slide

  215. Чтение метрик
    Storage

    View Slide

  216. Result
    Cache
    Querier
    Ingester
    Store Gateway
    Blocks
    Storage
    (S3)
    Чтение метрик
    etcd
    Mimir
    Принимает запрос, валидирует
    и разделяет на подзапросы
    1. Query Frontend
    Distributor
    Compactor Ruler Alertmanager
    Write path
    Query Frontend
    Read path
    1

    View Slide

  217. 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

    View Slide

  218. 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 Кэширование данных
    Многоуровневое кэширование данных позволяет
    сократить аппаратные ресурсы и время
    для отображения данных.

    View Slide

  219. 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

    View Slide

  220. 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

    View Slide

  221. Чтение метрик
    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

    View Slide

  222. Store Gateway

    View Slide

  223. Store Gateway
    {ls}
    ➞#id
    {ls}
    ➞#id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    map
    {ls}
    ➞#id
    {ls}
    ➞#id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    map
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    Blocks Storage (S3)
    Store Gateway

    View Slide

  224. Store Gateway
    {ls}
    ➞#id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    {ls}
    ➞#id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    Store Gateway
    {ls}
    ➞#id
    map
    {ls}
    ➞#id
    map
    {ls}
    ➞#id
    {ls}
    ➞#id
    map
    {ls}
    ➞#id
    {ls}
    ➞#id
    map
    Blocks Storage (S3)

    View Slide

  225. {name: cpu_usage, node: curiosity, core: 4}
    {ls}
    Store Gateway
    {ls}
    ➞#id
    {ls}
    ➞#id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    map
    {ls}
    ➞#id
    {ls}
    ➞#id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    map
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    Blocks Storage (S3)
    Store Gateway
    {ls}
    ➞#id
    {ls}
    ➞#id
    map
    {ls}
    ➞#id
    {ls}
    ➞#id
    map

    View Slide

  226. Blocks Storage (S3)
    {name: cpu_usage, node: curiosity, core: 4}
    {ls}
    Store Gateway
    {ls}
    ➞#id
    {ls}
    ➞#id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    map
    {ls}
    ➞#id
    {ls}
    ➞#id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    map
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    Store Gateway
    {ls}
    ➞#id
    {ls}
    ➞#id
    map
    {ls}
    ➞#id
    {ls}
    ➞#id
    map

    View Slide

  227. Blocks Storage (S3)
    Store Gateway
    {ls}
    ➞#id
    {ls}
    ➞#id
    map
    {ls}
    ➞#id
    {ls}
    ➞#id
    map
    {name: cpu_usage, node: curiosity, core: 4}
    {ls}
    Store Gateway
    {ls}
    ➞#id
    {ls}
    ➞#id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    map
    {ls}
    ➞#id
    {ls}
    ➞#id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    map
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10
    #id
    ts
    10 ts
    10 ts
    10 ts
    10 ts
    10

    View Slide

  228. Чтение метрик
    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

    View Slide

  229. Чтение метрик
    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

    View Slide

  230. Чтение метрик
    Distributor
    Ingester
    Compactor
    Query Frontend
    Querier
    Store Gateway
    Blocks
    Storage
    (S3)
    Result
    Cache
    etcd
    Read path
    Write path
    Mimir
    Ruler Alertmanager

    View Slide

  231. Надежность
    Storage

    View Slide

  232. Mimir
    Надёжность
    Blocks
    Storage
    (S3)
    Result
    Cache
    etcd
    Ruler Alertmanager
    Read path
    Write path
    Distributor
    Ingester
    Compactor
    Query Frontend
    Querier
    Store Gateway

    View Slide

  233. Mimir
    Надёжность
    Blocks
    Storage
    (S3)
    Result
    Cache
    etcd
    Ruler Alertmanager
    Read path
    Write path
    Distributor Query Frontend
    Distributor
    Compactor
    Query Frontend
    Querier
    Ingester
    Store Gateway
    Distributor
    Ingester
    Compactor
    Query Frontend
    Querier
    Store Gateway
    Независимое горизонтальное
    масштабирование компонентов
    Все компоненты Mimir поддерживают горизонтальное
    масштабирование.
    Это позволяет гибко подстраиваться под любые
    нагрузки и экономить ресурсы.

    View Slide

  234. 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

    View Slide

  235. Масштабируемость
    Storage

    View Slide

  236. 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

    View Slide

  237. 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

    View Slide

  238. 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)

    View Slide

  239. Итого Mimir
    ● Отказоустойчивость из коробки
    Плюсы
    Mimir
    Result
    Cache
    etcd
    Distributor Query Frontend
    Querier
    Store Gateway
    Ingester
    Compactor
    Blocks
    Storage
    (S3)
    Ruler Alertmanager
    Read path
    Write path

    View Slide

  240. Итого Mimir
    ● Отказоустойчивость из коробки
    ● Горизонтальное масштабирование
    (с возможностью шардирования
    данных)
    Плюсы
    Mimir
    Result
    Cache
    etcd
    Distributor Query Frontend
    Querier
    Store Gateway
    Ingester
    Compactor
    Blocks
    Storage
    (S3)
    Ruler Alertmanager
    Read path
    Write path

    View Slide

  241. Итого Mimir
    ● Отказоустойчивость из коробки
    ● Горизонтальное масштабирование
    (с возможностью шардирования
    данных)
    ● Возможность хранить
    мониторинговые данные
    десятки лет
    Плюсы
    Mimir
    Result
    Cache
    etcd
    Distributor Query Frontend
    Querier
    Store Gateway
    Ingester
    Compactor
    Blocks
    Storage
    (S3)
    Ruler Alertmanager
    Read path
    Write path

    View Slide

  242. Итого Mimir
    ● Отказоустойчивость из коробки
    ● Горизонтальное масштабирование
    (с возможностью шардирования
    данных)
    ● Возможность хранить
    мониторинговые данные
    десятки лет
    ● Разделение мониторинговых
    данных
    Плюсы
    Mimir
    Result
    Cache
    etcd
    Distributor Query Frontend
    Querier
    Store Gateway
    Ingester
    Compactor
    Blocks
    Storage
    (S3)
    Ruler Alertmanager
    Read path
    Write path

    View Slide

  243. Итого Mimir
    ● Отказоустойчивость из коробки
    ● Горизонтальное масштабирование
    (с возможностью шардирования
    данных)
    ● Возможность хранить
    мониторинговые данные
    десятки лет
    ● Разделение мониторинговых
    данных
    Плюсы
    ● Сложность
    Минусы
    Mimir
    Result
    Cache
    etcd
    Distributor Query Frontend
    Querier
    Store Gateway
    Ingester
    Compactor
    Blocks
    Storage
    (S3)
    Ruler Alertmanager
    Read path
    Write path

    View Slide

  244. Итого Mimir
    ● Отказоустойчивость из коробки
    ● Горизонтальное масштабирование
    (с возможностью шардирования
    данных)
    ● Возможность хранить
    мониторинговые данные
    десятки лет
    ● Разделение мониторинговых
    данных
    Плюсы
    ● Сложность
    ● Дополнительные компетенции
    Минусы
    Mimir
    Result
    Cache
    etcd
    Distributor Query Frontend
    Querier
    Store Gateway
    Ingester
    Compactor
    Blocks
    Storage
    (S3)
    Ruler Alertmanager
    Read path
    Write path

    View Slide

  245. Итого Mimir
    ● Отказоустойчивость из коробки
    ● Горизонтальное масштабирование
    (с возможностью шардирования
    данных)
    ● Возможность хранить
    мониторинговые данные
    десятки лет
    ● Разделение мониторинговых
    данных
    Плюсы
    ● Сложность
    ● Дополнительные компетенции
    Минусы
    ● Нет механизмов авторизации
    Нерешенные вопросы
    Mimir
    Result
    Cache
    etcd
    Distributor Query Frontend
    Querier
    Store Gateway
    Ingester
    Compactor
    Blocks
    Storage
    (S3)
    Ruler Alertmanager
    Read path
    Write path

    View Slide

  246. Итого Mimir
    ● Отказоустойчивость из коробки
    ● Горизонтальное масштабирование
    (с возможностью шардирования
    данных)
    ● Возможность хранить
    мониторинговые данные
    десятки лет
    ● Разделение мониторинговых
    данных
    Плюсы
    ● Сложность
    ● Дополнительные компетенции
    Минусы
    ● Нет механизмов авторизации
    ● Высокое потребление ресурсов
    Нерешенные вопросы
    Mimir
    Result
    Cache
    etcd
    Distributor Query Frontend
    Querier
    Store Gateway
    Ingester
    Compactor
    Blocks
    Storage
    (S3)
    Ruler Alertmanager
    Read path
    Write path

    View Slide

  247. Итого Mimir
    ● Отказоустойчивость из коробки
    ● Горизонтальное масштабирование
    (с возможностью шардирования
    данных)
    ● Возможность хранить
    мониторинговые данные
    десятки лет
    ● Разделение мониторинговых
    данных
    Плюсы
    ● Сложность
    ● Дополнительные компетенции
    Минусы
    ● Нет механизмов авторизации
    ● Высокое потребление ресурсов
    ● Скорость работы зависит от
    производительности сети
    Нерешенные вопросы
    Mimir
    Result
    Cache
    etcd
    Distributor Query Frontend
    Querier
    Store Gateway
    Ingester
    Compactor
    Blocks
    Storage
    (S3)
    Ruler Alertmanager
    Read path
    Write path

    View Slide

  248. Что же выбрать?
    Prometheus
    Prometheus HA
    Mimir
    Сбор метрик НА
    Длительное
    хранение
    Все метрики
    в одном месте
    Централизованное
    хранение
    Сложность

    View Slide

  249. ВАСЯ
    А может, ну его,
    давай поедем в SaaS?
    Хм…
    СНЕЖАНА

    View Slide

  250. To be continued…

    View Slide

  251. David Magton
    CTO
    Алёна Лунина
    Оформление презентации
    Спасибо!
    Михаил Жучков
    Куратор доклада
    Антон Климов
    Оформление презентации

    View Slide

  252. 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

    View Slide