阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

用Prometheus细化Nginx监控

219次阅读
没有评论

共计 4186 个字符,预计需要花费 11 分钟才能阅读完成。

国内用 Nginx 的比较多,Nginx 的监控比较老的方案可能是通过跑脚本定期收集 nginx 的 status 模块的数据,或者监控 nginx 的日志;后来阿里的 tengine 在国内开始流行,于是诞生了很多不错的 lua 模块; 但是这些监控方案在有新的监控需求的时候,可能就需要再修改脚本或者更改 nginx conf 配置,有时候不是特别的方便。用 Prometheus 进行 nginx 的监控可以自动的对相关 server_name 和 upstream 进行监控,你也可以自定义 Prometheus 的数据标签,实现对不同机房和不同项目的 nginx 进行监控。
监控 Nginx 主要用到以下三个模块:
nginx-module-vts:Nginx virtual host traffic status module,Nginx 的监控模块,能够提供 JSON 格式的数据产出。
nginx-vts-exporter:Simple server that scrapes Nginx vts stats and exports them via HTTP for Prometheus consumption。主要用于收集 Nginx 的监控数据,并给 Prometheus 提供监控接口,默认端口号 9913。
Prometheus:监控 Nginx-vts-exporter 提供的 Nginx 数据,并存储在时序数据库中,可以使用 PromQL 对时序数据进行查询和聚合。

一、nginx-module-vts 模块的编译
nginx_vts_exporter 依赖 nginx-module-vts 模块,安装此模块无需任何其他依赖。模块与 Nginx 的版本兼容性如下:

1.11.x (last tested: 1.11.10)
1.10.x (last tested: 1.10.3)
1.8.x (last tested: 1.8.0)
1.6.x (last tested: 1.6.3)
1.4.x (last tested: 1.4.7)
同时适用于 tengine,其他 nginx 早期版本未做验证。
安装步骤:
1. 下载模块
shell> git clone git://github.com/vozlt/nginx-module-vts.git

2. 编译配置
在 nginx 编译时添加 vts 模块
–add-module=/path/to/nginx-module-vts
下载官方的软件包并编译进 vts 模块,例如:

./configure –user=www –group=www –prefix=/usr/local/nginx –with-http_sysguard_module  –add-module=nginx-module-vts

3. 安装:
make && make install

二、Nginx Conf 配置
更改 Nginx Conf 的配置,添加监控接口 /status/:

http {
vhost_traffic_status_zone;
    vhost_traffic_status_filter_by_host on;

server {

    …

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

配置建议:
1. 打开 vhost 过滤:
vhost_traffic_status_filter_by_host on;
开启此功能,在 Nginx 配置有多个 server_name 的情况下,会根据不同的 server_name 进行流量的统计,否则默认会把流量全部计算到第一个 server_name 上。
2. 在不想统计流量的 server 区域禁用 vhost_traffic_status,配置示例:
server {

vhost_traffic_status off;

}

假如 nginx 没有规范配置 server_name 或者无需进行监控的 server 上,那么建议在此 vhost 上禁用统计监控功能。否则会出现“127.0.0.1”,hostname 等的域名监控信息。

三、监控数据的查看
安装完 vts 模块后,可以通过 nginx status 接口进行监控数据的查看,比如:http://127.0.0.1/status:

用 Prometheus 细化 Nginx 监控

在页面的最下方可以指定监控页面刷新的时间间隔,点击 JSON,可以转为 JSON 格式输出。

用 Prometheus 细化 Nginx 监控

三、nginx-vts-exporter 的使用
exporter 会收集 nginx 性能指标的 JSON 格式数据,并汇总后暴露监控接口给 Prometheus。

它的安装使用很简单,开箱即用:
1. 下载当前最新版本的软件包:
nginx-vts-exporter-0.9.1.linux-amd64.tar.gz

可以到 Linux 公社资源站下载:

—————————————— 分割线 ——————————————

免费下载地址在 http://linux.linuxidc.com/

用户名与密码都是www.linuxidc.com

具体下载目录在 /2018 年资料 / 8 月 / 6 日 / 用 Prometheus 细化 Nginx 监控 /

下载方法见 http://www.linuxidc.com/Linux/2013-07/87684.htm

—————————————— 分割线 ——————————————

2. 解压后运行:
# nginx-vts-exporter-0.9.1.linux-amd64/nginx-vts-exporter -nginx.scrape_timeout 10 -nginx.scrape_uri http://127.0.0.1/status/format/json
推荐 exporter 和 nginx 安装在同一台机器上,如果不在同一台主机,把 scrape_uri 改为 nginx 主机的地址。
nginx_vts_exporter 的默认端口号:9913,对外暴露监控接口 http://xxx:9913/metrics.

四、Nginx 的监控数据类型

nginx-vts-exporter 的数据类型命名空间默认以“nginx”开头,主要有如下 9 个:

HELP 是对监控条目的解释,TYPE 的格式是:监控条目名称 +Prometheus 数据类型:

# HELP nginx_server_bytes request/response bytes
# TYPE nginx_server_bytes counter
# HELP nginx_server_cache cache counter
# TYPE nginx_server_cache counter
# HELP nginx_server_connections nginx connections
# TYPE nginx_server_connections gauge
# HELP nginx_server_requestMsec average of request processing times in milliseconds
# TYPE nginx_server_requestMsec gauge
# HELP nginx_server_requests requests counter,可以区分状态码
# TYPE nginx_server_requests counter
# HELP nginx_upstream_bytes request/response bytes
# TYPE nginx_upstream_bytes counter
# HELP nginx_upstream_requestMsec average of request processing times in milliseconds
# TYPE nginx_upstream_requestMsec gauge
# HELP nginx_upstream_requests requests counter,可以区分状态码
# TYPE nginx_upstream_requests counter
# HELP nginx_upstream_responseMsec average of only upstream/backend response processing times in milliseconds
# TYPE nginx_upstream_responseMsec gauge

五、Nginx 监控在 Prometheus 的数据汇总
常用监控汇总表达式:
DomainName 对应 nginx conf 里的 server_name,这里可以根据不同的 server_name 和 upstream 分别进行 qps、2xx/3xx/4xx/5xx 的状态码监控,另外也可以监控 nginx 每台后端 server 的 qps 和后端接口响应时间。

如果不需要区分 server_name,可以把表达式里的 $DomainName 改为星号,“*****”代表所有;
1. 求 Nginx 的 QPS:
sum(irate(nginx_server_requests{code=”total”,host=~”$DomainName”}[5m]))
2. 求 4xx 万分率(5xx 类似,code=“5xx”):
(sum(irate(nginx_server_requests{code=”4xx”,host=~”$DomainName”}[5m])) / sum(irate(nginx_server_requests{code=”total”,host=~”$DomainName”}[5m]))) * 10000
3. 求 upstream 的 QPS(示例求 group1 的 qps):
sum(irate(nginx_upstream_requests{code=”total”,upstream=”group1″}[5m]))
4. 求 upstream 后端 server 的响应时间(示例求 group1 的后端响应时间):
nginx_upstream_responseMsec{upstream=“group1”}

六、Nginx 监控的展示

Dashboard 的展示当然是使用 grafana,自己根据表达式画图即可,监控图类似:

用 Prometheus 细化 Nginx 监控

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计4186字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中