sysguard: NGINX sysguard 模块
安装
您可以在任何基于 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,于 2020 年 2 月 29 日发布。
Nginx sysguard 模块
概述
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;
}
}
}
描述
此模块可用于保护您的服务器,以防系统负载、内存使用过高或请求响应过慢。 这是将 tengine 中的 sysguard 移植到纯 NGINX 的版本,以支持相同的功能。
注意事项: 请注意,此模块需要 sysinfo(2) 系统调用或 glibc 中的 getloadavg(3) 函数。它还需要 /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 |
描述: 指定负载阈值。当系统负载超过该阈值时,所有后续请求将被重定向到 'action' 参数指定的 URL。如果没有定义 'action' URL,则返回 503。此指令还支持使用 ncpuratio 来替代固定阈值,'ncpu' 表示 CPU 核心的数量,您可以像这样使用此指令:load=ncpu1.5
sysguard_mem
| - | - |
|---|---|
| 语法 | sysguard_mem swapratio=ratio% free=size [action=/url] |
| 默认值 | - |
| 上下文 | http, server, location |
描述: 指定使用的交换内存或可用内存阈值。当交换内存使用比例超过该阈值或可用内存少于指定大小时,所有后续请求将被重定向到 'action' 参数指定的 URL。如果没有定义 'action' URL,则返回 503。Sysguard 使用此策略来计算可用内存:“memfree = free + buffered + cached”
sysguard_rt
| - | - |
|---|---|
| 语法 | sysguard_rt rt=second period=time [method=\<AMM|WMA>:number] [action=/url] |
| 默认值 | - |
| 上下文 | http, server, location |
描述: 指定响应时间阈值。
参数 rt 用于设置平均响应时间的阈值,以秒为单位。
参数 period 用于指定统计周期的时间。
如果系统的平均响应时间超过用户指定的阈值,传入请求将被重定向到由 'action' 参数定义的指定 URL。
如果没有提供 'action',请求将直接响应 503 错误。
method 是计算响应处理时间平均值的公式。
number 是计算平均值的样本数量。
默认方法设置为 method=AMM:period。
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
您可以在 nginx-module-sysguard 的 GitHub 仓库 中找到此模块的其他配置提示和文档。