Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ существующих решенийЕвгений ПотаповАнтон Баранов
О нас Евгений Потапов
генеральный директор компании ITSumma
Круглоcуточное удаленное администрирование серверов и техническая поддержка сайтов
100 миллионов уникальных посетителей в сутки
Штат – 50 человек
Более тысячи серверов на поддержке
О нас Антон Баранов
системный администратор Linux/Unix компании ITSumma
более 6 лет работы с Linux-системами и web-проектами различной сложности
Последние полтора года тружусь над обеспечением стабильной работы highload-проектов для посетителей со всего мира.
О насНа поддержке:
Разделы• Что именно необходимо
мониторить в высоконагруженном (и не только) проекте 24/7?
• Обзор существующих open-source (cacti,zabbix,graphite) систем мониторинга.
• Какие существуют SAAS-решения для мониторинга?
Что нужно мониторить?• Потребление ресурсов• Работу серверного ПО• Бизнес-логика
приложения
РесурсыДелятся на 2 группы:• Критические• Важные
Критические ресурсыПроблемы с ними гарантированно приведут к неработоспособности сервисов.
Критические ресурсы• CPU (idle,user,stalled/LA)• Memory (free,used)• Disk IO %• Traffic In/Out• Disk usage space
(free,used)
Важные ресурсыНаблюдение за ними позволяют предсказать возникновение проблем
Важные ресурсы• SWAP• Raid status (HW/SW)• S.M.A.R.T. status• IOPS (read/write)
Важные ресурсы• Disk avio• Sockets• CPU temperature• CPU Fan Speed
Серверное ПОСамое главное: вы должны четко представлять себе, для чего необходимо мониторить тот или иной параметр.
Серверное ПО• Nginx (RPS,
reading/writing/keepalive reqs)• PHP-FPM (RPS, кол-во
children’ов, кол-во «max children reached»
• Sphinx (кол-во запросов, наличие Fatal Error)
Серверное ПО• MySQL (кол-во запросов
select,update,insert/rows processed/innodb buffer pool usage/replica status)
• Exim (размер почтовой очереди)
Бизнес-логикаВсе показатели работы проекта, проблемы с которыми являются критичными для бизнеса
Бизнес-логика• Кол-во новых
регистраций• Корректность работы
процесса регистрации ( от заполнения формы до активации учетной записи)
Бизнес-логика• Кол-во скачиваний
приложения• Кол-во показов
баннерной рекламы и кликов по ней
Бизнес-логика• Доступность сервиса
компании-партнера, чей контент используется на сайте
• Статистика по запросам с тем или иным реферером
Да чему там ломаться?
Мониторинг мониторинга!
• Работа подсистемы уведомлений
• Возможность отправки почты/смс/уведомлений в jabber/slack/hipchat и т.д.
Open-source мониторинг• Zabbix• Cacti• Graphite
Что мониторим?• CPU• Memory• Nginx status• Mysql status• URL response time
Zabbix• Open-source• Server-side: PHP+
[MySQL/PostgreSQL/SQLite/Oracle]
• Client-side: zabbix-agent/SNMP/external checks
Zabbix• Создаем хост в zabbix
• Устанавливаем на сервер zabbix-agent
Zabbix• Добавляем шаблоны• Импортируем
недостающие• Настраиваем zabbix-
agent• Настраиваем web-
сценарий для проверки URL
ZabbixМониторинг nginx:• Импорт шаблона• Создание bash-скрипта
для парсинга nginx-статуса
• Прописывание инклуда в конфиг zabbix-agent
Zabbix
Zabbix
ZabbixУведомления
Шаблон => Триггер => Действие
ZabbixВыводы:• Конфигурирование
Zabbix - достаточно сложно
• Zabbix-сервер масштабируется так же, как и любое другое веб-приложение
Zabbix• Автоматизация
мониторинга новых узлов возможна без проблем любыми средствами управления конфигурацией
Cacti• Open-source• Server-side:
PHP+rrdtool+MySQL• Client-side: SNMP
Cacti• Установить на сервер
snmpd• Сконфигурировать
rocommunity в snmpd• Добавить хост в Cacti
Cacti
Cacti• По дефолту мониторинг
только основных ресурсов - CPU/Memory/Network etc.
• Все остальное - плагины
Cacti• Nginx - Percona plugin• MySQL - Percona Plugin• URL - mURLin plugin• Alerts - thold plugin• Mail - settings plugin
Cacti
Cacti• уведомления только на
email через плагин settings (возможно есть и другие плагины)
Cacti
CactiВыводы• Мониторинг либо через
snmp (включая custom OID), либо через плагины
• Кол-во способов уведомления ограничено
CactiВыводы• Автоматизация
возможна только через cli скрипты
• Масштабируется как обычное web-приложение
GraphiteServer-side:• Carbon• Whisper• Graphite webapp
Graphitecarbon - a Twisted (an event-driven networking engine written in Python) daemon that listens for time-series data
Graphitewhisper - a simple database library for storing time-series data (similar in design to RRD)graphite webapp - Django webapp that renders graphs on-demand using Cairo
GraphiteClient-side: любое ПО, которое сумеет отсылать данные в нужном формате в Graphite (Bucky, collectd, Collectl, Diamond, Ganglia,Logster, Sensu, statsd etc.)
Graphite• Установка collectd.• Включение нужных
плагинов• Конфигурирование
плагинов• Настройка отправки
данных в Graphite
Graphite<Plugin mysql> <Database test1> Host "127.0.0.1" User "root" Password "sohW2ax0Eenox9t" Database "test1" MasterStats false </Database></Plugin><Plugin nginx> URL "http://127.0.0.1/nginx-status"</Plugin><Plugin nginx> URL "http://127.0.0.1/nginx-status"</Plugin>
GraphiteМониторинг <название метрики> возможен с помощью чего угодно, что может посылать данные на carbon в нужном формате.
Graphite
GraphiteУведомления через graphite-beacon/graphite-pager и т.д.Graphite-beacon:1) добавить конфигурация нужного типа уведомлений (SMTP, Hipchat, Slack, Pagerduty, HTTP handlers)2) Добавить условия генерации уведомлений
Graphite "alerts": [ { "name": "Memory", "query": "aliasByNode(collectd.*.memory.memory-free, 1)", "interval": "1minute", "format": "bytes", "rules": ["warning: < 300MB", "critical: < 200MB"] },
Graphite
GraphiteВыводы:• Конфигурируется только ПО
отсылки данных в graphite. Сложность зависит от ПО. Collectd - прост.
• Гибкие настройки уведомлений.
• Автоматизация возможна и не составит труда.
GraphiteМасштабируется горизонтальноДвижок хранения данных whisper имеет недостатки, проявляющиеся на больших количествах метрик, рекомендуют менять его, если планируется очень много метрикgraphite-relay (решение, проксирующее метрики на несколько процессов carbon-cache для распараллеливания нагрузки) - весьма требовательно к CPU, что порой требует отдельного балансера для нескольких relay.
SAAS-мониторинг• ServerDensity• DataDog HQ
ServerDensity• https://
www.serverdensity.io• Server-side: black-box• Client-side: python-
daemon
ServerDensity• Добавляем девайс в SD• Устанавливаем клиента на сервер
тремя командами:curl -LO https://www.serverdensity.com/downloads/agent-install.shchmod +x agent-install.sh./agent-install.sh -a https://testrootconf.serverdensity.io -k 454981106adfae9b73cb42991ee05a6c
ServerDensity• Nginx: добавить url к nginx-
статусу в /etc/sd-agent/config.cfg
• MySQL: добавить данные доступа в config.cfg
• Перезапустить sd-agent• Добавить метрики в
свойствах девайса в панели SD
ServerDensity
ServerDensity
ServerDensity• URL для мониторинга
добавляется отдельно, в Services
• Проверка идет с точек со всего мира (можно выбрать)
• Алерты создаются автоматически
ServerDensity
ServerDensity
ServerDensity• Автоматизация без
проблем• Наличие API• Уведомления через
почту/Slack/HipChat/SMS/PagerDuty
Datadog HQ• http://datadoghq.com• Server-side: black-box• Client-side: python daemon
Datadog HQ
Datadog HQNginx:• Включить интеграцию• Сделать копипасту в /etc/dd-agent/conf.d/nginx.yaml :init_config:instances: - nginx_status_url: http://194.177.22.245/nginx-status tags: - instance:vm96153.local• MySQL добавляется аналогично, через интеграцию• Рестартовать dd-agent
Datadog HQ
Datadog HQ• Мониторинг сайта добавляется
как http-проверка через /etc/dd-agent/conf.d/http_check.yaml
• Уведомления настраиваются через панель, в разделе «Monitors»
Datadog HQ
Datadog HQ• Автоматизация без
проблем• Наличие API• Уведомления через
почту/PagerDuty + ручная настройка чего угодно через webhooks
Мониторинг
Так что же выбрать?
КонтактыЕвгений Потаповhttp://itsumma.ru
[email protected]://www.facebook.com/eapotapov
Антон Барановhttps://anton-baranov.me
[email protected]://www.facebook.com/anton.s.baranov