Мониторинг в высоконагруженных (и не только) проектах:...
TRANSCRIPT
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ существующих решенийЕвгений ПотаповАнтон Баранов
О нас
Евгений Потаповгенеральный директор компании 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-приложение
Graphite
Server-side:• Carbon• Whisper• Graphite webapp
Graphite
carbon - a Twisted (an event-driven networking engine written in Python) daemon that listens for time-series data
Graphite
whisper - 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
Graphite
Client-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.sh
chmod +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
https://www.facebook.com/eapotapov
Антон Баранов
https://anton-baranov.me
https://www.facebook.com/anton.s.baranov