↓ До тексту
  1. Статті/

Apache server status - вбудований моніторинг Apache

·3 хвилини
cat /etc/passwd
Автор
cat /etc/passwd
Технічний блог про Linux, DevOps та Open Source технології.
Зміст

Буває, сайт гальмує або «лежить», а ти сидиш і гадаєш: сервер перевантажений чи просто застряг на якомусь запиті? Лізти в логи - довго. А Apache, виявляється, уже вміє показати свій стан живцем, однією сторінкою - треба лише ввімкнути. Називається це mod_status, а сторінка - /server-status.

Що потрібно зробити?
#

Увімкнути в Apache модуль mod_status, відкрити сторінку /server-status і навчитись читати її цифри - скільки воркерів зайнято, скільки запитів за секунду і що сервер обробляє прямо зараз.

З чим працюю?
#

1
2
3
4
root@deb13.linuxway.com.ua:~# cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 13 (trixie)"
VERSION_CODENAME=trixie
ID=debian

Свіжий Debian 13 і Apache з репозиторіїв (Apache/2.4.68, MPM event). Усе від root.

Debian 13 (trixie) linuxway.com.ua

Що це взагалі таке?
#

mod_status - вбудований модуль Apache, який віддає сторінку з живим станом сервера: скільки процесів-воркерів працює, а скільки простоює, що кожен із них робить цієї секунди, скільки всього оброблено запитів і з якою швидкістю. Такий собі htop, тільки для вебсервера.

У Debian він стоїть і вмикається за замовчуванням - перевірити легко:

1
2
apache2ctl -M | grep status
# status_module (shared)

Вмикаємо по-людськи
#

Конфіг уже лежить у /etc/apache2/mods-enabled/status.conf. За замовчуванням /server-status відкритий тільки з localhost (Require local) - і це правильно. Нам треба дві речі: увімкнути детальну статистику і (за потреби) дозволити доступ своїй мережі.

Детальну статистику по кожному запиту вмикає директива ExtendedStatus:

1
ExtendedStatus On

А доступ до сторінки налаштовується в її <Location>:

1
2
3
4
5
6
7
<Location /server-status>
    SetHandler server-status
    # лишаємо тільки для localhost...
    Require local
    # ...або дозволяємо своїй мережі (НЕ всьому світу!):
    # Require ip 10.10.60.0/24
</Location>

Перевіряємо конфіг і перечитуємо його без рестарту:

1
2
apache2ctl configtest
systemctl reload apache2

Дивимось
#

Найзручніший формат - машинний, з ?auto. Коротко й без HTML:

1
curl -s http://localhost/server-status?auto
1
2
3
4
5
6
7
8
9
ServerVersion: Apache/2.4.68 (Debian)
ServerMPM: event
Total Accesses: 500
Total kBytes: 5397
BusyWorkers: 1
IdleWorkers: 49
ReqPerSec: 500
BytesPerSec: 5526530
Scoreboard: _______________W_______________....................

А якщо відкрити /server-status звичайним браузером - отримаєш ту саму інформацію, але вже людською табличкою. Ось вона, жива, під невеликим навантаженням (я відкрив її із сусідньої машини, бо дозволив доступ своїй мережі):

Apache server-status, відкритий у браузері

Що означають ці цифри
#

  • BusyWorkers / IdleWorkers - скільки воркерів зараз зайнято обробкою і скільки простоює. Якщо Busy вперся у стелю, а Idle - нуль, сервер захлинається: нові запити стають у чергу.
  • Total Accesses / Total kBytes - скільки всього запитів оброблено і скільки відданого трафіку від старту.
  • ReqPerSec / BytesPerSec - середня швидкість. Груба, «від старту», але для відчуття масштабу годиться.
  • Scoreboard - найцікавіше: по символу на кожен слот воркера. _ чекає, W віддає відповідь, R читає запит, K тримає keep-alive, C закриває, . - порожній слот. Один погляд - і видно, живий сервер чи задихається.

Не відкривай це у світ
#

server-status - це карта нутрощів твого сервера: версії, кількість з’єднань, навіть URL-и, які зараз обробляються. Стороннім там робити нічого. Тримай Require local або Require ip на свою мережу - і нікого більше.

А ось формат ?auto - навпаки, твій друг для моніторингу: його зручно знімати експортером (наприклад, apache_exporter) і зганяти метрики в Prometheus, щоб бачити навантаження в динаміці, а не раз на день очима.

Одна директива, одна сторінка - і замість «та наче гальмує» ти бачиш рівно стільки, скільки треба: зайняті воркери, швидкість і що саме сервер жує прямо зараз.

Related