跳转至

vts

# *vts*: 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

=== "CentOS/RHEL 8+、Fedora Linux、Amazon Linux 2023+"

    ```bash
    dnf -y install https://extras.getpagespeed.com/release-latest.rpm
    dnf -y install nginx-module-vts
    ```

=== "CentOS/RHEL 7 和 Amazon Linux 2"

    ```bash
    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-vts
    ```

通过在 `/etc/nginx/nginx.conf` 的顶部添加以下内容来启用模块:

```nginx
load_module modules/ngx_http_vhost_traffic_status_module.so;

本文档描述了 nginx-module-vts v0.2.6,于 2026 年 7 月 29 日发布。


CI License

Nginx 虚拟主机流量状态模块

测试

安装此模块后,运行 sudo prove -r t。需要 sudo 权限,因为测试需要 Nginx 监听 80 端口。

截图

screenshot-vts-0

screenshot-vts-1

概述

http {
    vhost_traffic_status_zone;

    ...

    server {

        ...

        location /status {
            vhost_traffic_status_display;
            vhost_traffic_status_display_format html;
        }
    }
}

描述

这是一个 Nginx 模块,提供对虚拟主机状态信息的访问。 它包含当前状态,如服务器、上游、缓存。 这类似于 nginx plus 的实时活动监控。 内置的 HTML 也取自旧版本的演示页面。

首先,必须使用指令 vhost_traffic_status_zone, 然后如果设置了指令 vhost_traffic_status_display,可以按如下方式访问:

  • /status/format/json
  • 如果请求 /status/format/json,将返回一个 JSON 文档,其中包含当前活动数据,用于实时仪表板和第三方监控工具。
  • /status/format/html
  • 如果请求 /status/format/html,将返回内置的 HTML 实时仪表板,该仪表板内部请求 /status/format/json
  • /status/format/jsonp
  • 如果请求 /status/format/jsonp,将返回一个 JSONP 回调函数,其中包含当前活动数据,用于实时仪表板和第三方监控工具。
  • /status/format/prometheus
  • 如果请求 /status/format/prometheus,将返回一个 prometheus 文档,其中包含当前活动数据。
  • /status/control
  • 如果请求 /status/control,将返回一个 JSON 文档,在通过查询字符串重置或删除区域后。请参见 控制

JSON 文档包含如下内容:

{
    "hostName": ...,
    "moduleVersion": ...,
    "nginxVersion": ...,
    "loadMsec": ...,
    "nowMsec": ...,
    "connections": {
        "active":...,
        "reading":...,
        "writing":...,
        "waiting":...,
        "accepted":...,
        "handled":...,
        "requests":...
    },
    "sharedZones": {
        "name":...,
        "maxSize":...,
        "usedSize":...,
        "usedNode":...
    },
    "serverZones": {
        "...":{
            "requestCounter":...,
            "inBytes":...,
            "outBytes":...,
            "responses":{
                "1xx":...,
                "2xx":...,
                "3xx":...,
                "4xx":...,
                "5xx":...,
                "miss":...,
                "bypass":...,
                "expired":...,
                "stale":...,
                "updating":...,
                "revalidated":...,
                "hit":...,
                "scarce":...
            },
            "requestMsecCounter":...,
            "requestMsec":...,
            "requestMsecs":{
                "times":[...],
                "msecs":[...]
            },
            "requestBuckets":{
                "msecs":[...],
                "counters":[...]
            },
        }
        ...
    },
    "filterZones": {
        "...":{
            "...":{
                "requestCounter":...,
                "inBytes":...,
                "outBytes":...,
                "responses":{
                    "1xx":...,
                    "2xx":...,
                    "3xx":...,
                    "4xx":...,
                    "5xx":...,
                    "miss":...,
                    "bypass":...,
                    "expired":...,
                    "stale":...,
                    "updating":...,
                    "revalidated":...,
                    "hit":...,
                    "scarce":...
                },
                "requestMsecCounter":...,
                "requestMsec":...,
                "requestMsecs":{
                    "times":[...],
                    "msecs":[...]
                },
                "requestBuckets":{
                    "msecs":[...],
                    "counters":[...]
                },
            },
            ...
        },
        ...
    },
    "upstreamZones": {
        "...":[
            {
                "server":...,
                "requestCounter":...,
                "inBytes":...,
                "outBytes":...,
                "responses":{
                    "1xx":...,
                    "2xx":...,
                    "3xx":...,
                    "4xx":...,
                    "5xx":...
                },
                "requestMsecCounter":...,
                "requestMsec":...,
                "requestMsecs":{
                    "times":[...],
                    "msecs":[...]
                },
                "requestBuckets":{
                    "msecs":[...],
                    "counters":[...]
                },
                "responseMsecCounter":...,
                "responseMsec":...,
                "responseMsecs":{
                    "times":[...],
                    "msecs":[...]
                },
                "responseBuckets":{
                    "msecs":[...],
                    "counters":[...]
                },
                "weight":...,
                "maxFails":...,
                "failTimeout":...,
                "backup":...,
                "down":...
            }
            ...
        ],
        ...
    }
    "cacheZones": {
        "...":{
            "maxSize":...,
            "usedSize":...,
            "inBytes":...,
            "outBytes":...,
            "responses":{
                "miss":...,
                "bypass":...,
                "expired":...,
                "stale":...,
                "updating":...,
                "revalidated":...,
                "hit":...,
                "scarce":...
            }
        },
        ...
    }
}
  • main
  • 基本版本,正常运行时间((nowMsec - loadMsec)/1000)
  • nowMsec,loadMsec 是毫秒。
  • connections
  • 总连接数和请求数(与 NGINX 中的 stub_status_module 相同)
  • sharedZones
  • 在 nginx-module-vts 中使用的共享内存信息。
  • serverZones
  • 每个服务器区域的流量(进/出)和请求及响应计数和缓存命中率
  • 总流量(进/出)和请求及响应计数(该区域名称为 *)和命中率
  • filterZones
  • 每个服务器区域的流量(进/出)和请求及响应计数和缓存命中率,通过 vhost_traffic_status_filter_by_set_key 指令过滤
  • 总流量(进/出)和请求及响应计数(该区域名称为 *)和命中率,通过 vhost_traffic_status_filter_by_set_key 指令过滤
  • upstreamZones
  • 每个上游组中每个服务器的流量(进/出)和请求及响应计数
  • 当前设置(权重、最大失败次数、失败超时...)在 nginx.conf 中
  • cacheZones
  • 每个缓存区域的流量(进/出)和大小(容量/已用)和命中率,当使用 proxy_cache 指令时。

JSON 文档中的 overCounts 对象主要用于 32 位系统,如果其值溢出,将增加 1。 指令 vhost_traffic_status_display_format 设置默认输出格式,可以是 json、jsonp、html、prometheus 之一。(默认:json)

流量计算如下:

  • ServerZones
  • in += requested_bytes
  • out += sent_bytes
  • FilterZones
  • in += requested_bytes 通过过滤器
  • out += sent_bytes 通过过滤器
  • UpstreamZones
  • in += requested_bytes 通过 ServerZones
  • out += sent_bytes 通过 ServerZones
  • cacheZones
  • in += requested_bytes 通过 ServerZones
  • out += sent_bytes 通过 ServerZones

所有计算在 Nginx 的日志处理阶段进行。 内部重定向(X-Accel-Redirect 或 error_page)在 UpstreamZones 中不计算。

注意事项: 此模块依赖于 nginx 日志系统(NGX_HTTP_LOG_PHASE:nginx http 的最后阶段),因此在某些情况下流量可能与实际带宽流量不同。 Websocket、取消的下载可能导致不准确。 该模块的工作与 access_log 指令的 "on" 或 "off" 无关。 再次强调,该模块在 "access_log off" 时也能正常工作。 使用多个域名时,它会设置为 server_name 指令的第一个域名(左侧)。 如果您不想这样,请参见 vhost_traffic_status_filter_by_hostvhost_traffic_status_filter_by_set_key 指令。

有关 stream 流量统计的模块,请参见: * nginx-module-sts * nginx-module-stream-sts

计算和间隔

平均值

所有平均值目前都是在过去 64 个值上计算的 AMM(算术平均数)。

控制

可以通过查询字符串重置或删除流量区域。 请求将以 JSON 文档的形式响应。

  • URI 语法
  • /{status_uri}/control?cmd={command}&group={group}&zone={name}
http {

    geoip_country /usr/share/GeoIP/GeoIP.dat;

    vhost_traffic_status_zone;
    vhost_traffic_status_filter_by_set_key $geoip_country_code country::*;

    ...

    server {

        server_name example.org;

        ...

        vhost_traffic_status_filter_by_set_key $geoip_country_code country::$server_name;

        location /status {
            vhost_traffic_status_display;
            vhost_traffic_status_display_format html;
        }
    }
}

如果设置如上,则控制 URI 类似于 example.org/status/control

可用的请求参数如下: * cmd=\<status|reset|delete> * status * 返回流量区域的状态,格式为 json,如 status/format/json。 * reset * 重置流量区域,而不删除共享内存中的节点。(= 初始化为 0) * delete * 删除共享内存中的流量区域。当重新请求时会重新创建。 * group=\<server|filter|upstream@alone|upstream@group|cache|*> * server * filter * upstream@alone * upstream@group * cache * * * zone=name * server * name * filter * filter_group@name * upstream@group * upstream_group@name * upstream@alone * @name * cache * name

实时获取流量区域状态

这与 status/format/json 类似,只是可以获取每个区域。

获取完整区域

  • status/format/json 完全相同。
  • /status/control?cmd=status&group=*

获取组区域

  • mainZones
  • /status/control?cmd=status&group=server&zone=::main
  • serverZones
  • /status/control?cmd=status&group=server&zone=*
  • filterZones
  • /status/control?cmd=status&group=filter&zone=*
  • upstreamZones
  • /status/control?cmd=status&group=upstream@group&zone=*
  • upstreamZones::nogroups
  • /status/control?cmd=status&group=upstream@alone&zone=*
  • cacheZones
  • /status/control?cmd=status&group=cache&zone=*

mainZones 值是默认状态值,包括 hostNamemoduleVersionnginxVersionloadMsecnowMsecconnections

获取每个区域

  • serverZones 中的单个区域
  • /status/control?cmd=status&group=server&zone=name
  • filterZones 中的单个区域
  • /status/control?cmd=status&group=filter&zone=filter_group@name
  • upstreamZones 中的单个区域
  • /status/control?cmd=status&group=upstream@group&zone=upstream_group@name
  • upstreamZones::nogroups 中的单个区域
  • /status/control?cmd=status&group=upstream@alone&zone=name
  • cacheZones 中的单个区域
  • /status/control?cmd=status&group=cache&zone=name

实时重置流量区域

将指定区域的值重置为 0。

重置完整区域

  • /status/control?cmd=reset&group=*

重置组区域

  • serverZones
  • /status/control?cmd=reset&group=server&zone=*
  • filterZones
  • /status/control?cmd=reset&group=filter&zone=*
  • upstreamZones
  • /status/control?cmd=reset&group=upstream@group&zone=*
  • upstreamZones::nogroups
  • /status/control?cmd=reset&group=upstream@alone&zone=*
  • cacheZones
  • /status/control?cmd=reset&group=cache&zone=*

重置每个区域

  • serverZones 中的单个区域
  • /status/control?cmd=reset&group=server&zone=name
  • filterZones 中的单个区域
  • /status/control?cmd=reset&group=filter&zone=filter_group@name
  • upstreamZones 中的单个区域
  • /status/control?cmd=reset&group=upstream@group&zone=upstream_group@name
  • upstreamZones::nogroups 中的单个区域
  • /status/control?cmd=reset&group=upstream@alone&zone=name
  • cacheZones 中的单个区域
  • /status/control?cmd=reset&group=cache&zone=name

实时删除流量区域

在共享内存中删除指定区域。

删除完整区域

  • /status/control?cmd=delete&group=*

删除组区域

  • serverZones
  • /status/control?cmd=delete&group=server&zone=*
  • filterZones
  • /status/control?cmd=delete&group=filter&zone=*
  • upstreamZones
  • /status/control?cmd=delete&group=upstream@group&zone=*
  • upstreamZones::nogroups
  • /status/control?cmd=delete&group=upstream@alone&zone=*
  • cacheZones
  • /status/control?cmd=delete&group=cache&zone=*

删除每个区域

  • serverZones 中的单个区域
  • /status/control?cmd=delete&group=server&zone=name
  • filterZones 中的单个区域
  • /status/control?cmd=delete&group=filter&zone=filter_group@name
  • upstreamZones 中的单个区域
  • /status/control?cmd=delete&group=upstream@group&zone=upstream_group@name
  • upstreamZones::nogroups 中的单个区域
  • /status/control?cmd=delete&group=upstream@alone&zone=name
  • cacheZones 中的单个区域
  • /status/control?cmd=delete&group=cache&zone=name

设置

可以使用 vhost_traffic_status_set_by_filter 指令在 nginx 配置中单独获取状态值。 几乎可以获取所有状态值,并将获得的值存储在用户定义的变量中,该变量是第一个参数。

  • 指令语法
  • vhost_traffic_status_set_by_filter $variable group/zone/name
http {

    geoip_country /usr/share/GeoIP/GeoIP.dat;

    vhost_traffic_status_zone;
    vhost_traffic_status_filter_by_set_key $geoip_country_code country::*;

    ...
    upstream backend {
        10.10.10.11:80;
        10.10.10.12:80;
    }

    server {

        server_name example.org;

        ...

        vhost_traffic_status_filter_by_set_key $geoip_country_code country::$server_name;

        vhost_traffic_status_set_by_filter $requestCounter server/example.org/requestCounter;
        vhost_traffic_status_set_by_filter $requestCounterKR filter/country::example.org@KR/requestCounter;

        location /backend {
            vhost_traffic_status_set_by_filter $requestCounterB1 upstream@group/[email protected]:80/requestCounter;
            proxy_pass http://backend;
        }
    }
}

上述设置如下:

  • $requestCounter
  • serverZones -> example.org -> requestCounter
  • $requestCounterKR
  • filterZones -> country::example.org -> KR -> requestCounter
  • $requestCounterB1
  • upstreamZones -> backend -> 10.0.10.11:80 -> requestCounter

有关详细用法,请参见 vhost_traffic_status_set_by_filter 指令。

JSON

以下状态信息以 JSON 格式提供:

状态使用的 Json

/{status_uri}/format/json

/{status_uri}/control?cmd=status&...

  • hostName
  • 主机名。
  • moduleVersion
  • 模块版本,格式为 {version}(|.dev.{commit})
  • nginxVersion
  • 提供的版本。
  • loadMsec
  • 加载的处理时间(以毫秒为单位)。
  • nowMsec
  • 当前时间(以毫秒为单位)。
  • connections
  • active
    • 当前活动的客户端连接数。
  • reading
    • 正在读取的客户端连接总数。
  • writing
    • 正在写入的客户端连接总数。
  • waiting
    • 等待的客户端连接总数。
  • accepted
    • 接受的客户端连接总数。
  • handled
    • 处理的客户端连接总数。
  • requests
    • 请求的客户端连接总数。
  • sharedZones
  • name
    • 配置中指定的共享内存名称。(默认:vhost_traffic_status
  • maxSize
    • 配置中指定的共享内存的最大大小限制。
  • usedSize
    • 当前共享内存的大小。
  • usedNode
    • 当前使用共享内存的节点数。可以使用以下公式获取每个节点的近似大小:(usedSize / usedNode
  • serverZones
  • requestCounter
    • 从客户端接收到的请求总数。
  • inBytes
    • 从客户端接收到的字节总数。
  • outBytes
    • 发送给客户端的字节总数。
  • responses
    • 1xx、2xx、3xx、4xx、5xx
    • 状态码为 1xx、2xx、3xx、4xx 和 5xx 的响应数量。
    • miss
    • 缓存未命中的数量。
    • bypass
    • 缓存绕过的数量。
    • expired
    • 缓存过期的数量。
    • stale
    • 缓存陈旧的数量。
    • updating
    • 缓存更新的数量。
    • revalidated
    • 缓存重新验证的数量。
    • hit
    • 缓存命中的数量。
    • scarce
    • 缓存稀缺的数量。
  • requestMsecCounter
    • 累计请求处理时间(以毫秒为单位)。
  • requestMsec
    • 请求处理时间的平均值(以毫秒为单位)。
  • requestMsecs
    • times
    • 请求处理时间的毫秒数。
    • msecs
    • 请求处理时间(以毫秒为单位)。
  • requestBuckets
    • msecs
    • vhost_traffic_status_histogram_buckets 指令设置的直方图的桶值。
    • counters
    • 每个桶值大于或等于请求处理时间的累计值。
  • filterZones
  • 提供与 serverZones 相同的字段,唯一不同的是它包含组名。
  • upstreamZones
  • server
    • 服务器的地址。
  • requestCounter
    • 转发到该服务器的客户端连接总数。
  • inBytes
    • 从该服务器接收到的字节总数。
  • outBytes
    • 发送到该服务器的字节总数。
  • responses
    • 1xx、2xx、3xx、4xx、5xx
    • 状态码为 1xx、2xx、3xx、4xx 和 5xx 的响应数量。
  • requestMsecCounter
    • 包括上游的累计请求处理时间(以毫秒为单位)。
  • requestMsec
    • 包括上游的请求处理时间的平均值(以毫秒为单位)。
  • requestMsecs
    • times
    • 请求处理时间的毫秒数。
    • msecs
    • 包括上游的请求处理时间(以毫秒为单位)。
  • requestBuckets
    • msecs
    • vhost_traffic_status_histogram_buckets 指令设置的直方图的桶值。
    • counters
    • 每个桶值大于或等于包括上游的请求处理时间的累计值。
  • responseMsecCounter
    • 仅上游响应处理时间的累计数量(以毫秒为单位)。
  • responseMsec
    • 仅上游响应处理时间的平均值(以毫秒为单位)。
  • responseMsecs
    • times
    • 请求处理时间的毫秒数。
    • msecs
    • 仅上游响应处理时间(以毫秒为单位)。
  • responseBuckets
    • msecs
    • vhost_traffic_status_histogram_buckets 指令设置的直方图的桶值。
    • counters
    • 每个桶值大于或等于仅上游响应处理时间的累计值。
  • weight
    • 服务器的当前 weight 设置。
  • maxFails
    • 服务器的当前 max_fails 设置。
  • failTimeout
    • 服务器的当前 fail_timeout 设置。
  • backup
    • 服务器的当前 backup 设置。
  • down
    • 服务器的当前 down 设置。基本上,这只是标记 ngx_http_upstream_module 的服务器宕机(例如 server backend3.example.com down),而不是实际的上游服务器状态。如果启用了上游区域指令,它将更改为实际状态。
  • cacheZones
  • maxSize
    • 配置中指定的缓存的最大大小限制。如果在 proxy_cache_path 指令中未指定 max_size,则系统依赖的值 NGX_MAX_OFF_T_VALUE 默认分配。换句话说,这个值来自 nginx,而不是我指定的值。
  • usedSize
    • 当前缓存的大小。此值来自 nginx,如上面的 maxSize 值。
  • inBytes
    • 从缓存接收到的字节总数。
  • outBytes
    • 从缓存发送的字节总数。
  • responses
    • miss
    • 缓存未命中的数量。
    • bypass
    • 缓存绕过的数量。
    • expired
    • 缓存过期的数量。
    • stale
    • 缓存陈旧的数量。
    • updating
    • 缓存更新的数量。
    • revalidated
    • 缓存重新验证的数量。
    • hit
    • 缓存命中的数量。
    • scarce
    • 缓存稀缺的数量。

Json 文档中的注意事项

  • main
  • 基本版本,正常运行时间((nowMsec - loadMsec)/1000)
  • nowMsec,loadMsec 是毫秒。
  • connections
  • 总连接数和请求数(与 NGINX 中的 stub_status_module 相同)
  • sharedZones
  • 在 nginx-module-vts 中使用的共享内存信息。
  • serverZones
  • 每个服务器区域的流量(进/出)和请求及响应计数和缓存命中率
  • 总流量(进/出)和请求及响应计数(该区域名称为 *)和命中率
  • filterZones
  • 每个服务器区域的流量(进/出)和请求及响应计数和缓存命中率,通过 vhost_traffic_status_filter_by_set_key 指令过滤
  • 总流量(进/出)和请求及响应计数(该区域名称为 *)和命中率,通过 vhost_traffic_status_filter_by_set_key 指令过滤
  • upstreamZones
  • 每个上游组中每个服务器的流量(进/出)和请求及响应计数
  • 当前设置(权重、最大失败次数、失败超时...)在 nginx.conf 中
  • cacheZones
  • 每个缓存区域的流量(进/出)和大小(容量/已用)和命中率,当使用 proxy_cache 指令时。

JSON 文档中的 overCounts 对象主要用于 32 位系统,如果其值溢出,将增加 1。 指令 vhost_traffic_status_display_format 设置默认输出格式,可以是 json、jsonp、html、prometheus 之一。(默认:json)

流量计算如下:

  • ServerZones
  • in += requested_bytes
  • out += sent_bytes
  • FilterZones
  • in += requested_bytes 通过过滤器
  • out += sent_bytes 通过过滤器
  • UpstreamZones
  • in += requested_bytes 通过 ServerZones
  • out += sent_bytes 通过 ServerZones
  • cacheZones
  • in += requested_bytes 通过 ServerZones
  • out += sent_bytes 通过 ServerZones

所有计算在 Nginx 的日志处理阶段进行。 内部重定向(X-Accel-Redirect 或 error_page)在 UpstreamZones 中不计算。

注意事项: 此模块依赖于 nginx 日志系统(NGX_HTTP_LOG_PHASE:nginx http 的最后阶段),因此在某些情况下流量可能与实际带宽流量不同。 Websocket、取消的下载可能导致不准确。 该模块的工作与 access_log 指令的 "on" 或 "off" 无关。 再次强调,该模块在 "access_log off" 时也能正常工作。 使用多个域名时,它会设置为 server_name 指令的第一个域名(左侧)。 如果您不想这样,请参见 vhost_traffic_status_filter_by_hostvhost_traffic_status_filter_by_set_key 指令。

有关 stream 流量统计的模块,请参见: * nginx-module-sts * nginx-module-stream-sts

计算和间隔

平均值

所有平均值目前都是在过去 64 个值上计算的 AMM(算术平均数)。

控制

可以通过查询字符串重置或删除流量区域。 请求将以 JSON 文档的形式响应。

  • URI 语法
  • /{status_uri}/control?cmd={command}&group={group}&zone={name}
http {

    geoip_country /usr/share/GeoIP/GeoIP.dat;

    vhost_traffic_status_zone;
    vhost_traffic_status_filter_by_set_key $geoip_country_code country::*;

    ...
    upstream backend {
        10.10.10.11:80;
        10.10.10.12:80;
    }

    server {

        server_name example.org;

        ...

        vhost_traffic_status_filter_by_set_key $geoip_country_code country::$server_name;

        location /status {
            vhost_traffic_status_display;
            vhost_traffic_status_display_format html;
        }
    }
}

如果设置如上,则控制 URI 类似于 example.org/status/control

可用的请求参数如下: * cmd=\<status|reset|delete> * status * 返回流量区域的状态,格式为 json,如 status/format/json。 * reset * 重置流量区域,而不删除共享内存中的节点。(= 初始化为 0) * delete * 删除共享内存中的流量区域。当重新请求时会重新创建。 * group=\<server|filter|upstream@alone|upstream@group|cache|*> * server * filter * upstream@alone * upstream@group * cache * * * zone=name * server * name * filter * filter_group@name * upstream@group * upstream_group@name * upstream@alone * @name * cache * name

实时获取流量区域状态

这与 status/format/json 类似,只是可以获取每个区域。

获取完整区域

  • status/format/json 完全相同。
  • /status/control?cmd=status&group=*

获取组区域

  • mainZones
  • /status/control?cmd=status&group=server&zone=::main
  • serverZones
  • /status/control?cmd=status&group=server&zone=*
  • filterZones
  • /status/control?cmd=status&group=filter&zone=*
  • upstreamZones
  • /status/control?cmd=status&group=upstream@group&zone=*
  • upstreamZones::nogroups
  • /status/control?cmd=status&group=upstream@alone&zone=*
  • cacheZones
  • /status/control?cmd=status&group=cache&zone=*

mainZones 值是默认状态值,包括 hostNamemoduleVersionnginxVersionloadMsecnowMsecconnections

获取每个区域

  • serverZones 中的单个区域
  • /status/control?cmd=status&group=server&zone=name
  • filterZones 中的单个区域
  • /status/control?cmd=status&group=filter&zone=filter_group@name
  • upstreamZones 中的单个区域
  • /status/control?cmd=status&group=upstream@group&zone=upstream_group@name
  • upstreamZones::nogroups 中的单个区域
  • /status/control?cmd=status&group=upstream@alone&zone=name
  • cacheZones 中的单个区域
  • /status/control?cmd=status&group=cache&zone=name

实时重置流量区域

将指定区域的值重置为 0。

重置完整区域

  • /status/control?cmd=reset&group=*

重置组区域

  • serverZones
  • /status/control?cmd=reset&group=server&zone=*
  • filterZones
  • /status/control?cmd=reset&group=filter&zone=*
  • upstreamZones
  • /status/control?cmd=reset&group=upstream@group&zone=*
  • upstreamZones::nogroups
  • /status/control?cmd=reset&group=upstream@alone&zone=*
  • cacheZones
  • /status/control?cmd=reset&group=cache&zone=*

重置每个区域

  • serverZones 中的单个区域
  • /status/control?cmd=reset&group=server&zone=name
  • filterZones 中的单个区域
  • /status/control?cmd=reset&group=filter&zone=filter_group@name
  • upstreamZones 中的单个区域
  • /status/control?cmd=reset&group=upstream@group&zone=upstream_group@name
  • upstreamZones::nogroups 中的单个区域
  • /status/control?cmd=reset&group=upstream@alone&zone=name
  • cacheZones 中的单个区域
  • /status/control?cmd=reset&group=cache&zone=name

实时删除流量区域

在共享内存中删除指定区域。

删除完整区域

  • /status/control?cmd=delete&group=*

删除组区域

  • serverZones
  • /status/control?cmd=delete&group=server&zone=*
  • filterZones
  • /status/control?cmd=delete&group=filter&zone=*
  • upstreamZones
  • /status/control?cmd=delete&group=upstream@group&zone=*
  • upstreamZones::nogroups
  • /status/control?cmd=delete&group=upstream@alone&zone=*
  • cacheZones
  • /status/control?cmd=delete&group=cache&zone=*

删除每个区域

  • serverZones 中的单个区域
  • /status/control?cmd=delete&group=server&zone=name
  • filterZones 中的单个区域
  • /status/control?cmd=delete&group=filter&zone=filter_group@name
  • upstreamZones 中的单个区域
  • /status/control?cmd=delete&group=upstream@group&zone=upstream_group@name
  • upstreamZones::nogroups 中的单个区域
  • /status/control?cmd=delete&group=upstream@alone&zone=name
  • cacheZones 中的单个区域
  • /status/control?cmd=delete&group=cache&zone=name

设置

可以使用 vhost_traffic_status_set_by_filter 指令在 nginx 配置中单独获取状态值。 几乎可以获取所有状态值,并将获得的值存储在用户定义的变量中,该变量是第一个参数。

  • 指令语法
  • vhost_traffic_status_set_by_filter $variable group/zone/name
http {

    geoip_country /usr/share/GeoIP/GeoIP.dat;

    vhost_traffic_status_zone;
    vhost_traffic_status_filter_by_set_key $geoip_country_code country::*;

    ...
    upstream backend {
        10.10.10.11:80;
        10.10.10.12:80;
    }

    server {

        server_name example.org;

        ...

        vhost_traffic_status_filter_by_set_key $geoip_country_code country::$server_name;

        vhost_traffic_status_set_by_filter $requestCounter server/example.org/requestCounter;
        vhost_traffic_status_set_by_filter $requestCounterKR filter/country::example.org@KR/requestCounter;

        location /backend {
            vhost_traffic_status_set_by_filter $requestCounterB1 upstream@group/[email protected]:80/requestCounter;
            proxy_pass http://backend;
        }
    }
}

上述设置如下:

  • $requestCounter
  • serverZones -> example.org -> requestCounter
  • $requestCounterKR
  • filterZones -> country::example.org -> KR -> requestCounter
  • $requestCounterB1
  • upstreamZones -> backend -> 10.0.10.11:80 -> requestCounter

有关详细用法,请参见 vhost_traffic_status_set_by_filter 指令。

JSON

以下状态信息以 JSON 格式提供:

状态使用的 Json

/{status_uri}/format/json

/{status_uri}/control?cmd=status&...

  • hostName
  • 主机名。
  • moduleVersion
  • 模块版本,格式为 {version}(|.dev.{commit})
  • nginxVersion
  • 提供的版本。
  • loadMsec
  • 加载的处理时间(以毫秒为单位)。
  • nowMsec
  • 当前时间(以毫秒为单位)。
  • connections
  • active
    • 当前活动的客户端连接数。
  • reading
    • 正在读取的客户端连接总数。
  • writing
    • 正在写入的客户端连接总数。
  • waiting
    • 等待的客户端连接总数。
  • accepted
    • 接受的客户端连接总数。
  • handled
    • 处理的客户端连接总数。
  • requests
    • 请求的客户端连接总数。
  • sharedZones
  • name
    • 配置中指定的共享内存名称。(默认:vhost_traffic_status
  • maxSize
    • 配置中指定的共享内存的最大大小限制。
  • usedSize
    • 当前共享内存的大小。
  • usedNode
    • 当前使用共享内存的节点数。可以使用以下公式获取每个节点的近似大小:(usedSize / usedNode
  • serverZones
  • requestCounter
    • 从客户端接收到的请求总数。
  • inBytes
    • 从客户端接收到的字节总数。
  • outBytes
    • 发送给客户端的字节总数。
  • responses
    • 1xx、2xx、3xx、4xx、5xx
    • 状态码为 1xx、2xx、3xx、4xx 和 5xx 的响应数量。
    • miss
    • 缓存未命中的数量。
    • bypass
    • 缓存绕过的数量。
    • expired
    • 缓存过期的数量。
    • stale
    • 缓存陈旧的数量。
    • updating
    • 缓存更新的数量。
    • revalidated
    • 缓存重新验证的数量。
    • hit
    • 缓存命中的数量。
    • scarce
    • 缓存稀缺的数量。
  • requestMsecCounter
    • 累计请求处理时间(以毫秒为单位)。
  • requestMsec
    • 请求处理时间的平均值(以毫秒为单位)。
  • requestMsecs
    • times
    • 请求处理时间的毫秒数。
    • msecs
    • 请求处理时间(以毫秒为单位)。
  • requestBuckets
    • msecs
    • vhost_traffic_status_histogram_buckets 指令设置的直方图的桶值。
    • counters
    • 每个桶值大于或等于请求处理时间的累计值。
  • filterZones
  • 提供与 serverZones 相同的字段,唯一不同的是它包含组名。
  • upstreamZones
  • server
    • 服务器的地址。
  • requestCounter
    • 转发到该服务器的客户端连接总数。
  • inBytes
    • 从该服务器接收到的字节总数。
  • outBytes
    • 发送到该服务器的字节总数。
  • responses
    • 1xx、2xx、3xx、4xx、5xx
    • 状态码为 1xx、2xx、3xx、4xx 和 5xx 的响应数量。
  • requestMsecCounter
    • 包括上游的累计请求处理时间(以毫秒为单位)。
  • requestMsec
    • 包括上游的请求处理时间的平均值(以毫秒为单位)。
  • requestMsecs
    • times
    • 请求处理时间的毫秒数。
    • msecs
    • 包括上游的请求处理时间(以毫秒为单位)。
  • requestBuckets
    • msecs
    • vhost_traffic_status_histogram_buckets 指令设置的直方图的桶值。
    • counters
    • 每个桶值大于或等于包括上游的请求处理时间的累计值。
  • responseMsecCounter
    • 仅上游响应处理时间的累计数量(以毫秒为单位)。
  • responseMsec
    • 仅上游响应处理时间的平均值(以毫秒为单位)。
  • responseMsecs
    • times
    • 请求处理时间的毫秒数。
    • msecs
    • 仅上游响应处理时间(以毫秒为单位)。
  • responseBuckets
    • msecs
    • vhost_traffic_status_histogram_buckets 指令设置的直方图的桶值。
    • counters
    • 每个桶值大于或等于仅上游响应处理时间的累计值。
  • weight
    • 服务器的当前 weight 设置。
  • maxFails
    • 服务器的当前 max_fails 设置。
  • failTimeout
    • 服务器的当前 fail_timeout 设置。
  • backup
    • 服务器的当前 backup 设置。
  • down
    • 服务器的当前 down 设置。基本上,这只是标记 ngx_http_upstream_module 的服务器宕机(例如 server backend3.example.com down),而不是实际的上游服务器状态。如果启用了上游区域指令,它将更改为实际状态。
  • cacheZones
  • maxSize
    • 配置中指定的缓存的最大大小限制。如果在 proxy_cache_path 指令中未指定 max_size,则系统依赖的值 NGX_MAX_OFF_T_VALUE 默认分配。换句话说,这个值来自 nginx,而不是我指定的值。
  • usedSize
    • 当前缓存的大小。此值来自 nginx,如上面的 maxSize 值。
  • inBytes
    • 从缓存接收到的字节总数。
  • outBytes
    • 从缓存发送的字节总数。
  • responses
    • miss
    • 缓存未命中的数量。
    • bypass
    • 缓存绕过的数量。
    • expired
    • 缓存过期的数量。
    • stale
    • 缓存陈旧的数量。
    • updating
    • 缓存更新的数量。
    • revalidated
    • 缓存重新验证的数量。
    • hit
    • 缓存命中的数量。
    • scarce
    • 缓存稀缺的数量。

Json 文档中的注意事项

  • main
  • 基本版本,正常运行时间((nowMsec - loadMsec)/1000)
  • nowMsec,loadMsec 是毫秒。
  • connections
  • 总连接数和请求数(与 NGINX 中的 stub_status_module 相同)
  • sharedZones
  • 在 nginx-module-vts 中使用的共享内存信息。
  • serverZones
  • 每个服务器区域的流量(进/出)和请求及响应计数和缓存命中率
  • 总流量(进/出)和请求及响应计数(该区域名称为 *)和命中率
  • filterZones
  • 每个服务器区域的流量(进/出)和请求及响应计数和缓存命中率,通过 vhost_traffic_status_filter_by_set_key 指令过滤
  • 总流量(进/出)和请求及响应计数(该区域名称为 *)和命中率,通过 vhost_traffic_status_filter_by_set_key 指令过滤
  • upstreamZones
  • 每个上游组中每个服务器的流量(进/出)和请求及响应计数
  • 当前设置(权重、最大失败次数、失败超时...)在 nginx.conf 中
  • cacheZones
  • 每个缓存区域的流量(进/出)和大小(容量/已用)和命中率,当使用 proxy_cache 指令时。

JSON 文档中的 overCounts 对象主要用于 32 位系统,如果其值溢出,将增加 1。 指令 vhost_traffic_status_display_format 设置默认输出格式,可以是 json、jsonp、html、prometheus 之一。(默认:json)

流量计算如下:

  • ServerZones
  • in += requested_bytes
  • out += sent_bytes
  • FilterZones
  • in += requested_bytes 通过过滤器
  • out += sent_bytes 通过过滤器
  • UpstreamZones
  • in += requested_bytes 通过 ServerZones
  • out += sent_bytes 通过 ServerZones
  • cacheZones
  • in += requested_bytes 通过 ServerZones
  • out += sent_bytes 通过 ServerZones

所有计算在 Nginx 的日志处理阶段进行。 内部重定向(X-Accel-Redirect 或 error_page)在 UpstreamZones 中不计算。

注意事项: 此模块依赖于 nginx 日志系统(NGX_HTTP_LOG_PHASE:nginx http 的最后阶段),因此在某些情况下流量可能与实际带宽流量不同。 Websocket、取消的下载可能导致不准确。 该模块的工作与 access_log 指令的 "on" 或 "off" 无关。 再次强调,该模块在 "access_log off" 时也能正常工作。 使用多个域名时,它会设置为 server_name 指令的第一个域名(左侧)。 如果您不想这样,请参见 vhost_traffic_status_filter_by_hostvhost_traffic_status_filter_by_set_key 指令。

有关 stream 流量统计的模块,请参见: * nginx-module-sts * nginx-module-stream-sts

计算和间隔

平均值

所有平均值目前都是在过去 64 个值上计算的 AMM(算术平均数)。

控制

可以通过查询字符串重置或删除流量区域。 请求将以 JSON 文档的形式响应。

  • URI 语法
  • /{status_uri}/control?cmd={command}&group={group}&zone={name}
http {

    geoip_country /usr/share/GeoIP/GeoIP.dat;

    vhost_traffic_status_zone;
    vhost_traffic_status_filter_by_set_key $geoip_country_code country::*;

    ...
    upstream backend {
        10.10.10.11:80;
        10.10.10.12:80;
    }

    server {

        server_name example.org;

        ...

        vhost_traffic_status_filter_by_set_key $geoip_country_code country::$server_name;

        location /status {
            vhost_traffic_status_display;
            vhost_traffic_status_display_format html;
        }
    }
}

如果设置如上,则控制 URI 类似于 example.org/status/control

可用的请求参数如下: * cmd=\<status|reset|delete> * status * 返回流量区域的状态,格式为 json,如 status/format/json。 * reset * 重置流量区域,而不删除共享内存中的节点。(= 初始化为 0) * delete * 删除共享内存中的流量区域。当重新请求时会重新创建。 * group=\<server|filter|upstream@alone|upstream@group|cache|*> * server * filter * upstream@alone * upstream@group * cache * * * zone=name * server * name * filter * filter_group@name * upstream@group * upstream_group@name * upstream@alone * @name * cache * name

实时获取流量区域状态

这与 status/format/json 类似,只是可以获取每个区域。

获取完整区域

  • status/format/json 完全相同。
  • /status/control?cmd=status&group=*

获取组区域

  • mainZones
  • /status/control?cmd=status&group=server&zone=::main
  • serverZones
  • /status/control?cmd=status&group=server&zone=*
  • filterZones
  • /status/control?cmd=status&group=filter&zone=*
  • upstreamZones
  • /status/control?cmd=status&group=upstream@group&zone=*
  • upstreamZones::nogroups
  • /status/control?cmd=status&group=upstream@alone&zone=*
  • cacheZones
  • /status/control?cmd=status&group=cache&zone=*

mainZones 值是默认状态值,包括 hostNamemoduleVersionnginxVersionloadMsecnowMsecconnections

获取每个区域

  • serverZones 中的单个区域
  • /status/control?cmd=status&group=server&zone=name
  • filterZones 中的单个区域
  • /status/control?cmd=status&group=filter&zone=filter_group@name
  • upstreamZones 中的单个区域
  • /status/control?cmd=status&group=upstream@group&zone=upstream_group@name
  • upstreamZones::nogroups 中的单个区域
  • /status/control?cmd=status&group=upstream@alone&zone=name
  • cacheZones 中的单个区域
  • /status/control?cmd=status&group=cache&zone=name

实时重置流量区域

将指定区域的值重置为 0。

重置完整区域

  • /status/control?cmd=reset&group=*

重置组区域

  • serverZones
  • /status/control?cmd=reset&group=server&zone=*
  • filterZones
  • /status/control?cmd=reset&group=filter&zone=*
  • upstreamZones
  • /status/control?cmd=reset&group=upstream@group&zone=*
  • upstreamZones::nogroups
  • /status/control?cmd=reset&group=upstream@alone&zone=*
  • cacheZones
  • /status/control?cmd=reset&group=cache&zone=*

重置每个区域

  • serverZones 中的单个区域
  • /status/control?cmd=reset&group=server&zone=name
  • filterZones 中的单个区域
  • /status/control?cmd=reset&group=filter&zone=filter_group@name
  • upstreamZones 中的单个区域
  • /status/control?cmd=reset&group=upstream@group&zone=upstream_group@name
  • upstreamZones::nogroups 中的单个区域
  • /status/control?cmd=reset&group=upstream@alone&zone=name
  • cacheZones 中的单个区域
  • /status/control?cmd=reset&group=cache&zone=name

实时删除流量区域

在共享内存中删除指定区域。

删除完整区域

  • /status/control?cmd=delete&group=*

删除组区域

  • serverZones
  • /status/control?cmd=delete&group=server&zone=*
  • filterZones
  • /status/control?cmd=delete&group=filter&zone=*
  • upstreamZones
  • /status/control?cmd=delete&group=upstream@group&zone=*
  • upstreamZones::nogroups
  • /status/control?cmd=delete&group=upstream@alone&zone=*
  • cacheZones
  • /status/control?cmd=delete&group=cache&zone=*

删除每个区域

  • serverZones 中的单个区域
  • /status/control?cmd=delete&group=server&zone=name
  • filterZones 中的单个区域
  • /status/control?cmd=delete&group=filter&zone=filter_group@name
  • upstreamZones 中的单个区域
  • /status/control?cmd=delete&group=upstream@group&zone=upstream_group@name
  • upstreamZones::nogroups 中的单个区域
  • /status/control?cmd=delete&group=upstream@alone&zone=name
  • cacheZones 中的单个区域
  • /status/control?cmd=delete&group=cache&zone=name

设置

可以使用 vhost_traffic_status_set_by_filter 指令在 nginx 配置中单独获取状态值。 几乎可以获取所有状态值,并将获得的值存储在用户定义的变量中,该变量是第一个参数。

  • 指令语法
  • vhost_traffic_status_set_by_filter $variable group/zone/name
http {

    geoip_country /usr/share/GeoIP/GeoIP.dat;

    vhost_traffic_status_zone;
    vhost_traffic_status_filter_by_set_key $geoip_country_code country::*;

    ...
    upstream backend {
        10.10.10.11:80;
        10.10.10.12:80;
    }

    server {

        server_name example.org;

        ...

        vhost_traffic_status_filter_by_set_key $geoip_country_code country::$server_name;

        vhost_traffic_status_set_by_filter $requestCounter server/example.org/requestCounter;
        vhost_traffic_status_set_by_filter $requestCounterKR filter/country::example.org@KR/requestCounter;

        location /backend {
            vhost_traffic_status_set_by_filter $requestCounterB1 upstream@group/[email protected]:80/requestCounter;
            proxy_pass http://backend;
        }
    }
}

上述设置如下:

  • $requestCounter
  • serverZones -> example.org -> requestCounter
  • $requestCounterKR
  • filterZones -> country::example.org -> KR -> requestCounter
  • $requestCounterB1
  • upstreamZones -> backend -> 10.0.10.11:80 -> requestCounter

有关详细用法,请参见 vhost_traffic_status_set_by_filter 指令。

JSON

以下状态信息以 JSON 格式提供:

状态使用的 Json

/{status_uri}/format/json

/{status_uri}/control?cmd=status&...

  • hostName
  • 主机名。
  • moduleVersion
  • 模块版本,格式为 {version}(|.dev.{commit})
  • nginxVersion
  • 提供的版本。
  • loadMsec
  • 加载的处理时间(以毫秒为单位)。
  • nowMsec
  • 当前时间(以毫秒为单位)。
  • connections
  • active
    • 当前活动的客户端连接数。
  • reading
    • 正在读取的客户端连接总数。
  • writing
    • 正在写入的客户端连接总数。
  • waiting
    • 等待的客户端连接总数。
  • accepted
    • 接受的客户端连接总数。
  • handled
    • 处理的客户端连接总数。
  • requests
    • 请求的客户端连接总数。
  • sharedZones
  • name
    • 配置中指定的共享内存名称。(默认:vhost_traffic_status
  • maxSize
    • 配置中指定的共享内存的最大大小限制。
  • usedSize
    • 当前共享内存的大小。
  • usedNode
    • 当前使用共享内存的节点数。可以使用以下公式获取每个节点的近似大小:(usedSize / usedNode
  • serverZones
  • requestCounter
    • 从客户端接收到的请求总数。
  • inBytes
    • 从客户端接收到的字节总数。
  • outBytes
    • 发送给客户端的字节总数。
  • responses
    • 1xx、2xx、3xx、4xx、5xx
    • 状态码为 1xx、2xx、3xx、4xx 和 5xx 的响应数量。
    • miss
    • 缓存未命中的数量。
    • bypass
    • 缓存绕过的数量。
    • expired
    • 缓存过期的数量。
    • stale
    • 缓存陈旧的数量。
    • updating
    • 缓存更新的数量。
    • revalidated
    • 缓存重新验证的数量。
    • hit
    • 缓存命中的数量。
    • scarce
    • 缓存稀缺的数量。
  • requestMsecCounter
    • 累计请求处理时间(以毫秒为单位)。
  • requestMsec
    • 请求处理时间的平均值(以毫秒为单位)。
  • requestMsecs
    • times
    • 请求处理时间的毫秒数。
    • msecs
    • 请求处理时间(以毫秒为单位)。
  • requestBuckets
    • msecs
    • vhost_traffic_status_histogram_buckets 指令设置的直方图的桶值。
    • counters
    • 每个桶值大于或等于请求处理时间的累计值。
  • filterZones
  • 提供与 serverZones 相同的字段,唯一不同的是它包含组名。
  • upstreamZones
  • server
    • 服务器的地址。
  • requestCounter
    • 转发到该服务器的客户端连接总数。
  • inBytes
    • 从该服务器接收到的字节总数。
  • outBytes
    • 发送到该服务器的字节总数。
  • responses
    • 1xx、2xx、3xx、4xx、5xx
    • 状态码为 1xx、2xx、3xx、4xx 和 5xx 的响应数量。
  • requestMsecCounter
    • 包括上游的累计请求处理时间(以毫秒为单位)。
  • requestMsec
    • 包括上游的请求处理时间的平均值(以毫秒为单位)。
  • requestMsecs
    • times
    • 请求处理时间的毫秒数。
    • msecs
    • 包括上游的请求处理时间(以毫秒为单位)。
  • requestBuckets
    • msecs
    • vhost_traffic_status_histogram_buckets 指令设置的直方图的桶值。
    • counters
    • 每个桶值大于或等于包括上游的请求处理时间的累计值。
  • responseMsecCounter
    • 仅上游响应处理时间的累计数量(以毫秒为单位)。
  • responseMsec
    • 仅上游响应处理时间的平均值(以毫秒为单位)。
  • responseMsecs
    • times
    • 请求处理时间的毫秒数。
    • msecs
    • 仅上游响应处理时间(以毫秒为单位)。
  • responseBuckets
    • msecs
    • vhost_traffic_status_histogram_buckets 指令设置的直方图的桶值。
    • counters
    • 每个桶值大于或等于仅上游响应处理时间的累计值。
  • weight
    • 服务器的当前 weight 设置。
  • maxFails
    • 服务器的当前 max_fails 设置。
  • failTimeout
    • 服务器的当前 fail_timeout 设置。
  • backup
    • 服务器的当前 backup 设置。
  • down
    • 服务器的当前 down 设置。基本上,这只是标记 ngx_http_upstream_module 的服务器宕机(例如 server backend3.example.com down),而不是实际的上游服务器状态。如果启用了上游区域指令,它将更改为实际状态。
  • cacheZones
  • maxSize
    • 配置中指定的缓存的最大大小限制。如果在 proxy_cache_path 指令中未指定 max_size,则系统依赖的值 NGX_MAX_OFF_T_VALUE 默认分配。换句话说,这个值来自 nginx,而不是我指定的值。
  • usedSize
    • 当前缓存的大小。此值来自 nginx,如上面的 maxSize 值。
  • inBytes
    • 从缓存接收到的字节总数。
  • outBytes
    • 从缓存发送的字节总数。
  • responses
    • miss
    • 缓存未命中的数量。
    • bypass
    • 缓存绕过的数量。
    • expired
    • 缓存过期的数量。
    • stale
    • 缓存陈旧的数量。
    • updating
    • 缓存更新的数量。
    • revalidated
    • 缓存重新验证的数量。
    • hit
    • 缓存命中的数量。
    • scarce
    • 缓存稀缺的数量。

Json 文档中的注意事项

  • main
  • 基本版本,正常运行时间((nowMsec - loadMsec)/1000)
  • nowMsec,loadMsec 是毫秒。
  • connections
  • 总连接数和请求数(与 NGINX 中的 stub_status_module 相同)
  • sharedZones
  • 在 nginx-module-vts 中使用的共享内存信息。
  • serverZones
  • 每个服务器区域的流量(进/出)和请求及响应计数和缓存命中率
  • 总流量(进/出)和请求及响应计数(该区域名称为 *)和命中率
  • filterZones
  • 每个服务器区域的流量(进/出)和请求及响应计数和缓存命中率,通过 vhost_traffic_status_filter_by_set_key 指令过滤
  • 总流量(进/出)和请求及响应计数(该区域名称为 *)和命中率,通过 vhost_traffic_status_filter_by_set_key 指令过滤
  • upstreamZones
  • 每个上游组中每个服务器的流量(进/出)和请求及响应计数
  • 当前设置(权重、最大失败次数、失败超时...)在 nginx.conf 中
  • cacheZones
  • 每个缓存区域的流量(进/出)和大小(容量/已用)和命中率,当使用 proxy_cache 指令时。

JSON 文档中的 overCounts 对象主要用于 32 位系统,如果其值溢出,将增加 1。 指令 vhost_traffic_status_display_format 设置默认输出格式,可以是 json、jsonp、html、prometheus 之一。(默认:json)

流量计算如下:

  • ServerZones
  • in += requested_bytes
  • out += sent_bytes
  • FilterZones
  • in += requested_bytes 通过过滤器
  • out += sent_bytes 通过过滤器
  • UpstreamZones
  • in += requested_bytes 通过 ServerZones
  • out += sent_bytes 通过 ServerZones
  • cacheZones
  • in += requested_bytes 通过 ServerZones
  • out += sent_bytes 通过 ServerZones

所有计算在 Nginx 的日志处理阶段进行。 内部重定向(X-Accel-Redirect 或 error_page)在 UpstreamZones 中不计算。

注意事项: 此模块依赖于 nginx 日志系统(NGX_HTTP_LOG_PHASE:nginx http 的最后阶段),因此在某些情况下流量可能与实际带宽流量不同。 Websocket、取消的下载可能导致不准确。 该模块的工作与 access_log 指令的 "on" 或 "off" 无关。 再次强调,该模块在 "access_log off" 时也能正常工作。 使用多个域名时,它会设置为 server_name 指令的第一个域名(左侧)。 如果您不想这样,请参见 vhost_traffic_status_filter_by_hostvhost_traffic_status_filter_by_set_key 指令。

有关 stream 流量统计的模块,请参见: * nginx-module-sts * nginx-module-stream-sts

计算和间隔

平均值

所有平均值目前都是在过去 64 个值上计算的 AMM(算术平均数)。

控制

可以通过查询字符串重置或删除流量区域。 请求将以 JSON 文档的形式响应。

  • URI 语法
  • /{status_uri}/control?cmd={command}&group={group}&zone={name}
http {

    geoip_country /usr/share/GeoIP/GeoIP.dat;

    vhost_traffic_status_zone;
    vhost_traffic_status_filter_by_set_key $geoip_country_code country::*;

    ...
    upstream backend {
        10.10.10.11:80;
        10.10.10.12:80;
    }

    server {

        server_name example.org;

        ...

        vhost_traffic_status_filter_by_set_key $geoip_country_code country::$server_name;

        location /status {
            vhost_traffic_status_display;
            vhost_traffic_status_display_format html;
        }
    }
}

如果设置如上,则控制 URI 类似于 example.org/status/control

可用的请求参数如下: * cmd=\<status|reset|delete> * status * 返回流量区域的状态,格式为 json,如 status/format/json。 * reset * 重置流量区域,而不删除共享内存中的节点。(= 初始化为 0) * delete * 删除共享内存中的流量区域。当重新请求时会重新创建。 * group=\<server|filter|upstream@alone|upstream@group|cache|*> * server * filter * upstream@alone * upstream@group * cache * * * zone=name * server * name * filter * filter_group@name * upstream@group * upstream_group@name * upstream@alone * @name * cache * name

实时获取流量区域状态

这与 status/format/json 类似,只是可以获取每个区域。

获取完整区域

  • status/format/json 完全相同。
  • /status/control?cmd=status&group=*

获取组区域

  • mainZones
  • /status/control?cmd=status&group=server&zone=::main
  • serverZones
  • /status/control?cmd=status&group=server&zone=*
  • filterZones
  • /status/control?cmd=status&group=filter&zone=*
  • upstreamZones
  • /status/control?cmd=status&group=upstream@group&zone=*
  • upstreamZones::nogroups
  • /status/control?cmd=status&group=upstream@alone&zone=*
  • cacheZones
  • /status/control?cmd=status&group=cache&zone=*

mainZones 值是默认状态值,包括 hostNamemoduleVersionnginxVersion