Мониторинг в высоконагруженных (и не только) проектах:...

Preview:

Citation preview

Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ существующих решенийЕвгений ПотаповАнтон Баранов

О нас Евгений Потапов

генеральный директор компании 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

eapotapov@itsumma.ruhttps://www.facebook.com/eapotapov

Антон Барановhttps://anton-baranov.me

abaranov@itsumma.ruhttps://www.facebook.com/anton.s.baranov

Recommended