Инструменты ответа на вопросы «система тормозит — где?», «какие страницы самые тяжелые?», «что упало по таймауту?» и алертинг «прямо сейчас плохо».
Подход: приложение не собирает метрики постоянно — оно журналирует только аномалии (запрос дольше порога, ошибка 5xx). Пустые журналы = система не тормозит; наблюдение за такими журналами тривиально: «файл растёт» = «системе плохо». Аналитика по всем запросам строится не онлайн, а отчётом по access-логу Apache, в котором каждая строка несёт время обработки.
| Что | Откуда берётся | Зачем |
|---|---|---|
| Время обработки каждого запроса | access-лог Apache, формат combined_time (число микросекунд ...us в конце строки) |
сырьё для отчёта и разбора инцидентов задним числом |
| Журнал медленных запросов | приложение, runtime/logs/perf.log |
каждая строка — запрос дольше порога, с маршрутом и логином; сигнал для алертинга |
Отчёт yii perf/report |
консольная команда по access-логу | ежедневная аналитика: тяжелые маршруты, перцентили, таймауты, 5xx |
| Шаблон Zabbix | zabbix/arms-perf-template.yaml | алертинг: триггеры «N медленных запросов за 5 минут» и «N ошибок 5xx за 5 минут» |
В docker-инсталляции формат уже задан в конфигурации образа (docker/apache/site.conf) — достаточно обновиться.
При ручной установке допишите в VirtualHost:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %Dus" combined_time
CustomLog "/var/log/apache2/inventory.http_access.log" combined_time
Проверка: в конце строк access-лога появляется длительность вида 1234567us.
Строки старого формата не мешают — отчёт учтёт их без таймингов.
В config/params-local.php (значения по умолчанию — в params.php):
//порог журнала медленных запросов, сек; 0 = выключить журнал
'perf.slow_request_seconds'=>3,
//маски access-логов для отчёта; ротированные куски и .gz читаются прозрачно
'perf.access_log'=>'/var/log/apache2/inventory.http_access.log*',
Порог подбирается так, чтобы в спокойное время perf.log оставался (почти) пустым: лог, в котором каждая строка — аномалия, можно мониторить триггером «появились строки». Если штатно всё отдаётся за секунду — порог 3 сек хорош; если есть легально тяжелые страницы — поднимите порог или живите с фоновым уровнем срабатываний ниже порога чувствительности триггера.
10 0 * * * cd /var/www/arms && php yii perf/report --email=1 >/dev/null
--email=1 шлёт отчёт на adminEmail (нужен настроенный
mailer); --email=адрес — на указанный адрес; без
--email отчёт просто печатается (можно смотреть руками за любой день:
php yii perf/report 2026-08-16).
Полезные опции: --top=20 — размер топов, --slow=29 — порог «подозрения на
таймаут» (сек), --file= — явные маски логов вместо параметра.
Импортируйте шаблон ARMS perf monitoring (zabbix/arms-perf-template.yaml): Data collection → Templates → Import, затем прицепите шаблон к хосту инсталляции.
На хосте потребуется:
ServerActive= указывает на сервер, Hostname= совпадает с именем
хоста в Zabbix);root:adm — добавьте пользователя
zabbix в группу adm (usermod -aG adm zabbix); runtime/logs/perf.log
должен быть доступен агенту на чтение. В docker-инсталляции логи смонтированы
наружу — агенту на хосте достаточно прав на смонтированные каталоги;{$ARMS.ACCESS_LOG} /
{$ARMS.PERF_LOG} на хосте (это regexp-маски logrt, точки экранируются).Триггеры срабатывают не на единичное событие, а на плотность — по умолчанию
5 событий за 5 минут (макросы {$ARMS.SLOW.MAXCOUNT} / {$ARMS.5XX.MAXCOUNT}):
одиночная медленная страница — шум, серия — инцидент.
max_execution_time, прокси, внешняя система).bash
grep "17/Aug/2026:14:3" /var/log/apache2/inventory.http_access.log | sort -t' ' -k4Запланированное продолжение (пока сознательно не реализовано): расчёт p95
времени ответа скользящим окном и отправка в Zabbix через zabbix_sender,
триггер на резкий рост. Понадобится, если возникнут инциденты, при которых
пользователи жалуются, а триггеры молчат (деградация ниже порога slow-лога).
Реализация описана в docs/dev/perf-monitoring.md (раздел «Дальнейшее
развитие»).