sysguard: Модуль sysguard для NGINX
Установка
Вы можете установить этот модуль в любой дистрибутив на основе RHEL, включая, но не ограничиваясь:
- RedHat Enterprise Linux 7, 8, 9 и 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 и Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-sysguard
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-sysguard
Включите модуль, добавив следующее в начало файла /etc/nginx/nginx.conf:
load_module modules/ngx_http_sysguard_module.so;
Этот документ описывает nginx-module-sysguard v0.0.1, выпущенный 29 февраля 2020 года.
Модуль sysguard для Nginx
Синопсис
http {
...
server {
...
sysguard on;
sysguard_mode or;
sysguard_load load=10.5 action=/loadlimit;
sysguard_mem swapratio=20% action=/swaplimit;
sysguard_mem free=100M action=/freelimit;
sysguard_rt rt=0.01 period=5s method=AMM:10 action=/rtlimit;
location /loadlimit {
return 503;
}
location /swaplimit {
return 503;
}
location /freelimit {
return 503;
}
location /rtlimit {
return 503;
}
}
...
server {
...
location /api {
sysguard on;
sysguard_mode or;
sysguard_load load=20 action=/limit;
sysguard_mem swapratio=10% action=/limit;
sysguard_rt rt=2.01 period=5s method=WMA:10 action=/limit;
...
}
location /images {
sysguard on;
sysguard_mode and;
sysguard_load load=20 action=/limit;
sysguard_mem swapratio=10% action=/limit;
sysguard_rt rt=2.01 period=5s method=WMA:10 action=/limit;
...
}
location /limit {
return 503;
}
}
}
Описание
Этот модуль может быть использован для защиты вашего сервера в случае, если системная нагрузка, использование памяти становится слишком высоким или запросы обрабатываются слишком медленно. Это портированная версия sysguard из tengine в чистый NGINX, чтобы поддерживать те же функции.
Предостережения: Обратите внимание, что этот модуль требует системного вызова sysinfo(2) или функции getloadavg(3) в glibc. Он также требует файловую систему /proc для получения информации о памяти.
Встроенные переменные
Предоставляются следующие встроенные переменные:
- $sysguard_load
- Нагрузка системы. Если значение
$sysguard_loadравно 100, то нагрузка составляет 0.1 (100/1000). (/msec) - $sysguard_swapstat
- Соотношение использования свопа. (/per)
- $sysguard_free
- Реальное свободное пространство в памяти. (/byte)
- $sysguard_rt
- Среднее время обработки запросов. Если значение
$sysguard_rtравно 100, то время отклика составляет 0.1 сек (100/1000). (/msec) - $sysguard_meminfo_totalram
- Общая память meminfo. (/byte)
- $sysguard_meminfo_freeram
- Свободная память meminfo. (/byte)
- $sysguard_meminfo_bufferram
- Буферная память meminfo. (/byte)
- $sysguard_meminfo_cachedram
- Кэшированная память meminfo. (/byte)
- $sysguard_meminfo_totalswap
- Общий своп meminfo. (/byte)
- $sysguard_meminfo_freeswap
- Свободный своп meminfo. (/byte)
Директивы
sysguard
| - | - |
|---|---|
| Синтаксис | sysguard \<on|off> |
| По умолчанию | off |
| Контекст | http, server, location |
Описание: Включает или отключает работу модуля.
sysguard_load
| - | - |
|---|---|
| Синтаксис | sysguard_load load=number [action=/url] |
| По умолчанию | - |
| Контекст | http, server, location |
Описание: Указывает порог нагрузки. Когда системная нагрузка превышает этот порог, все последующие запросы будут перенаправлены на URL, указанный параметром 'action'. Вернется 503, если URL 'action' не определен. Эта директива также поддерживает использование ncpuratio вместо фиксированного порога, 'ncpu' означает количество ядер процессора, вы можете использовать эту директиву следующим образом: load=ncpu1.5
sysguard_mem
| - | - |
|---|---|
| Синтаксис | sysguard_mem swapratio=ratio% free=size [action=/url] |
| По умолчанию | - |
| Контекст | http, server, location |
Описание: Указывает порог использования своп-памяти или свободной памяти. Когда соотношение использования своп-памяти превышает этот порог или свободная память меньше указанного размера, все последующие запросы будут перенаправлены на URL, указанный параметром 'action'. Вернется 503, если URL 'action' не определен. Sysguard использует эту стратегию для расчета свободной памяти: "memfree = free + buffered + cached"
sysguard_rt
| - | - |
|---|---|
| Синтаксис | sysguard_rt rt=second period=time [method=\<AMM|WMA>:number] [action=/url] |
| По умолчанию | - |
| Контекст | http, server, location |
Описание: Указывает порог времени отклика. Параметр rt используется для установки порога среднего времени отклика в секундах. Параметр period используется для указания периода статистического цикла. Если среднее время отклика системы превышает порог, указанный пользователем, входящий запрос будет перенаправлен на указанный URL, который определяется параметром 'action'. Если 'action' не представлен, запрос будет сразу же отвечен с ошибкой 503. method — это формула, которая вычисляет среднее время обработки откликов. number в методе — это количество образцов для вычисления среднего. Метод по умолчанию установлен на method=AMM:period.
- AMM
- AMM — это арифметическое среднее.
- WMA
- WMA — это взвешенное скользящее среднее.
sysguard_mode
| - | - |
|---|---|
| Синтаксис | sysguard_mode \<and|or> |
| По умолчанию | or |
| Контекст | http, server, location |
Описание: Если имеется более одного типа мониторинга, эта директива используется для указания отношений между всеми мониторами: 'and' для всех совпадений и 'or' для любого совпадения.
sysguard_interval
| - | - |
|---|---|
| Синтаксис | sysguard_interval time |
| По умолчанию | 1s |
| Контекст | http, server, location |
Описание: Указывает временной интервал для обновления информации о системе. Значение по умолчанию — одна секунда, что означает, что sysguard обновляет статус сервера раз в секунду.
sysguard_log_level
| - | - |
|---|---|
| Синтаксис | sysguard_log_level \<info|notice|warn|error> |
| По умолчанию | error |
| Контекст | http, server, location |
Описание: Указывает уровень логирования для sysguard.
См. также
GitHub
Вы можете найти дополнительные советы по конфигурации и документацию для этого модуля в репозитории GitHub для nginx-module-sysguard.