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-у покажу!
  2. Владимир Гурьянов Solution Architect системы мониторинга Okmeter vladimir.guryanov@flant.com Чем занимаюсь

    Инженер, тимлид и архитектор с 10-летним стажем. Опыт С 2010 г. занимаюсь разработкой. С 2021 г. работаю в компании «Флант». С 2022 г. — руководитель разработки «хранилища мониторинга». С чем работаю больше всего Обо мне
  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 Прямо сейчас:
  4. Опыт Okmeter используют Okmeter в качестве системы мониторинга 250+ компаний

    в production > 6 000 хостов с каждого хоста > 5 000 метрик по фактическим значениям > 30 000 000 метрик в минуту зрелый продукт, сотни проектов 12 лет эксплуатации круглосуточная помощь в любой ситуации 24/7 поддержка
  5. Ландшафт 15 лет назад Монолитные приложения Физические серверы ~ 10

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

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

    с одного хоста Релизы по 10–100 раз в день Kubernetes Микросервисная архитектура Облака Инфраструктура динамичная
  8. Какая система мониторинга нам нужна? Может делать сложные агрегации над

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

    делать сложные агрегации над данными Может собирать «бизнес-метрики» Может сама находить источники метрик
  10. Кто вы, мистер Prometheus? Prometheus Service Discovering EC2, Consul, K8s…

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

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

    K8s… exporter 3rd Party Application Источники данных: • exporter — приложение, которое само собирает метрики и отдает их в формате Prometheus Prometheus взаимодействует с различными API для получения списка источников данных. 1. Service Discovering 2. Scraping Собирает данные с источников по pull- модели и протоколу HTTP.
  13. Кто вы, мистер 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.
  14. Кто вы, мистер 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).
  15. Кто вы, мистер 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.
  16. Кто вы, мистер 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 Создание новых метрик. Проверка «триггеров».
  17. Кто вы, мистер 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 Создание новых метрик. Проверка «триггеров».
  18. Кто вы, мистер 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 Создание новых метрик. Проверка «триггеров».
  19. 60 sec ts 10 источник data timestamp 16 byte Как

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

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

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

    собираются данные со многих источников
  23. ts 10 ts 10 ts 10 ts 10 Вариант №

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

    ts 10 ts 10 ts 10 Вариант № 1: с каждого источника в свой «файл» Как собираются данные со многих источников
  25. 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: с каждого источника в свой «файл» Как собираются данные со многих источников
  26. 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: с каждого источника в свой «файл» Как собираются данные со многих источников
  27. 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: с каждого источника в свой «файл» Как собираются данные со многих источников
  28. 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 Как собираются данные со многих источников
  29. 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 Как собираются данные со многих источников
  30. 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 Как собираются данные со многих источников
  31. 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 Как собираются данные со многих источников
  32. 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 Как собираются данные со многих источников
  33. 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 Как собираются данные со многих источников
  34. 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 Как собираются данные со многих источников
  35. 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 Как собираются данные со многих источников
  36. 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 Как собираются данные со многих источников
  37. 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 Как собираются данные со многих источников
  38. Вариант № 2: со всех источников в один «файл» Как

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

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

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

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

    000 000 ts 10 ts 10 ts 10 ts 10 ts 10 ts 10 Как собираются данные со многих источников
  43. Вариант № 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 Как собираются данные со многих источников
  44. 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 Как собираются данные со многих источников
  45. 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 Как собираются данные со многих источников
  46. 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 Как собираются данные со многих источников
  47. Вариант № 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 Как собираются данные со многих источников
  48. Вариант № 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 Как собираются данные со многих источников
  49. Вариант № 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 Как собираются данные со многих источников
  50. Вариант № 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 Как собираются данные со многих источников
  51. Проблема 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
  52. 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 Читаем всегда горизонтально Проблема
  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 000 000 Проблема Пишем всегда вертикально
  54. ts 10 ts 10 ts 10 1 000 000 ts

    10 ts 10 ts 10 ts 10 ts 10 ts 10 Как решать?
  55. 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 Как решать?
  56. 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 Как решать?
  57. 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 Как решать?
  58. 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 Как решать?
  59. ts 10 ts 10 ts 10 ts 10 ts 10

    ts 10 1 hour Как решать?
  60. 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 Как решать?
  61. 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 Как решать?
  62. Операция “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
  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
  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
  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
  66. Как идентифицировать? ts 10 ts 10 ts 10 ts 10

    ts 10 ts 10 ts 10 ts 10 ts 10 ts 10 ts 10 ts 10 ?
  67. Как идентифицировать? 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
  68. Как идентифицировать? 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
  69. { 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
  70. { 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 }
  71. { 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}
  72. { 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}
  73. {ls} 1 000 000 {ls} {ls} Как идентифицировать? {ls}➞#id map

    ts 10 #id {ls}➞#id ts 10 #id {ls}➞#id {ls}➞#id ts 10 #id
  74. {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
  75. {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
  76. {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
  77. {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
  78. {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
  79. {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
  80. {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}
  81. {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}
  82. {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}
  83. {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
  84. {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}
  85. {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
  86. 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}
  87. Нам нужен Prometheus! База данных, заточенная под хранение метрик Полноценный

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

    язык запросов — PromQL Инструментарий для сбора метрик с приложения Service Discovery Большое комьюнити
  89. А что у нас было с нагрузкой во время демонстрации

    инвесторам? Да кто ж его знает? ВАСЯ ПЕТЯ
  90. Cluster Single Prometheus? Exporter Application • Сбор метрик Для чего

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

    Grafana • Нет отказоустойчивости • Не масштабируется Минусы
  92. СТО и идейный вдохновитель Teamlead команды backend-разработчиков + Ops Teamlead

    frontend-команды + помогает Пете с Ops ПЕТЯ ВАСЯ ГЕНА В РОЛЯХ
  93. Клиент пишет, что у нас платежи не обрабатываются. Что случилось?

    Да кто ж его знает? У нас VM с мониторингом недоступна. ВАСЯ ПЕТЯ
  94. Kubernetes Cluster НА Prometheus Exporter Application • Сбор метрик •

    Отказоустойчивость Для чего LB Grafana
  95. НА 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
  96. НА 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
  97. НА 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
  98. НА 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
  99. НА 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
  100. НА 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
  101. НА 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
  102. НА 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 ? ?
  103. НА 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 ? ?
  104. НА 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 ? ?
  105. НА 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
  106. НА 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
  107. НА 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
  108. НА 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 ?
  109. НА 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
  110. НА 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 ? ?
  111. НА 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 ? ?
  112. НА 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
  113. НА 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
  114. НА 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
  115. Kubernetes Cluster НА Prometheus Exporter Application • Сбор метрик •

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

    Отказоустойчивость Для чего LB Grafana • Не масштабируется Минусы
  117. 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/
  118. Kubernetes Cluster НА Prometheus Exporter Application • Сбор метрик •

    Отказоустойчивость Для чего LB Grafana • Не масштабируется • Нет возможности хранить данные долго Минусы
  119. Привет, Снежана! Уже 20 минут часть сервисов недоступна. Что случилось?

    ВАСЯ СНЕЖАНА Да кто ж его знает? У нас глобальный сбой, пытаемся найти причины, но у нас 10 ДЦ и везде разные системы мониторинга…
  120. А можно без Prometheus Kubernetes Cluster App Exporter Grafana Mimir

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

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

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

    1 Prometheus Agent 2 VM Agent 3 Grafana Agent • Не будет работать HPA / VPA • Могут быть вопросы с record rules • Могут проблемы с алертами Нюансы • Использовать Prometheus c retention 1d Решение
  124. Хранение метрик Mimir • Микросервисная версия Prometheus • С возможностью

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

    разделения мониторинговых данных по тенантам • С возможностью мультитенантных запросов Mimir — это
  126. Хранение метрик Distributor Ingester Compactor Query Frontend Querier Store Gateway

    Blocks Storage (S3) Result Cache etcd Mimir Ruler Alertmanager
  127. 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
  128. 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
  129. 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
  130. Запись метрик 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
  131. Запись метрик 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
  132. 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
  133. 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
  134. 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 Кэширование данных Многоуровневое кэширование данных позволяет сократить аппаратные ресурсы и время для отображения данных.
  135. 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
  136. 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
  137. Чтение метрик 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
  138. 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
  139. 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)
  140. {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
  141. 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
  142. 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
  143. Чтение метрик 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
  144. Чтение метрик 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
  145. Чтение метрик Distributor Ingester Compactor Query Frontend Querier Store Gateway

    Blocks Storage (S3) Result Cache etcd Read path Write path Mimir Ruler Alertmanager
  146. Mimir Надёжность Blocks Storage (S3) Result Cache etcd Ruler Alertmanager

    Read path Write path Distributor Ingester Compactor Query Frontend Querier Store Gateway
  147. 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 поддерживают горизонтальное масштабирование. Это позволяет гибко подстраиваться под любые нагрузки и экономить ресурсы.
  148. 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
  149. 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
  150. 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
  151. 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)
  152. Итого Mimir • Отказоустойчивость из коробки Плюсы Mimir Result Cache

    etcd Distributor Query Frontend Querier Store Gateway Ingester Compactor Blocks Storage (S3) Ruler Alertmanager Read path Write path
  153. Итого Mimir • Отказоустойчивость из коробки • Горизонтальное масштабирование (с

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

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

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

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

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

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

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

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

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

    Куратор доклада Антон Климов Оформление презентации
  163. 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