Post on 12-Aug-2015
Путь мониторингамодульность.гибкость.devops
Ghbdtn!
• Всеволод Поляков
• Lead DevOps Grammarly
• поддержка около 30 сервисов на Java, erlang, python, lisp, ruby, js силами 4-х админов
Чего мы хотим?• Получать сообщения о проблемах
• Не получать сообщения когда проблем нет
• Помощь в поиске проблемы
• Предупреждение о возможных проблемах
• Не пропускать проблемы
DevOps
• Разработчики знают сервис лучше чем опсы
• Нет батлнека в опс команде
• Повышается скорость работы
Почему старое плохо?
• Свои сложные концепции
• Сложно для девелоперов
• Содержит в себе все что может пригодиться, а может и не пригодиться
• Две системы управления конфигурацией
Метрики
• env.role.node_name.metric
• Приложение пишет метрики в statsd
• Система пишет метрики в statsd
• Агрегируем и чекаем сами, без приложения
Statsd
• Агрегируем сами• metric.name:1|c• каунтеры, гауджи и таймеры
Пожелания• Простота добавления метрик и
проверок по ним
• Должно скейлиться и не падать
• Хранить информацию по метрикам как можно дольше
• Хранить много метрик
• Разработчики мониторят свои сервисы без участия опсов
• Логи: 300 Gb/день
• Метрики: 120 000, после агрегации, обновляются раз в 10 секунд
• 300 проверок состояний
• Разработчики всех сервисов отвечают за мониторинг
• Занятость команды админов в мониторинге минимальна
Sensu
influx
• Маленькая база на go ~ 20mb RAM
• Локальная база на каждом сервере
• Хранилище метрик на два дня
Сбор метрик в ноде
Глобальное хранилище
скрин графаны
Логи
• Общий формат для всех сервисов: json
• Текстовый файл с logrotate
Мониторинг фронтенда
Web browser Web browser Web browser
Nginxx 2
Access logs
Logstash
Elasticsearch x 3
Statsd
Graphite
Graphana Kibana
x 2
Мониторинг фронтенда
metrics codec
Logstash
metrics data~ 2600 RPS
~ 90 GiB / day
logs data~ 450 RPS
~ 50 GiB / day
Nginx access logs
statsd
logs codec(source maps)
elasticsearch
tail *.log files
UDP HTTP
Heka - by Mozilla
• Hekad ~~ легковесный и ускоренный Logstash
• Можно ставить на каждый сервер
• Может объединить сбор метрик и логов
Heka - by MozillaHekad - single process, plugins by configuration
Inputs Decoders Filters Encoders Outputs
● File polling
● File tailing● HTTP● TCP/UDP● Kafka● nagios
checks● statsd
● Framing● Regex● Token
Splitters
● JSON● Access
logs● Geo IP● Linux
Stats● Protobuf● Rsyslog● MySQL
slow log
● Counter● Anomaly
detection● Frequent
items● Unique● HTTP
status graph
● Alert● Elasticsearc
h● Stats● Influxdb
schema● JSON
● AMQP● Carbon● Elasticsearc
h● File● HTTP● IRC● Kafka● Log● Nagios● SMTP● …..
Жизнь без Heka
Server
Statsd
Logstash-fw
Elasticsearch
Graphite
Logstashgateway
Statsd x 3
x 4
x 300
x 2app & server metrics
metrics from logs
logs
Жизнь с Heka
ServerHekad
Elasticsearch
Graphite
x 4x 300
x 2app & server metrics
metrics from logs
logs
Полная конфигурация мониторинга приложения находится в одном месте
StatsdLogstash
-fw
Logstashgateway
Statsd x3
✓
Стабильность HTTP сервисов
● health-чеки ок, но их мало
● нужно мониторить error логи сервисов
● нужно собирать статистику статусов и времени отклика всех http запросов
● нужно взвешивать показатели относительно количества уникальных пользователей
● e.g. “% пользователей, получивших http 50x для сервиса за последние N минут”
● подсчет укикальных значений по большому массиву данных в реальном времени — непростая задача
● Elasticsearch HyperLogLog++ алгоритм с нечеткой логикой, лучше подходит для оффлайн анализа
● statsd - считаем уники распределенно, но не группируем
● в идеале, сделать риалтаймовую и распределенную? молотилку для уников и гистограмм
Считалка уников
Стабильность HTTP сервисов
Слайд по всяким штукам
• 500-е, уникальные юзеры
• разработчики сами все мониторят и просыпаются ночью
• сравнение времени обработки чего-то в фронтенде и на бекенде
• сквозной userID по всем сервисам
Над чем мы думаем
• Мониторинг безымянных серверов
• Коллекция и хранение метрик приложений в mesos/kubernetes окружениях
Спасибо.мои контакты: ctrlok@gmail.comgithub.com/ctrlok
skype: ctrlok1987
мои контакты2: yuriy.bogdanov@grammarly.com
github.com/ybogdanov