Prometheus мониторинг микросервисных приложений / Виталий...

Preview:

Citation preview

Prometheusмониторинг микросервисных приложений

v 1.3

Виталий Левченко

О чём докладSome people, when confronted with a problem, think “I know, I'll use regular expressions.” Now they have two problems. © Jamie Zawinski

О чём доклад

● Принёс проблемы микросервисы

● Не осилил мониторинг

● Внедрил Prometheus

● Походил по граблям

О себе

● Приношу проблемы

О себе

● Приношу проблемы

● Web developer

● Technology evangelist

ГенезисНе было печали — микросервисы внедряли

Микросервисы

● High availability

● Docker

Микросервисы

● Много похожих сервисов

● Запущены где повезёт

● Упал — не проблема

«Продакшна» не существует

● Continuous delivery

● A/B tests

«Продакшна» не существует

● Трафик идёт куда повезёт

● Перегрузки нужно мониторить

«Продакшна» не существует

● Трафик идёт куда повезёт

● Перегрузки нужно мониторить

● Упал — не проблема

● Быстро убранное не считается упавшим

А проблемы известные

● The twelve factor app (12factor.net)

Хотелки

● Не менять приложение для новых алертов и графиков

● Не менять сборщики

● Мониторить временные задачи

● СМС только когда всё очень плохо, и только тогда

● Keep it simple, stupid!

Решения«У человека должен быть выбор … даже если это выбор между плохим и очень плохим вариантом»

Zabbix, Munin + Nagios

● Всё руками

● Алерты на реконфигурацию

● Агрегация снаружи

CollectD + InfluxDB + Riemann

● Всё так же руками

● Riemann не умеет агрегацию

● CollectD синхронный (!)

● Медленные запросы

Prometheus

● Like Google Borgmon

● Автоконфигурация

● Модульный, Go

● Производительный из коробки

● “Betta than nothing”

PrometheusDavid: Why do you think your people made me?

Charlie Holloway: We made you because we could.

Правильные метрики

● Метки: server, env, handler, error type whatever

● Агрегаты по любым срезам

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

Правильные функции

ALERT DiskWillFillIn4Hours

IF predict_linear(node_filesystem_free{job='node'}[1h], 4*3600) < 0

FOR 5m

LABELS {

severity="page"

}

Pull metrics

● Push хуже масштабируется

● Push поздно сообщает, что упал

● Prometheus в dev

StatsD

● Почти все нестабильны

● Prometheus exporter стабилен!

● Не умеет гистограммы, gauge etc

● Используйте push gateway!

Автоконфигурация

● AWS, Consul, Kubernates, Zookeeper whatever

● Даже из файлов!

● Отдельно автоматизировать дашборды

Сбор метрик с серверов и БД

● Node exporter

● PostgreSQL exporter

● …

● Напишите свой, это просто (Go)

● Use systemd, Luke!

Без агрегации

● Внимательно читайте документацию!

● Метрики сбрасываются при рестарте

● Лучше без этого

Отказоустойчивость

● rm -r <storage path>/* © docs

● Federation

● Сбор в несколько серверов

● Ждём openTSDB

Summary vs histogram

● Гистограммы хороши для SLA

● Саммари умеют квантили, но не агрегацию

● Гистограммы медленные на запросы

● Use recording rules

Что собирать с сервисов

● Входящие и исходящие запросы (latency + count)

● В том числе запросы в БД

● Ошибки

● Активные коннекты (!)

● Метрики производительности + статистика

Итоги Prometheus

● Умеет микросервисы

● Удобный сбор, дашборды, алерты

● Любовь программистов

● Новая боль для админов

● Внедрение от пары часов до пары дней

Вопросы?

Контакты

● Виталий Левченко

● levtchenko@gmail.com