Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

Zabbix initial release: April 2001, 21 years ago

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

Нам нужен Prometheus?

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

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

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

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

Slide 54

Slide 54 text

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

Slide 55

Slide 55 text

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

Slide 56

Slide 56 text

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

Slide 57

Slide 57 text

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

Slide 58

Slide 58 text

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

Slide 59

Slide 59 text

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

Slide 60

Slide 60 text

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

Slide 61

Slide 61 text

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

Slide 62

Slide 62 text

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

Slide 63

Slide 63 text

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

Slide 64

Slide 64 text

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

Slide 65

Slide 65 text

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

Slide 66

Slide 66 text

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

Slide 67

Slide 67 text

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

Slide 68

Slide 68 text

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

Slide 69

Slide 69 text

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

Slide 70

Slide 70 text

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

Slide 71

Slide 71 text

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

Slide 72

Slide 72 text

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

Slide 73

Slide 73 text

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

Slide 74

Slide 74 text

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

Slide 75

Slide 75 text

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

Slide 76

Slide 76 text

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

Slide 77

Slide 77 text

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

Slide 78

Slide 78 text

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

Slide 79

Slide 79 text

Проблема

Slide 80

Slide 80 text

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

Slide 81

Slide 81 text

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

Slide 82

Slide 82 text

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

Slide 83

Slide 83 text

Как решать?

Slide 84

Slide 84 text

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

Slide 85

Slide 85 text

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

Slide 86

Slide 86 text

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

Slide 87

Slide 87 text

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 Как решать?

Slide 88

Slide 88 text

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 Как решать?

Slide 89

Slide 89 text

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 Как решать?

Slide 90

Slide 90 text

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 Как решать?

Slide 91

Slide 91 text

Как решать?

Slide 92

Slide 92 text

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

Slide 93

Slide 93 text

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 Как решать?

Slide 94

Slide 94 text

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

Slide 95

Slide 95 text

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 Как решать?

Slide 96

Slide 96 text

Операция “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

Slide 97

Slide 97 text

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

Slide 98

Slide 98 text

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

Slide 99

Slide 99 text

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

Slide 100

Slide 100 text

ts 10 ts 10 ts 10 ts 10 ts 10 ts 10 ts 10 ts 10 ts 10 ts 10 ts 10 ts 10

Slide 101

Slide 101 text

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

Slide 102

Slide 102 text

Как идентифицировать? 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

Slide 103

Slide 103 text

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

Slide 104

Slide 104 text

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

Slide 105

Slide 105 text

Как идентифицировать? 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

Slide 106

Slide 106 text

{ 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

Slide 107

Slide 107 text

{ 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 }

Slide 108

Slide 108 text

{ 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}

Slide 109

Slide 109 text

{ 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}

Slide 110

Slide 110 text

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

Slide 111

Slide 111 text

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

Slide 112

Slide 112 text

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

Slide 113

Slide 113 text

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

Slide 114

Slide 114 text

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

Slide 115

Slide 115 text

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

Slide 116

Slide 116 text

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

Slide 117

Slide 117 text

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

Slide 118

Slide 118 text

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

Slide 119

Slide 119 text

{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

Slide 120

Slide 120 text

{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

Slide 121

Slide 121 text

{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

Slide 122

Slide 122 text

{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

Slide 123

Slide 123 text

{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

Slide 124

Slide 124 text

{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

Slide 125

Slide 125 text

{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}

Slide 126

Slide 126 text

{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}

Slide 127

Slide 127 text

{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}

Slide 128

Slide 128 text

{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

Slide 129

Slide 129 text

{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}

Slide 130

Slide 130 text

{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

Slide 131

Slide 131 text

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}

Slide 132

Slide 132 text

В итоге

Slide 133

Slide 133 text

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

Slide 134

Slide 134 text

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

Slide 135

Slide 135 text

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

Slide 136

Slide 136 text

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

Slide 137

Slide 137 text

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

Slide 138

Slide 138 text

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

Slide 139

Slide 139 text

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

Slide 140

Slide 140 text

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

Slide 141

Slide 141 text

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

Slide 142

Slide 142 text

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

Slide 143

Slide 143 text

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

Slide 144

Slide 144 text

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

Slide 145

Slide 145 text

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

Slide 146

Slide 146 text

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

Slide 147

Slide 147 text

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

Slide 148

Slide 148 text

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

Slide 149

Slide 149 text

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

Slide 150

Slide 150 text

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

Slide 151

Slide 151 text

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

Slide 152

Slide 152 text

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

Slide 153

Slide 153 text

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

Slide 154

Slide 154 text

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

Slide 155

Slide 155 text

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

Slide 156

Slide 156 text

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

Slide 157

Slide 157 text

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

Slide 158

Slide 158 text

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

Slide 159

Slide 159 text

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

Slide 160

Slide 160 text

НА 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

Slide 161

Slide 161 text

НА 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

Slide 162

Slide 162 text

НА 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

Slide 163

Slide 163 text

НА 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

Slide 164

Slide 164 text

НА 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

Slide 165

Slide 165 text

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

Slide 166

Slide 166 text

НА 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

Slide 167

Slide 167 text

НА 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

Slide 168

Slide 168 text

НА 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 ? ?

Slide 169

Slide 169 text

НА 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 ? ?

Slide 170

Slide 170 text

НА 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 ? ?

Slide 171

Slide 171 text

НА 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

Slide 172

Slide 172 text

НА 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

Slide 173

Slide 173 text

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

Slide 174

Slide 174 text

НА 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

Slide 175

Slide 175 text

НА 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 ?

Slide 176

Slide 176 text

НА 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

Slide 177

Slide 177 text

НА 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 ? ?

Slide 178

Slide 178 text

НА 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 ? ?

Slide 179

Slide 179 text

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

Slide 180

Slide 180 text

НА 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

Slide 181

Slide 181 text

НА 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

Slide 182

Slide 182 text

НА 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

Slide 183

Slide 183 text

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

Slide 184

Slide 184 text

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

Slide 185

Slide 185 text

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/

Slide 186

Slide 186 text

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

Slide 187

Slide 187 text

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

Slide 188

Slide 188 text

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

Slide 189

Slide 189 text

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

Slide 190

Slide 190 text

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

Slide 191

Slide 191 text

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

Slide 192

Slide 192 text

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

Slide 193

Slide 193 text

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

Slide 194

Slide 194 text

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

Slide 195

Slide 195 text

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

Slide 196

Slide 196 text

Thanos / Cortex / Mimir Kubernetes Cluster App Exporter Mimir Grafana

Slide 197

Slide 197 text

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

Slide 198

Slide 198 text

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

Slide 199

Slide 199 text

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

Slide 200

Slide 200 text

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

Slide 201

Slide 201 text

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

Slide 202

Slide 202 text

Thanos / Cortex / Mimir Mimir Grafana

Slide 203

Slide 203 text

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

Slide 204

Slide 204 text

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

Slide 205

Slide 205 text

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

Slide 206

Slide 206 text

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

Slide 207

Slide 207 text

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

Slide 208

Slide 208 text

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

Slide 209

Slide 209 text

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

Slide 210

Slide 210 text

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

Slide 211

Slide 211 text

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

Slide 212

Slide 212 text

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

Slide 213

Slide 213 text

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

Slide 214

Slide 214 text

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

Slide 215

Slide 215 text

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

Slide 216

Slide 216 text

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

Slide 217

Slide 217 text

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

Slide 218

Slide 218 text

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

Slide 219

Slide 219 text

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

Slide 220

Slide 220 text

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

Slide 221

Slide 221 text

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

Slide 222

Slide 222 text

Store Gateway

Slide 223

Slide 223 text

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

Slide 224

Slide 224 text

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)

Slide 225

Slide 225 text

{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

Slide 226

Slide 226 text

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

Slide 227

Slide 227 text

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

Slide 228

Slide 228 text

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

Slide 229

Slide 229 text

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

Slide 230

Slide 230 text

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

Slide 231

Slide 231 text

Надежность Storage

Slide 232

Slide 232 text

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

Slide 233

Slide 233 text

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

Slide 234

Slide 234 text

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

Slide 235

Slide 235 text

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

Slide 236

Slide 236 text

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

Slide 237

Slide 237 text

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

Slide 238

Slide 238 text

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)

Slide 239

Slide 239 text

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

Slide 240

Slide 240 text

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

Slide 241

Slide 241 text

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

Slide 242

Slide 242 text

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

Slide 243

Slide 243 text

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

Slide 244

Slide 244 text

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

Slide 245

Slide 245 text

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

Slide 246

Slide 246 text

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

Slide 247

Slide 247 text

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

Slide 248

Slide 248 text

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

Slide 249

Slide 249 text

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

Slide 250

Slide 250 text

To be continued…

Slide 251

Slide 251 text

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

Slide 252

Slide 252 text

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