Держим руку на
пульсе проекта
МОНИТОРИНГ PHP-ПРИЛОЖЕНИЙ
MINSK PHP USER GROUP MEETUP #7
Дисклеймер
1. Мало текста
2. Еще меньше картинок.
o Авторов не нашел
o Копирайтов не проставил
o Стыдно
3. Шутки. Много, тупых и не к месту
4. 43 слайда
2
Содержание
1. Пашму? Зашем, нашальника?
2. Меряем
3. Сообщаем
4. Агрегируем логи
3
1. Пашму?
ЗАШЕМ, НАШАЛЬНИКА?
4
Вопрос. Важный. Честно.
Кто-нибудь уже меряет,
нотифицирует?
5
Еще один важный вопрос
А нотифицирует?
А агрегирует?
А спим спокойно?
6
Зачем это вообще нужно?
Чтобы спать спокойно
Чтобы не говорить «с нашей
стороны ракеты вылетели»
Чтобы никому не ломать пальцы
И самому не попадать в
травматологию
7
А серьезно?
Узнавать о проблемах раньше,
чем клиенты
Статистика
Автоматизация
(масштабируемость, высокая
доступность)
8
Меряем
ЭТО НЕ ТО, ЧТО ВЫ ПОДУМАЛИ. ЭТО ПРО
МЕТРИКИ
9
Что мерять. Big picture
1. Сервер (клауд? сюрприз!)
2. Сервисы (компоненты)
3. Приложение (бэкэнд)
4. Приложение (фронтэнд)
 кто это делает? 
10
Меряем сервер
1. CPU (LA, user/system/idle…)
2. Memory (free/used, swap)
3. IO (tps, await)
4. Disk (read/write speed, free/used
space, # of inodes)
5. Network (outgoing/ingoing traffic)
11
Меряем сервисы. Выбор
редакции в номинации “LAMP”
1. “L”: пропустим
2. “A”: nginx
(http_stub_status_module)
3. “M”: Visual FoxPro MySQL
4. “P”: php-fpm. без шуток.
12
Приложение. Ну наконец-то!
1. Время обработки
запроса/консоли
2. Потребляемая память
3. Страничка isAlive
4. Кастомные
метрики/бенчмарки
13
Весь доклад – сплошная
вода!
14
Тулзы. Чем?
Pinba xhprof
New Relic
15
Тулзы. Чем еще?
1. Зависит от того, «куда»
2. zabbix_sender
3. другие проприетарные тулзы и
API
16
Тулзы. Куда?
Zabbix Pinboard
New Relic
17
Zabbix
18
Pinboard
19
Тулзы. Куда еще?
1. Munin
2. Cacti
3. AWS CloudWatch
4. Nagios/Icinga
5. Heartbeat page
(https://status.github.com/)
20
Сообщаем
21
Мерять и хранить - хорошо
Но лучше – еще и читать
Даже когда девелоперы спять
Особенно когда девелоперы спят
22
Что делать?
1. Сказать человекам
◦ «Шэф, усё прапала!»
◦ «Понять и простить»
2. Сказать роботам
◦ Ни капли сожаления
◦ И зубы целы
23
Куда сообщать, человеки?
1. Скорая помощь, девопсы
2. jobs.tut.by – «ищу работу»
3. Emails
4. SMS
5. Mobile apps notifications
24
Какой сокет слушают
роботы?
1. AWS AutoScale
2. HAProxy
3. Выключаем ноду из кластера
4. Перебалансируем нагрузку
5. Graceful degradation
25
Агрегируем логи
Источники
1. Сервер
2. Сервисы
3. Приложение
27
Сервер = Syslog
This page intentionally left blank
28
Все остальное?
1. Syslog
29
Все остальное?
1. Syslog
2. Log files
◦ logrotate!
3. Database
◦ MySQL: Archive
◦ MongoDB: Capped Collections
4. Спецпротоколы (GELF)
30
Все остальное?
Не делаем рекурсий: не храним
логи базы данных в базе данных
31
Сервисы
1. Web server (error/access)
2. MySQL (error/slow query)
3. PHP (error/SAPI/stderr)
32
Приложение
Monolog
1. syslog/GELF/<ваше_апи>
2. Formatter (многострочные
exceptions)
3. Processor (доп. данные)
33
В ложке syslog-меда…
1. Многие не умеют «всислог»
2. Некоторые хотят денег
3. А еще кое-кто делает это плохо
34
PHP + Syslog = БОЛЬ!!1
35
https://github.com/php/php-src/blob/master/main/main.c#L665
https://wiki.php.net/rfc/allow_multiple_simultaneous_syslog_connections
Традиционные вопросы
1. Чем?
2. Куда?
36
Чем?
1. Rsyslog
2. syslog-ng
◦ Multiline (MySQL slow query log)
◦ Костыли для PHP (tip: роутим
на destination, в котором
переставляем priority если
program PHP)
37
Куда?
1. Graylog2
2. Logstash + ElasticSearch +
Kebana
38
Graylog2
1. Syslog (TCP(!)/UDP; old proto )
2. GELF
3. ElasticSearch (backup!)
4. MongoDB (backup!)
5. Extractors
39
Разбавим текст картинкой
40
Ну и скриншот…
41
Ссылки
http://pinba.org/
http://intaro.github.io/pinboard/
http://www.zabbix.com/
https://packagist.org/packages/monolog/monolog
http://www.balabit.com/network-security/syslog-ng
http://graylog2.org/
42
Как-бы все…
Спасибо за терпение!
Вопросы?
Skype: max.romanovsky
E-mail: max.romanovsky@gmail.com
maksim_ramanouski@epam.com
http://maxromanovsky.com/
43

Держим руку на пульсе проекта. Мониторинг PHP-приложений