Мониторинг веб-проектов: штаб оперативного реагирования и аналитический центр Александр Сербул Руководитель направления контроля качества интеграции и внедрений А зачем мониторить веб-проекты? Клиенты чутко реагируют на доступность и скорость веб-проекта – днем … и ночью Вашу веб-систему есть с чем сравнить - Google, Facebook, Twitter … Вас рассматривают «под лупой», обсуждая недостатки в соцсетях и Twitter! А зачем мониторить веб-проекты? «У них сайт часто зависает и глючит. В делах, видимо, еще больший бардак!» «Они потеряли мои данные. Как скоро их ждать на диске на Горбушке?» У Клиентов обострился вкус на качество вебсистем, они ждут больше и «чтобы побыстрее» Весь офис вышел «покурить» Часть бизнес-процессов компании/проекта завязана на веб-интерфейс – узкое место Чем медленнее веб-админки, тем медленнее работает ваш бизнес Ой, мощностей не хватает со вчера! Отдел продаж в конце месяца – «завесил» 20 образовательных проектов на сутки При начислении зарплаты – сайты открываются по минуте База данных «внезапно» перестала справляться с нагрузкой… Канал просел… Провайдер заглючил… Веб-лицо компании/проекта – должно нравиться и располагать к действию! Клиент должен ощущать надежность веб-решения, легкость и стиль Красный «кабриолет» Зеленый «лимузин» Прежде всего - люди Сотрудник/группа эксплуатации – с подлинным техническим образованием Люди либо с опытом, либо … учатся на вашем проекте и Клиентах Админ «Петя» за $500 и телефон подключит, и … сервера настроит Прежде всего - люди Понимание Unix/Linux изнутри и сетевых протоколов, RFC Способность иногда «программировать» на bash (приветствуется - perl, C и др.) Некий «гибрид» разработчика и администратора «Ищем сисадмина: Windows Visa/7/Free BSD/Open BSD/Net BSD/Solaris/Cisco/IP телефония, С, С++, Java. Умение верстать, JS, разбираться в чужом коде, таскать коробки и работать в Agile команде» Стиль работы – «Ослик» Подход «жертвы»: «Вы скажите, позвоните, напишите, напомните – мы же умные, мы - сделаем». Сделают, но Клиент уже прокатится на «красном кабриолете» «Ой, мы потеряли данные клиентов. Сейчас настроим бэкап» «Сейчас все сделаю и за полдня – все заново протестирую» Стиль работы – «Штурман» Проактивность. Узнать раньше Клиента о проблеме или одновременно. Скорость. Автоматизировать решение типовых задач – не тянуть резину по 2-3 дня. Системный подход. Не наступать на одни грабли 2 раза подряд. Фиксировать детали аварии. Заглядывать за горизонт. Сбор и анализ трендов, закупка оборудования, увеличение мощностей. Стиль работы – «Штурман» Дальше – детали и технический хардкор Что мониторим прежде всего? Наличие свежих бэкапов! Учения по восстановлению из бэкапов – прошли недавно, успешно Доступность «морды» сайтов – снаружи. Желательно из нескольких точек (ping-admin.ru, host-tracker.com …) Срок действия SSL-сертификатов Доступность «админок» – изнутри … Наличие свежих бэкапов! Чем мониторим Nagios (www.nagios.org) Zabbix (www.zabbix.com/ru/) Регистрация событий в журнале для аудита и анализа, e-mail/SMS – уведомления, свои обработчики событий. Чем мониторим Заведите машину мониторинга, если проектов много, «копейка рубль бережет» Важно мониторить сам сервер мониторинга из другого ДЦ Что мониторить на сервере Базовые тесты сервера – ставим везде Тесты критичного софта – иногда Тесты mysql и другой БД – отдельная интересная тема для DBA «Комплексные» тесты – ставим на машину мониторинга Базовые тесты сервера Минимум, без которого - ну никак нельзя vmstat Тесты критичного софта Для критичного софта: считаем число процессов, объем RSS, %CPU, process system/user time Тесты БД Привожу пример для MySQL Мониторинг MySQL Гистограмма времени обработки запросов (Percona) Мониторинг операционной системы Очень полезные утилиты: atop, apachetop, innotop atop (www.atoptool.nl): Мониторинг операционной системы apachetop (freecode.com/projects/apachetop) – гистограмма запросов к apache - онлайн Мониторинг БД innotop (code.google.com/p/innotop) Мониторинг веб-приложения Лог работы скрипта (>) – обновился за N часов Лог ошибок работы скрипта (2>) – должен быть пуст Pinba! http://pinba.org Плагин для PHP + cпециальный storage для MySQL Онлайн агрегатор хитов UDP-пакеты Тэги позволяют гибко получать информацию о различных показателях веб-приложения Уже установили? Правильно Мониторинг веб-приложения Число ошибок в хитах за 15 минут - меньше L Макс. время хита (тэга pinba) – меньше M сек. Макс. использование памяти хитом – меньше N МБ Графики рисует простой плагин для munin Мониторинг веб-приложения «Стоимость» хита в процессором времени - pinba Графики рисует простой плагин для munin Мониторинг веб-приложения Хиты в разрезе - pinba Графики рисует простой плагин для munin Мониторинг веб-приложения Гистограммы распределения времени хитов, памяти, кодам ответа – из логов (awk-скрипт) Общая температура «по палате» Аналитика Видим, что было Предвидим, что будет Улавливаем тренды Планируем мощности железа Сравниваем настройки софта Веб-система перестает быть черным ящиком, видно ее развитие с течением времени Аналитика Апачи MaxClients = StartServers = MinSpareServers = MaxSpareServers < 20-30 Аналитика Nginx Аналитика - MySQL Следите за числом потоков на БД! 100 уже немало Аналитика - MySQL Кэш запросов иногда эффективнее отключить Аналитика - MySQL Медленные запросы – часто признак проблемы Аналитика Память Apache MaxClients MySQL buffers … Нужно «прикинуть» максимальный расход памяти в приложениях и следить за ней Аналитика Уход в swap. На графике машина - зависла. Скорость работы с диском на несколько порядков ниже. Нужно стараться избегать своппинга. Аналитика Дисковая подсистема Аналитика Дисковая подсистема iostat Аналитика Сеть Аналитика Нагрузка Аналитика Нагрузка Аналитика memcached Действия при аварии Нужно быстро понять – где и как починить Смотрим срабатывание тестов nagios – часто единственный источник информации Смотрим почту от nagios Смотрим логи. Держим заготовленные скипты-парсеры логов на поиск ошибок. Вот тут наливаем чай Смотрим графики munin, базу pinba Если получается, запускаем инструменты поиска узких мест Инструменты поиска узких мест Apache /server-status Включенные логи медленных запросов php-fpm, nginx, apache, mysql Инструменты поиска узких мест XHProf, pinba, XDebug Инструменты поиска узких мест XHProf (github.com/facebook/xhprof) Почти не создает нагрузку на бою Можно быстро найти корень проблемы Полезно автоматически сохранять трейсы долгих страниц … и анализировать их с разработчиками Инструменты поиска узких мест XDebug (xdebug.org) Cоздает ощутимую нагрузку на бою Можно снимать трейсы выполнения веб-страниц Часто – незаменимый инструмент Инструменты поиска узких мест Старые, добрые утилиты unix strace gdb gdb –p 123456 (gdb) source /src/php-5.3.19/.gdbinit (gdb) dump_bt executor_globals.current_execute_data [0x0252d628] stemming() /var/www/html/bitrix/modules/search/tools/stemming.php:231 [0x0252bc78] stemming() /var/www/html/bitrix/modules/search/classes/mysql/search.php:1090 [0x02525ec8] StemIndex() /var/www/html/bitrix/modules/search/classes/general/search.php:1332 [0x025223f8] Index() /var/www/html/bitrix/modules/iblock/classes/general/iblockelement.php:4857 [0x0251b670] UpdateSearch() /var/www/html/bitrix/modules/iblock/classes/general/iblockelement.php:3295 [0x02519c40] Add() /var/www/html/bitrix/modules/crm/classes/general/crm_webdav_helper.php:486 [0x02514010] SaveEmailAttachment() /var/www/html/bitrix/modules/crm/classes/general/crm_email.php:867 [0x065c2030] EmailMessageAdd() [0x0250fcc8] call_user_func_array() /var/www/html/bitrix/modules/mail/classes/general/mail.php:2477 … Автоматизация жизнеобеспечения Пишем хандлеры для nagios/zabbix Можно поиграться с Pacemaker Чем проще – тем лучше! С удовольствием пообщаюсь на эту тему в кулуарах Спасибо за внимание! Вопросы? Александр Сербул [email protected] @AlexSerbul