Партнерская конференция «1С-Битрикс» Мониторинг проектов: сравнительный анализ существующих решений Антон Баранов Системный администратор Linux | ПАРТНЕРСКАЯ КОНФЕРЕНЦИЯ О себе Антон Баранов Системный администратор Linux. Более 6 лет опыта работы с Linux-системами и webпроектами различной сложности. Последние полтора года тружусь в компании ITSumma над обеспечением стабильной работы highloadпроектов для посетителей со всего мира. | ПАРТНЕРСКАЯ КОНФЕРЕНЦИЯ О нас На поддержке: | ПАРТНЕРСКАЯ КОНФЕРЕНЦИЯ Разделы • Что именно необходимо мониторить в высоконагруженном (и не только) проекте? • Обзор существующих 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 (SW/HW) •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 систем мониторинга (cacti,zabbix,graphite) | ПАРТНЕРСКАЯ КОНФЕРЕНЦИЯ Zabbix •Open-source •Server-side: PHP+[MySQL/PostgreSQL/SQLite/Oracle] •Client-side: zabbix-agent/SNMP/external checks | ПАРТНЕРСКАЯ КОНФЕРЕНЦИЯ Zabbix •Создаем хост в Zabbix •Устанавливаем на сервер zabbix-агент | ПАРТНЕРСКАЯ КОНФЕРЕНЦИЯ Zabbix •Добавляем шаблоны •Импортируем недостающие •Настраиваем zabbix-agent •Настраиваем web-сценарий для проверки URL | ПАРТНЕРСКАЯ КОНФЕРЕНЦИЯ Zabbix Мониторинг nginx: •Импорт шаблона •Создание bash-скрипта для парсинга nginxстатуса •Прописывание инклуда в конфиг zabbix-agent | ПАРТНЕРСКАЯ КОНФЕРЕНЦИЯ 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> | ПАРТНЕРСКАЯ КОНФЕРЕНЦИЯ 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 • 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://bitrixconf.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 HQ Nginx: • Включить интеграцию • Сделать копипасту в /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/ddagent/conf.d/http_check.yaml •Уведомления настраиваются через панель, в разделе «Monitors» | ПАРТНЕРСКАЯ КОНФЕРЕНЦИЯ DataDog HQ | ПАРТНЕРСКАЯ КОНФЕРЕНЦИЯ DataDog HQ •Автоматизация без проблем •Наличие API •Уведомления через почту/PagerDuty + ручная настройка чего угодно через webhooks | ПАРТНЕРСКАЯ КОНФЕРЕНЦИЯ Мониторинг Так что же выбрать? | ПАРТНЕРСКАЯ КОНФЕРЕНЦИЯ Мониторинг Это зависит от многих факторов. Основные: •Количество узлов, которые нужно мониторить •Задачи, которые планируется решать | ПАРТНЕРСКАЯ КОНФЕРЕНЦИЯ Спасибо за внимание! Вопросы? | ПАРТНЕРСКАЯ КОНФЕРЕНЦИЯ Контакты Антон Баранов https://anton-baranov.me [email protected] https://www.facebook.com/anton.s.baranov