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
«Продакшна» не существует
● Трафик идёт куда повезёт
● Перегрузки нужно мониторить
«Продакшна» не существует
● Трафик идёт куда повезёт
● Перегрузки нужно мониторить
● Упал — не проблема
● Быстро убранное не считается упавшим
Хотелки
● Не менять приложение для новых алертов и графиков
● Не менять сборщики
● Мониторить временные задачи
● СМС только когда всё очень плохо, и только тогда
● 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
● Умеет микросервисы
● Удобный сбор, дашборды, алерты
● Любовь программистов
● Новая боль для админов
● Внедрение от пары часов до пары дней
Вопросы?