2015 RootConf - Мониторинг в высоконагруженных (и не только) проектах. Сравнительный анализ существующих решений.pptx
- Количество слайдов: 74
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ существующих решений Евгений Потапов Антон Баранов
О нас Евгений Потапов генеральный директор компании 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)
Серверное ПО • My. SQL (кол-во запросов 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+[My. SQL/Postgre. SQL/S QLite/Oracle] • Client-side: zabbixagent/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+My. SQL • Client-side: SNMP
Cacti • Установить на сервер snmpd • Сконфигурировать rocommunity в snmpd • Добавить хост в Cacti
Cacti
Cacti • По дефолту мониторинг только основных ресурсов CPU/Memory/Network etc. • Все остальное - плагины
Cacti • • • Nginx - Percona plugin My. SQL - Percona Plugin URL - m. URLin 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 eventdriven 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 ondemand using Cairo
Graphite Client-side: любое ПО, которое сумеет отсылать данные в нужном формате в Graphite (Bucky, collectd, Collectl, Diamond, Ganglia, Logster, Sensu, statsd etc. )
Graphite • Установка collectd. • Включение нужных плагинов • Конфигурирование плагинов • Настройка отправки данных в Graphite
Graphite
Graphite Мониторинг <название метрики> возможен с помощью чего угодно, что может посылать данные на carbon в нужном формате.
Graphite
Graphite Уведомления через graphitebeacon/graphite-pager и т. д. Graphite-beacon: 1) добавить конфигурация нужного типа уведомлений (SMTP, Hipchat, Slack, Pagerduty, HTTP handlers) 2) Добавить условия генерации уведомлений
Graphite "alerts": [ { "name": "Memory", "query": "alias. By. Node(collectd. *. memoryfree, 1)", "interval": "1 minute", "format": "bytes", "rules": ["warning: < 300 MB", "critical: < 200 MB"] },
Graphite
Graphite Выводы: • Конфигурируется только ПО отсылки данных в graphite. Сложность зависит от ПО. Collectd - прост. • Гибкие настройки уведомлений. • Автоматизация возможна и не составит труда.
Graphite Масштабируется горизонтально Движок хранения данных whisper имеет недостатки, проявляющиеся на больших количествах метрик, рекомендуют менять его, если планируется очень много метрик graphite-relay (решение, проксирующее метрики на несколько процессов carbon-cache для распараллеливания нагрузки) - весьма требовательно к CPU, что порой требует отдельного балансера для нескольких relay.
SAAS-мониторинг • Server. Density • Data. Dog HQ
Server. Density • https: //www. serverdensity. io • Server-side: black-box • Client-side: python-daemon
Server. Density • Добавляем девайс в SD • Устанавливаем клиента на сервер тремя командами: curl -LO https: //www. serverdensity. com/downloads/ag ent-install. sh chmod +x agent-install. sh. /agent-install. sh -a https: //testrootconf. serverdensity. io -k 454981106 adfae 9 b 73 cb 42991 ee 05 a 6 c
Server. Density • Nginx: добавить url к nginxстатусу в /etc/sd-agent/config. cfg • My. SQL: добавить данные доступа в config. cfg • Перезапустить sd-agent • Добавить метрики в свойствах девайса в панели SD
Server. Density
Server. Density
Server. Density • URL для мониторинга добавляется отдельно, в Services • Проверка идет с точек со всего мира (можно выбрать) • Алерты создаются автоматически
Server. Density
Server. Density
Server. Density • Автоматизация без проблем • Наличие API • Уведомления через почту/Slack/Hip. Chat/SMS/P ager. Duty
Datadog HQ • http: //datadoghq. com • Server-side: black-box • Client-side: python daemon
Datadog HQ
Datadog HQ Nginx: • Включить интеграцию • Сделать копипасту в /etc/dd-agent/conf. d/nginx. yaml : init_config: instances: - nginx_status_url: http: //194. 177. 22. 245/nginx-status tags: - instance: vm 96153. local • My. SQL добавляется аналогично, через интеграцию • Рестартовать dd-agent
Datadog HQ
Datadog HQ • Мониторинг сайта добавляется как http -проверка через /etc/ddagent/conf. d/http_check. yaml • Уведомления настраиваются через панель, в разделе «Monitors»
Datadog HQ
Datadog HQ • Автоматизация без проблем • Наличие API • Уведомления через почту/Pager. Duty + ручная настройка чего угодно через webhooks
Мониторинг Так что же выбрать?
Контакты Евгений Потапов http: //itsumma. ru eapotapov@itsumma. ru https: //www. facebook. com/eapotapov Антон Баранов https: //anton-baranov. me abaranov@itsumma. ru https: //www. facebook. com/anton. s. baranov


