分享 | 交流
让学习成为一种习惯

Zabbix监控Nginx的7种连接状态

nginx在生产环境中的应用越来越广泛,所以需要对nginx的性能状态做一些监控来发现出来出现的问题。zabbix监控nginx,首先确认nginx的监控指标,主要有:基本活动指标,错误指标,性能指标。

nginx处理流程图具体如下:

Zabbix监控Nginx的7种连接状态

注释:Accepts(接受)、Handled(已处理)、Requests(请求数)是一直在增加的计数器。Active(活跃)、Waiting(等待)、Reading(读)、Writing(写)随着请求量而增减

名称 描述 指标类型
Accepts(接受) NGINX 所接受的客户端连接数 资源: 功能
Handled(已处理) 成功的客户端连接数 资源: 功能
Active(活跃) 当前活跃的客户端连接数 资源: 功能
Dropped(已丢弃,计算得出) 丢弃的连接数(接受 – 已处理) 工作:错误*
Requests(请求数) 客户端请求数 工作:吞吐量

NGINX worker 进程接受 OS 的连接请求时 Accepts 计数器增加,而Handled 是当实际的请求得到连接时(通过建立一个新的连接或重新使用一个空闲的)。这两个计数器的值通常都是相同的,如果它们有差别则表明连接被Dropped, 往往这是由于资源限制,比如已经达到 NGINX 的worker_connections的限制。

首先nginx需要配置nginx_status  具体步骤是:在 zabbix agentd客户端上,查看nginx是否加载了with-http_stub_status_module。因为 zabbix 监控nginx是根据nginx的Stub Status模块,抓取Status模块所提供的数据。假如以前没开启,现在想启用StubStatus 模块,在编译nginx 的时候要加上参数with-http_stub_status_module,执行./configure && make就可以了,不用make install,一般情况下都是安装的,具体的安装配置如下

(一)配置nginx

1,查看nginx_status是否开启,查看已开启。

[root@masaike ~]# nginx -V
nginx version: nginx/1.13.10
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC)
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: ...
	--with-http_ssl_module --with-http_stub_status_module 
       ...

2,nginx_status开启的步骤:

[root@masaike ~]# vim /usr/local/nginx/conf/nginx.conf
server {
   ...省略...(添加一个location模块)
    location = /nginx-status {
    stub_status on;
    access_log off;
    allow 127.0.0.1;
    allow 0.0.0.0;
}

3,测试并启动nginx

[root@masaike ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

[root@masaike ~]# systemctl reload nginx

4,用curl来进行测试:

[root@masaike ~]# curl www.baidu.com/nginx-status
Active connections: 979 
server accepts handled requests
 756072922 756072922 1136799890 
Reading: 0 Writing: 4 Waiting: 975

备注:
Active connections –当前活跃的连接数量
server accepts handled requests — 总共处理了756072922个连接 , 成功创建 756072922次握手, 总共处理了1136799890个请求
reading — 读取客户端的连接数.
writing — 响应数据到客户端的数量
waiting — 开启 keep-alive 的情况下,这个值等于 active – (reading writing), 意思就是 Nginx 已经处理完正在等候下一次请求指令的驻留连接.

(二)配置zabbix_agentd

1,编写脚步来获取nginx的相关信息

[root@masaike ~]# vim /etc/zabbix/scripts/nginx_status.sh
#!/bin/bash
# AUTHOR:martin
# WEBSITE: https://www.liushike.com
# Description:zabbix监控nginx性能以及进程状态
# Note:此脚本需要配置在被监控端,否则ping检测将会得到不符合预期的结果

URL="https://www.baidu.com/nginx-status"
case $1 in
    active)
        curl -s $URL | awk '/Active/ {print $3}' ;;
    accepts)
        curl -s $URL | awk 'NR==3 {print $1}' ;;
    handled)
        curl -s $URL | awk 'NR==3 {print $2}' ;;
    requests)
        curl -s $URL | awk 'NR==3 {print $3}' ;;
    reading)
        curl -s $URL | awk '/Reading/ {print $2}' ;;
    writing)
        curl -s $URL | awk '/Writing/ {print $4}' ;;
    waiting)
        curl -s $URL | awk '/Waiting/ {print $6}' ;;
    *)
        echo "Usage: $0 { active | accepts | handled | requests | reading | writing | waiting }" ;;
esac
[root@masaike ~]# chmod +x /etc/zabbix/scripts/nginx_status.sh
[root@masaike ~]# ll /etc/zabbix/scripts/nginx_status.sh
-rwxr-xr-x 1 root root 1645 Apr 19 15:14 /etc/zabbix/scripts/nginx_status.sh

2,添加自定义 key 配置文件

[root@masaike ~]# vim /etc/zabbix/zabbix_agentd.d/userparameter_nginx.conf
## Nginx_status
UserParameter=nginx.active,/etc/zabbix/scripts/nginx_status.sh active
UserParameter=nginx.accepts,/etc/zabbix/scripts/nginx_status.sh accepts
UserParameter=nginx.handled,/etc/zabbix/scripts/nginx_status.sh handled
UserParameter=nginx.requests,/etc/zabbix/scripts/nginx_status.sh requests
UserParameter=nginx.reading,/etc/zabbix/scripts/nginx_status.sh reading
UserParameter=nginx.writing,/etc/zabbix/scripts/nginx_status.sh writing
UserParameter=nginx.waiting,/etc/zabbix/scripts/nginx_status.sh waiting

3,配置zabbix_agentd.conf。启用UserParameter。

[root@masaike ~]# vim /usr/local/zabbix/etc/zabbix_agentd.conf
取消注释并启用
UnsafeUserParameters=1
Include=/etc/zabbix/zabbix_agentd.d/*.conf

4,重启zabbix_agentd客户端
[root@masaike ~]# systemctl restart zabbix-agent
5,在zabbix服务端(server)进行测试。

[root@instance-2 ~]# zabbix_get -s 服务器ip或域名 -k "nginx.reading"
0
[root@instance-2 ~]# zabbix_get -s 服务器ip或域名 -k "nginx.active"
-0.9902

## 可以获取到 key 的值,说明配置没有问题了
## 被监控端记得要开启 10050 端口
(三)Zabbix 监控 Nginx 状态
## 接下来就是在 web 界面,创建模板、添加监控项了

> 创建模板
配置–模板–创建模板

nginx-status-1.png

> 创建应用集

nginx-status-2.png

## 现在又回到了模板页,跟我一起点 Template App Nginx Service 模板后面的 应用集 -> 创建应用集
名称 : Nginx status
确定

> 创建监控项

nginx-status-3.png

## 现在的位置是 Template App Nginx Service 模板中的 应用集 页面,跟我一起点击刚创建的 Nginx status 后面的 监控项 -> 创建监控项
名称 : nginx active
类型 : Zabbix客户端
键值 : nginx.active ## 由于是自定义 Key ,所以要自己写上去。如果使用自带的 Key ,点击 Select 选择就可以了
信息类型 : 数字(无正负) ## 数据在进行类型转化之后存入数据库
> 数字(无正负): 64 位无符号整数
> 浮点数 : 浮点数类型
> 字符 : 字符串类型数据,限制为 255B
> 日志 : 日志文件,必须使用的 Key 为 log[]
> 文本 : 文本,不限制大小
单位: 留空
更新间隔(秒) : 30 ## 间隔多长时间通过 Items 收集数据,单位 秒
自定义事件间隔(秒) : 50 Period 1-7,00:00-24:00 Add : ## 通过这里来添加一个新的时间段
历史数据保留时长(天) : 90 ## 历史数据保留时间
趋势存储时间(天) : 365 ## 趋势数据保留时间
查看值 : 不变 ## 无预处理( 数据显示时的类型,值映射:将接收到的值映射为一个状态,不改变原值,只改变显示结果,例如将 1 映射为 Nginx service states )
新的应用集 : 留空 ## 创建一个新的应用分组
应用集 : Nginx status ## 选择一个已有的应用分组
填入主机资产纪录栏位 : None ## 将此 Item 分配给某个资产管理组
描述 : 留空 ## 对 Item 的描述信息
已启用 : 勾选 ## 开启此 Item
添加

## 分别定义 active | accepts | handled | requests | reading | writing | waiting 即可

nginx-status-4.png

> 将模板应用到主机

> 如果没有主机,跟着我点点点 配置 -> 主机 -> 创建主机

主机名称 : xxx.xxx.xxx.xxx ## 被监控端 IP( 这里要写被监控端 zabbix_agentd.conf 文件中 Hostname 的值 )
可见的名称 : web01 ## 定义一个别名( 要显示的名字 )
群组 在…群组之中 : Linux Servers ## 选择加入到一个主机组中
新的群组 : 留空 ## 自定义一个主机分组
agent代理程序的接口 : ## 接口协议
IP 地址 : 123.121.211.52 ## 被监控端的 IP
DNS 地址 : 留空 ## 监控主机能够解析的名称
连接到 : IP ## 选择什么方式
端口: 10050 ## 被监控端要开放此端口
SNMP接口 : 留空
JMX接口 : 留空
IPMI接口 : 留空
已启用 : 勾选 ## 开启监控 ( Monitored 代表主机可用,已被监控中;Not monitored 代表主机不可用,不被监控 )
添加 ## 代表主机添加完成( 这里先不点的啦,一并把模板链接上 )选择当前页面中的 Templates

> 现在的位置是主机页中的模板选项卡中,跟着我点点点 选择(也可以在输入框中输入关键字搜索)
新页面中选择 Template App Nginx Service 之后又返回来了,点击 添加 这样就成功链接模板了
更新 ## 最后来一次就可以啦

nginx-status-6.png

9、看一下劳动成果咯
> 跟着我点点点 配置 -> 主机
## 你会看到刚添加的主机,它有一个 应用集 ,7 个 Items ,看到链接了模板,状态为 已启用 。

nginx-status-7.png

> 跟着我点点点 监控中 -> 最新数据
主机 : 选择刚创建的主机,注意:它在分组里面,点击 应用
## 现在,你有没有看到 7 个监控项,并且都获取到了数据哟

nginx-status-5.png

给主机添加一个 图形
> 跟着我点点点 配置 -> 主机 之后,点击刚创建的主机后面的 图形 就可以创建图表了
## 我临时改变主意了,直接去模板里创建比较好,这样就不用给每台主机创建了

nginx-status-9.png

> 跟着我点点点 配置 -> 模板 之后,点击刚创建的模板后面的 图形 -> 创建图形
名称 : Nginx status ## 图表名称
宽 : 900 ## 宽度
高 : 200 ## 高度
图形类别 : 正常 ## 图表类型
> 正常 : 常规图表,值用线条表示
> 层积的 : 叠图
> pie : 饼图
> 爆发的 : 分解饼图
查看图例 : 勾选 ## 显示图表说明
查看工作时间 : 勾选 ## 非 “工作时间” 用灰色表示,不有用于饼图跟分解饼图。
查看触发器 : 勾选 ## 触发达到阈值会用红色线条显示,不能用于饼图跟分解饼图,只有部分触发器函数支持,如 min 、max
百分比线(左) : 不勾选 ## 左边的 Y 轴用来显示百分比,仅对常规图表适用
百分比线(右) : 不勾选 ## 右边的 Y 轴用来显示百分比,仅对常规图表适用
纵轴Y最小值 : 可计算的 ## 自动计算 Y 轴最小值
纵轴最大值 : 可计算的 ## 自动计算 Y 轴最大值
监控项 ## 点击 添加 将之前的 7 个 项目 都添加到一张图中
名称: Item 的名称显示的数据
功能 : 当一个 Item 存在不止一个值时,显示哪一个数据( all 全部 ,min 仅最小值 ,avg 仅平均值 ,max 仅最大值 )
绘图风格 : 线 ## 仅对常规图表适用,对叠图填充区域适用
> 线 :画线条
> 填满的区域 : 画填充区域
> 粗线 : 画粗线
> 点 : 画圆点
> 虚线 : 画虚线
纵轴Y侧: 左 ## Y 轴的左侧分给元素
颜色 : 每种元素代表的颜色
添加 ## 完成 图形 创建,如果在主机中,可以通过第二选项卡 预览 查看

11、查看 图形
## 由于之前已经引用了模板,所以现在主机中自动就有了此 图形
> 跟着我点点点 监测中 -> 图形

nginx-status-8.png

未经允许不得转载:留时刻运维网 » Zabbix监控Nginx的7种连接状态

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

留时刻 - Linux系统教程,运维经验分享

加入我们给我留言