
前面的博文 Nginx安装,开箱即用?讲了NG的安装,装完NG,为了拿到各种状态指标,就要对NG做监控。
Github 2.3k的开源项目nginx-module-vts没准真是你需求的。
链接数,qps,1xx、2xx,、3xx、4xx、5xx的响应数,响应耗时,响应时间分布,访问用户国家分布;甚至是基于各种状态的流量控制统统能满足你的需求。
nginx-module-vts具体怎么用?我们还是从官方文档开始撸吧,还是英文的,那就翻译一下吧。
内容有点长,你看到的文档会四篇文档的方式分别出现。这里是第二篇,第一篇你可以点这里查看。
Nginx虚拟主机流量状态模块

目录
9、管控指令(Control)
control指令能够通过查询字符串重置或删除流量区域。
该请求以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;
        }
    }
}
如果设置如上,则control的uri类似于example.org/status/control。
可用的请求参数如下:
- 
cmd=<status|reset|delete>- status
- 它将流量区域(zones)的状态返回为json格式,如status/format/json。
 
- 它将流量区域(zones)的状态返回为json格式,如
- reset
- 重置流量区域(zones)而不删除共享中的节点(nodes)。
 
- delete
- 删除共享内存中的流量区域(zones)。当重新请求时重新创建时。
 
 
- status
- 
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
 
 
- server
动态获取流量区域(zones)状态
与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中的状态值,包括hostName、nginxVersion、loadMsec、nowMsec、connections。
获取每个区域
- single zone in serverZones
- /status/control?cmd=status&group=server&zone=name
 
- /status/control?cmd=status&group=server&zone=
- single zone in filterZones
- /status/control?cmd=status&group=filter&zone=filter_group@name
 
- /status/control?cmd=status&group=filter&zone=
- single zone in upstreamZones
- /status/control?cmd=status&group=upstream@group&zone=upstream_group@name
 
- /status/control?cmd=status&group=upstream@group&zone=
- single zone in upstreamZones::nogroups
- /status/control?cmd=status&group=upstream@alone&zone=name
 
- /status/control?cmd=status&group=upstream@alone&zone=
- single zone in cacheZones
- /status/control?cmd=status&group=cache&zone=name
 
- /status/control?cmd=status&group=cache&zone=
动态重置流量区域
将指定区域的值重置为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=*
 
重置每个分区
- single zone in serverZones
- /status/control?cmd=reset&group=server&zone=name
 
- /status/control?cmd=reset&group=server&zone=
- single zone in filterZones
- /status/control?cmd=reset&group=filter&zone=filter_group@name
 
- /status/control?cmd=reset&group=filter&zone=
- single zone in upstreamZones
- /status/control?cmd=reset&group=upstream@group&zone=upstream_group@name
 
- /status/control?cmd=reset&group=upstream@group&zone=
- single zone in upstreamZones::nogroups
- /status/control?cmd=reset&group=upstream@alone&zone=name
 
- /status/control?cmd=reset&group=upstream@alone&zone=
- single zone in cacheZones
- /status/control?cmd=reset&group=cache&zone=name
 
- /status/control?cmd=reset&group=cache&zone=
动态删除流量区域
删除共享内存中指定的区域。
删除全部分区
- /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=*
 
删除每个分区
- single zone in serverZones
- /status/control?cmd=delete&group=server&zone=name
 
- /status/control?cmd=delete&group=server&zone=
- single zone in filterZones
- /status/control?cmd=delete&group=filter&zone=filter_group@name
 
- /status/control?cmd=delete&group=filter&zone=
- single zone in upstreamZones
- /status/control?cmd=delete&group=upstream@group&zone=upstream_group@name
 
- /status/control?cmd=delete&group=upstream@group&zone=
- single zone in upstreamZones::nogroups
- /status/control?cmd=delete&group=upstream@alone&zone=name
 
- /status/control?cmd=delete&group=upstream@alone&zone=
- single zone in cacheZones
- /status/control?cmd=delete&group=cache&zone=name
 
- /status/control?cmd=delete&group=cache&zone=
10、设置指令(Set)
可以使用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/backend@10.10.10.11: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指令以了解详细用法。
11、JSON字段说明
以下状态信息以JSON格式提供:
状态中使用的Json
/{status_uri}/format/json
/{status_uri}/control?cmd=status&...
- hostName
- 主机名。
 
- nginxVersion
- nginx的版本。
 
- loadMsec
- 以毫秒为单位的处理时间。
 
- nowMsec
- 以毫秒为单位的当前时间
 
- connections
- active
- 当前活动的客户端连接数。
 
- reading
- 读取客户端连接的总数。
 
- writing
- 写入客户端连接的总数。
 
- waiting
- 正在等待的客户端连接总数。
 
- accepted
- 接受的客户端连接总数。
 
- handled
- 已处理的客户端连接总数
 
- requests
- 请求请求的客户端连接总数。
 
 
- active
- sharedZones
- name
- 配置中指定的共享内存的名称。(默认值为:vhost_traffic_status)
 
- 配置中指定的共享内存的名称。(默认值为:
- maxSize
- 配置中指定的共享内存的最大大小的限制。
 
- usedSize
- 共享内存的当前大小。
 
- usedNode
- 共享内存中当前使用的节点数。可以通过以下公式获得一个节点的近似大小:(usedSize / usedNode)
 
 
- name
- serverZones
- requestCounter
- 从客户端接收的客户端请求总数。
 
- inBytes
- 从客户端接收的总字节数。
 
- outBytes
- 发送到客户端的总字节数。
 
- responses
- 1xx, 2xx, 3xx, 4xx, 5xx
- 状态代码为1xx、2xx、3xx、4xx和5xx的响应数。
 
- miss
- 未命中的缓存数。
 
- bypass
- 绕过缓存旁路数。
 
- expired
- 过期的缓存数。
 
- stale
- 失效缓存的数量。
 
- updating
- 缓存更新的次数。
 
- revalidated
- 重新验证的缓存数。
 
- hit
- 缓存命中数。
 
- scarce
- 未达缓存要求的请求次数。
 
 
- 1xx, 2xx, 3xx, 4xx, 5xx
- requestMsecCounter
- 累积的请求处理时间(毫秒)。
 
- requestMsec
- 请求处理时间的平均值(毫秒)。
 
- requestMsecs
- times
- 请求处理时间的时间(毫秒)。
 
- msecs
- 请求处理时间的时间(毫秒)。
 
 
- times
- requestBuckets
- msecs
- 由vhost_traffic_status_histogram_buckets指令设置的柱状图的桶的值.
 
- 由
- counters
- 每个存储桶段值大于或等于对应请求处理时间的累积值。
 
 
- msecs
 
- requestCounter
- filterZones
- 它提供了与serverZones相同的字段,只是包含了组名。
 
- 它提供了与
- upstreamZones
- server
- server地址。
 
- requestCounter
- 转发到此服务器的客户端连接总数。
 
- inBytes
- 从该服务器接收的总字节数。
 
- outBytes
- 发送到此服务器的总字节数。
 
- responses
- 1xx, 2xx, 3xx, 4xx, 5xx
- 状态代码为1xx、2xx、3xx、4xx和5xx的响应数。
 
 
- 1xx, 2xx, 3xx, 4xx, 5xx
- requestMsecCounter
- 包括upstream在内的累计请求处理时间数(毫秒)。
 
- requestMsec
- 包括upstream在内请求处理时间的平均毫秒数。
 
- requestMsecs
- times
- 请求处理时间的时间(毫秒)。
 
- msecs
- 包括upstream在内请求处理时间的时间(毫秒)。
 
 
- times
- requestBuckets
- msecs
- 由vhost_traffic_status_histogram_buckets指令设置的直方图的bucket值。
 
- 由
- counters
- 每个存储桶段值大于或等于对应请求处理时间(包括上游)的累积值。
 
 
- msecs
- responseMsecCounter
- 仅upstream响应处理时间累加值(毫秒)。
 
- responseMsec
- 仅upstream响应处理时间平均值(毫秒)。
 
- responseMsecs
- times
- 请求处理时间(毫秒)。
 
- msecs
- 仅upstream响应处理时间平均值(毫秒)。
 
 
- times
- responseBuckets
- msecs
- 由vhost_traffic_status_histogram_buckets指令设置的柱状图的存储桶值。
 
- 由
- counters
- 仅upstream响应处理时间大于或等于每个存储桶值的累计次数
 
 
- msecs
- weight
- server的当前的weight设置。
 
- server的当前的
- maxFails
- server的当前的max_fails设置。
 
- server的当前的
- failTimeout
- server的当前的fail_timeout设置。
 
- server的当前的
- backup
- server的当前的backup设置。
 
- server的当前的
- down
- 服务器的当前down设置。
 基本上,这只是ngx_http_upstream_module的server关闭的标记(例如server backend3.example.com down),不是实际的upstream状态。
 如果启用了上游区域指令,它将变为实际状态。
 
- 服务器的当前
 
- server
- cacheZones
- maxSize
- 配置中指定的最大缓存大小限制。
 
- usedSize
- 当前缓存的大小。
 
- inBytes
- 从缓存接收的字节总数。
 
- outBytes
- 从缓存发送的字节总数。
 
- responses
- miss
- 未命中的缓存数。
 
- bypass
- 绕过缓存旁路数。
 
- expired
- 过期的缓存数。
 
- stale
- 失效缓存的数量。
 
- updating
- 缓存更新的次数。
 
- revalidated
- 重新验证的缓存数。
 
- hit
- 缓存命中数。
 
- scarce
- 未达缓存要求的请求次数。
 
 
- miss
 
- maxSize
Control中使用的Json
/{status_uri}/control?cmd=reset&...
/{status_uri}/control?cmd=delete&...
- processingReturn
- The result of true or false.
 
- processingCommandString
- The requested command string.
 
- processingGroupString
- The requested group string.
 
- processingZoneString
- The requested zone string.
 
- processingCounts
- The actual processing number.
 

凋谢的不是花,萎蔫的是时间;星辰大海,点滴为途。