Мониторинг веб-проектов real-time мониторинг и аналитика,...

61
Мониторинг веб- проектов: real-time мониторинг и аналитика, поиск ошибок и «боевая» отладка Александр Демидов, «1С-Битрикс»

Transcript of Мониторинг веб-проектов real-time мониторинг и аналитика,...

Page 1: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

Мониторинг веб-проектов: real-time мониторинг и аналитика, поиск ошибок и «боевая» отладкаАлександр Демидов,«1С-Битрикс»

Page 2: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов
Page 3: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов
Page 4: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

О чем будем говоритьЯвные и не очень потери на медленном / недоступном сайте.

Спасет ли SLA провайдера?

Общие принципы внедрения систем real-time мониторинга.

Мониторинг нетипичных характеристик (наличие бэкапов, делегирование домена и т.п.).

Автоматизация типовых реакций на алерты.

Зачем нужна аналитика в мониторинге (пробуем предугадать проблемы до того, как они случатся).

Инструменты и общие подходы быстрого поиска "узких" мест.

Немного про client side.

Page 5: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

Что теряет медленный сайт?

Прямые потери заказов

Финансовые потери во время рекламных компаний – вы платите за «холостые» клики

Стоимость контекстной рекламы

Page 6: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

Значение поиска невозможно преуменьшить

60% трафика интернет-магазина – поиск (конверсия этого трафика около 0.5 %)40% остального трафика – средняя конверсия 1.1% (исследование Webprofiters)Несложная математика: около 40% заказов – из поиска

Page 7: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

Медленный сайт опускается в результатах поискаФакторы ранжирования

время отклика сайтаскорость загрузки страницывозвраты на SERP и переходы на другие сайтыколичество просмотренных страницобщее время сессии

Page 8: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

Падение CTR

Page 9: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

Агрегаторы тоже не любят медленные сайты

Яндекс.Маркет ежедневно отключает на полтора часа более 1000 магазинов из-за таймаутов

Page 10: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

Если ваш сайт выглядит как живой... убедитесь, что он еще и здоровый.

Page 11: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

Спасет ли SLA провайдера?Ни один SLA не покроет вашу упущенную выгоду (прибыль), только расходы на хостинг.Наиболее часто встречается гарантия 99.9% доступности в SLA.Это – около 9 часов простоя в год.Небольшие слоты (до 5 минут) никто не считает.Ребут сервера, скорее всего, не попадает под SLA. А если это база данных, она может стартовать несколько часов после аварийного завершения.

Page 12: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

«Хитрости» SLA

Web 1

Elastic Load Balancing

Web N

…CloudWatch + AutoScaling

Web 1 Web 2 Web N

…CloudWatch + AutoScaling

S3

control cache: memcached

mysqld

mysqld

mysqld

mysqld

mysqld

mysqld

master-master replication

master-master replication

master-master replicationmysqld

mysqld

mysqld

mysqld

mysqld

mysqld

mysqld

mysqld

mysqld

mysqld

mysqld

mysqld

control cache: memcached

control cache: memcached

control cache: memcached

control cache: memcached

control cache: memcached

Web 2

$25 / месяц

$5000 / месяц

Page 13: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

Недоступность сайта…Вышел из строя дискКончилось место на дискеНе хватило ресурсов CPUНе хватило памятиНе хватило производительности дискаНе хватило каналаВышла из строя оперативная памятьВышла из строя материнская платаСгорел блок питанияDDoSВзлом - целевая атакаВзлом - нецелевая атакаРазделегирование доменаЗакончился срок действия SSL сертификатаВыход из строя маршрутизатора провайдераАвария на канале провайдераПотери пакетов у upstream провайдераАвария с электропитаниемВыход из строя вентиляции - перегревОшибки настройки сетиОшибки настройки веб-сервераОшибки настройки базы данныхОшибка разработкиПреднамеренное вредительство разработчикомОшибки на файловой системе

Попадание в реестр РоскомнадзораОшибки внешних систем (например, платежная система в интернет-магазине)Ошибка персонала хостераОшибка персонала upstream оператораНедоступность и авария DNSУдаленность хостинга от клиентовОшибки в системном ПО (segfault)Ошибки файловой системы после аварийной перезагрузкиОшибки БД после аварийной перезагрузкиСброс несохраненных настроек после перезагрузкиНеоплата хостингаНеоплата лицензий на ПОНесовместимость с клиентским ПООтсутствие ресурсов для масштабирования (не хватило серверов)Неготовность приложения к масштабированиюОтсутствие кэшированияВзаимодействие с внешними системами (нагрузка импортами)Нагрузка во время создания бэкапаОшибки после установки обновленийОшибочная блокировка браузерами (вирусы)Отсутствие обработки пользовательских данныхАвария на уровне датацентра (пожар, наводнение)Отсутствие бэкапа для восстановления«Битый» бэкап (не было учений по восстановлению)Несвоевременная реакция сисадмина

Page 14: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

Real Time мониторинг – как узнавать о проблемах?

Можно – так…

Page 15: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

Или – так…

Real Time мониторинг – как узнавать о проблемах?

Page 16: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

Как при этом не взорвать мозг?Доступность «Битрикс24» и облачных сервисов «1С-Битрикс» - 99.99%8200+ проверок в трех регионах в системе мониторинга

Page 17: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

Организация системы мониторинга

Лучше – стандартные решения (Nagios, Zabbix и т.п.), а не самописные.Дежурная смена и/или мгновенные уведомления.Мониторить – всё.Но – аккуратно. Тысячи уведомлений будут бесполезны.Автоматизация типовых реакций.Мониторить систему мониторинга.В идеальном мире – распределенная система мониторинга.

Page 18: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

Мониторинг «железа»РейдыS.M.A.R.T. – диск, возможно, скоро «умрет»Утилиты вендора – внутренние аппаратные тестыПериодическое тестирование железа в оффлайнеИмеем «запчасти» (блоки питания, вентиляторы …) или знаем где их быстро найти

Page 19: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

Мониторинг сетиЗагрузка каналаПотери пакетовСвязность узлов

Page 20: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

Мониторинг операционной системы

Место на дискахОчередь выполненияРазмер и использование swap

Page 21: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

Тесты критичного софтаДля критичного софта: считаем число процессов, объем RSS, %CPU, process system/user time

Page 22: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

Тесты БДПример для MySQL

Page 23: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

Мониторинг нетипичных характеристик

Наличие бэкаповСрок делегирования доменовБаланс у провайдера смс-уведомленийОтсутствие в реестре РоскомнадзораСрок действия SSL сертификатов

Page 24: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

SSL сертификатыЧасто по HTTPS работает не весь сайт, а отдельные разделыПроэкспайрившийся SSL сертификат можно заметить не сразуПри этом закрыты наиболее критичные разделы (корзина, авторизация и т.п.)Теряем позиции в поиске (говорят, Google любит HTTPS)

Page 25: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

Делегирование доменаОборот за 2012 год - $379 млн.

До суток простоя – более $1 млн.

Page 26: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

Делегирование домена

Page 27: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

Мониторинг веб-приложения, скрипта в кроне и т.п.

Лог работы скрипта (>) – обновился за N часовЛог ошибок работы скрипта (2>) – должен быть пуст

Page 28: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

Уведомления – как у насCкрипт, опрашивающий страницу «Problems»Шлем «дайджест» проблем, а не по одному сообщению на каждое событиеНесколько уровней критичности событийРазные списки адресатов на разные событияПовтор (через 15 минут, через 2 часа), чтобы не «потерять» уведомлениеОК – если все стало хорошо

Page 29: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

Автоматизация типовых реакцийРост / падение LA – автоматическое масштабирование вверх / вниз

Автоматический рестарт «сбойных» сервисов

Автоматическое «удаление» проблемных машин

Автоматическое восстановление репликации

Автоматическое переключение трафика в случае аварии на уровне целого ДЦ

Page 30: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

event handler# LA on the serverdefine service{ use local-service host_name ec2-54-227-28-75.compute-1.amazonaws.com service_description Current Load check_command check_nrpe_1arg!check_load! event_handler restart_phpfpms}

define command{ command_name restart_phpfpms command_line /usr/lib64/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -c restart_phpfpm}

Page 31: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

Если нет админа… А также для подстраховки

Внешние системы:http://host-tracker.com/Яндекс.МетрикаИ т.д.* * * * * user /opt/manage/bin/http_sms.sh

• Зачастую можно найти бесплатные варианты.• Вы быстро узнаете об отказах, но не будете знать, где они произошли и

почему.• Вы подстрахуете себя от сбоя мониторинга.

Page 32: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

АналитикаВидим, что было

Предвидим, что будет

Улавливаем тренды

Планируем мощности железа

Сравниваем настройки софта

• Веб-система перестает быть черным ящиком, видно ее развитие с течением

времени

Page 33: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

Аналитика

Page 34: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

Аналитика - MySQL

Следите за числом запросов и коннектов в БД, количеством

медленных запросов, прочими характеристиками

Page 35: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

Если оставить все «по умолчанию»?

По умолчанию MaxClients в Apache 2.x – 256Если PHP может занять 64 Мб (на самом деле – см. memory_limit в php.ini) – весь веб-сервер может занять 16 Гб RAM256 потенциальных коннектов к MySQLПамять для одного коннекта: read_buffer_size + read_rnd_buffer_size + sort_buffer_size + thread_stack + join_buffer_size

• swap, OOM, деградация производительности всей системы

Page 36: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

АналитикаПамять

Apache MaxClientsMySQL buffers …

Нужно «прикинуть» максимальный расход памяти в приложениях и следить за ней.

Page 37: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

Дисковая подсистема

Page 38: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

Немного про client side. Серверы мониторинга – это не клиенты

Page 39: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

У людей сайт отображается иначе

Page 40: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

Посетители сайта

Page 41: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

Динамика загрузки страниц

Navigation Timing API

Page 42: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов
Page 43: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

Не только скорость client side, но и ошибки

Page 44: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

Поиск узких мест и действияНужно быстро понять – где и как починить

Смотрим срабатывание тестов – часто единственный источник информации

Смотрим уведомления от системы мониторинга

Смотрим логи. Держим заготовленные скипты-парсеры логов на поиск

ошибок.

Смотрим графики

Если получается, запускаем инструменты поиска узких мест

Page 45: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

Не включил логи?Статья «уголовного кодекса» веб-разработчиков и системных администраторов

Плохо:

display_errors = On

Хорошо:

error.log

access.log

Page 46: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

error.log

Агрегирующие скрипты (PHP, Perl, bash):

PHP Signals: 62

[…]

PHP Fatals: 94

[…]

PHP Warnings: 5

[…]

Page 47: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

access.log

Среднее время – менее 1 сек., пики – до 3-5 сек. Все ли здесь хорошо?

Page 48: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

access.logApache

LogFormat "%t \"%r\" %>s %b child:%P time-> %D" timing

Nginx

log_format timing … '->$upstream_response_time';

PHP-FPM

access.format = … %{mili}d …

Page 49: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

Аналитика – со стороны пользователя

Мало знать «среднюю температуру по больнице» и мониторить только главную страницу сайтаГистограммы распределения времени хитов, памяти, кодов ответа и т.п.

Page 50: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

Поиск «узких» местApache /server-status

Включенные логи медленных запросов php-fpm, nginx, apache, MySQL

Page 51: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

Поиск «узких» мест – специализированные инструменты

pinba

хhprof

И т.д.

Page 52: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

Инструменты поиска узких местЕсли никаких других инструментов нет

Или надо срочно локализовать проблему на «бою»

Можно просто перезапустить Apache / nginx / PHP-FPM

Но… Вы не найдете суть проблемы, и она повторится

Старые добрые утилиты unix

lsof

strace

gdb

grep, awk, sort, uniq и т.д.

Page 53: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

Определение процессаlsof | grep php_sessions

[…]

httpd 29684 bitrix 56u REG 0,19 0 5217392126

/tmp/php_sessions/sess_3m8ulspjvousm6nndmle3ul8s5

httpd 31320 bitrix 57uW REG 0,19 0 5217392033

/tmp/php_sessions/sess_bvgb0oaeq6ilqq8ooneo1j7e61

[…]

top

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

24632 bitrix 16 0 826m 128m 99m S 99.9 0.4 0:40.13 httpd

4006 bitrix 15 0 817m 86m 63m R 9.9 0.3 0:05.61 httpd

24903 bitrix 16 0 823m 121m 94m R 7.9 0.4 0:42.52 httpd

Page 54: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

stracestrace -p 12345

[…]

access("/home/bitrix/www/bitrix/modules/cluster/classes/general/memcache_cache.php", F_OK) = 0

sendto(54, "get 4ac3269f374e0dde2ea7074e4f2a"..., 60, MSG_DONTWAIT, NULL, 0) = 60

poll([{fd=54, events=POLLIN|POLLERR|POLLHUP}], 1, 1000) = 1 ([{fd=54, revents=POLLIN}])

recvfrom(54, "VALUE 4ac3269f374e0dde2ea7074e4f"..., 8192, MSG_DONTWAIT, NULL, NULL) = 106

sendto(55, "get 0ae4f4fdcffaa0d250c34fd3d7f6"..., 61, MSG_DONTWAIT, NULL, 0) = 61

poll([{fd=55, events=POLLIN|POLLERR|POLLHUP}], 1, 1000) = 1 ([{fd=55, revents=POLLIN}])

recvfrom(55, "VALUE 0ae4f4fdcffaa0d250c34fd3d7"..., 8192, MSG_DONTWAIT, NULL, NULL) = 107

sendto(55, "get 0ae4f4fdcffaa0d250c34fd3d7f6"..., 112, MSG_DONTWAIT, NULL, 0) = 112

poll([{fd=55, events=POLLIN|POLLERR|POLLHUP}], 1, 1000) = 1 ([{fd=55, revents=POLLIN}])

recvfrom(55, "VALUE 0ae4f4fdcffaa0d250c34fd3d7"..., 8192, MSG_DONTWAIT, NULL, NULL) = 325

[…]

Process 12345 detached

Page 55: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

gdbgdb –p 12345

(gdb) source /src/php-5.6.22/.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

Page 56: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

Медленные запросы в базеОдиночный медленный запрос всегда работает медленноЕго просто найти (slow.log)Его просто изучать (EXPLAIN)

Page 57: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

«Живая» система – много небольших запросовmysql> SELECT * FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME;+----------------+-------+----------------+| time | count | total |+----------------+-------+----------------+| 0.000001 | 0 | 0.000000 || 0.000010 | 2011 | 0.007438 || 0.000100 | 12706 | 0.513395 || 0.001000 | 4624 | 1.636106 || 0.010000 | 2994 | 12.395174 || 0.100000 | 200 | 6.225339 || 1.000000 | 33 | 5.480764 || 10.000000 | 1 | 2.374067 || 100.000000 | 0 | 0.000000 || 1000.000000 | 0 | 0.000000 || 10000.000000 | 0 | 0.000000 || 100000.000000 | 0 | 0.000000 || 1000000.000000 | 0 | 0.000000 || TOO LONG | 0 | TOO LONG |+----------------+-------+----------------+14 rows in set (0.00 sec)

Page 58: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

Аналитика - MySQLОдиночные медленные запросы отлавливаются просто. Сложнее мониторить общее состояние системы с большим количеством относительно быстрых запросов.

Page 59: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

Приложение всегда работает в условиях ограниченных ресурсов

Постоянный feedback в две стороны: админам и разработчикам – в автоматическом и полуавтоматическом режиме

Page 60: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

Сайт всегда должен быть доступен для посетителей

Вы должны оперативно узнавать о любых проблемах и иметь план их решения

У вас должны быть отлажены сценарии поиска «узких» мест

Аналитические данные позволят прогнозировать, где могут появиться «узкие» места

Page 61: Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боевая отладка / Александр Демидов

Спасибо за внимание!Вопросы?

Александр Демидов[email protected] demidov Demidov.Alexander