跳转至

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 日发布。


License

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 仓库 中找到此模块的其他配置提示和文档。