Логгинг, мониторинг и все остальное
DESCRIPTION
Доклад на DevOps-40 meetup в баре KLЮTCHTRANSCRIPT
DevOps-40
Логгинг, мониторинги графики
12.10.2013, DevOps meetup, СПб
DevOps-40
Я:● Инженер по эксплуатации сайтов● Работа хорошая, но как сайт упал – так хоть увольняйся
DevOps-40
Вы:● Разработчики сайтов● Архитекторы● Инженеры по эксплуатации● CTO● Неравнодушные люди
DevOps-40
Чтобы сайт не падал● Нужно за ним ухаживать:● Собирать метрики● Анализировать метрики● ^ без участия человека● Оповещать о проблемах● Предсказывать проблемы
DevOps-40
Какие метрики собирать● Метрики приложения:● Количество ошибок, таймеры, другая статистика (счетчики)
● Метрики платформы:● CPU, RAM, disk usage, IOPS, interrupts, etc, etc
DevOps-40
Метрики платформы● Классика, десятки решений:● SNMP● Cacti, Zabbix, Munin, Zenoss, OpenNMS, collectd, you-name-it
● Общие принципы: наличие агента, хранение данных в формате RRD
DevOps-40
Zabbix● Ненавижу и стараюсь уничтожить:● плохо скриптуется Chef/Salt/etc● плохо оптимизированы запросы – может потреблять много ресурсов
● плохой дизайн, “все в одном”● last, but not least: PHP
DevOps-40
Munin● Настраиваю в первую очередь:● отлично скриптуется Chef/Salt/etc● огромное количество плагинов● легко писать новые плагины● основные метрики начинают собираться сразу после установки
DevOps-40
Munin: пример
DevOps-40
Munin: проблемы● Плагины форкаются, когда их много – лишняя нагрузка на хост
● Когда много хостов – велика нагрузка на Munin-сервер
● Не очень хорошо машстабируется● Более 50 хостов я не пытался
DevOps-40
Метрики приложения● SaaS● Таймеры и счетчики - NewRelic● Ошибки – AirBrake, Qbaka● Общие принципы: понадобится агент и план подписки
DevOps-40
NewRelic: пример
DevOps-40
NewRelic: проблемы● Не обладает всей полнотой знания о структуре и алгоритме работы приложения
● Для детального анализа ситуации недостаточен
DevOps-40
Метрики приложения● In-house решения● Ошибки – pupergrep, logstash, Graylog2, Sentry/Raven
● Таймеры и счетчики – PINBA, Graphite, OpenTSDB
DevOps-40
Ошибки: воркфлоу● Приложение ведет лог в файл, лог-коллектор обрабатывает:
● logstash● Приложение через библиотеку общается с сервером напрямую:
● Sentry/Raven
DevOps-40
Лог-коллектор: logstash● Написан на JRuby● Требует JVM● Расходует память● Расходует процессор● JRuby не очень подходящее решение, как мне кажется
DevOps-40
Таймеры и счетчики● PINBA – только для тех, у кого PHP● Только собирает, не рисует● http://goo.gl/LGmkvF - наивная визуализация PINBA для Munin
● ^ такой детализации недостаточно, плохо смотреть историю
DevOps-40
UNIX-way FTW● StatsD – простой протокол передачи таймеров/счетчиков
● StatsD-сервер – собирает, агрегирует, передает дальше
● Graphite – сохраняет в формате Whisper и рисует графики
DevOps-40
Graphite: визуализация● Есть встроенный dashboard, он ужасен
● GDash – dashboard на Ruby:● отлично скриптуется Salt/Chef - http://goo.gl/Ayc5FU стейты здесь
● Есть и другие дэшборды
DevOps-40
StatsD: проблемы● У меня были проблемы с оригинальным StatsD-сервером на Node.JS (терялись метрики)
● Я просто взял statsd.rb (реализация на Ruby)
● Реализации есть на чем угодно
DevOps-40
StatsD: плюсы● Отлично масштабируется● ^ Просто возьмите еще один и сливайте данные в тот же Graphite
● Реализации как клиента, так и сервера, есть на всех основных языках
DevOps-40
GDash: пример
DevOps-40
GDash: пример
DevOps-40
Немного об оповещениях● NAGIOS отлично генерирует алерты
● NAGIOS отлично принимает пассивные проверки на TCP порт
● NAGIOS отлично скриптуется Chef/Salt
DevOps-40
Спасибо за внимание!● Вопросы?● DevOps-40: 40° should be enough for everyone!