1.在需要监控的nginx客户端操作
一.如果没有nginx的话,安装nginx
需要一个模块:
--with-http_stub_status_module
可以直接yum安装,也可以源码包编译安装。
yum安装需要先配置一个nginx的yum仓库,因为centos7的
yum源并没有包含nginx包。
#nginx仓库
cd /etc/yum.repos.d
vim nginx.repo
#写入
[nginx]
name=name repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
#yum 安装nginx
yum install -y nginx
二.编辑nginx配置文件:
vim /etc/nginx/conf.d/default.conf
在里面添加nginx自带的状态模块:
location /nginx_status
{
stub_status on; //开启状态检测
access_log off; //不要写入访问日志
allow 127.0.0.1; //只允许本机去访问状态
deny all; //除了allow,拒绝所有
}
检查nginx配置是否有错,没错的话启动:
nginx -t
systemctl start nginx
用命令行的形式检测nginx状态模块是否被加载:
curl 127.0.0.1/nginx_status
状态参数说明:
Active Connections:当前活动连接数,其中也包括了等待状态的连接
accepts:接收到的连接数
handled:已经处理完的连接数,该数字一般和accepts一致,如果不一致说明nginx出错了。
requests:总共处理的请求数,一个连接可以有多少个请求,所以该值可以比accepts大。
Reading:正在读取请求头信息的连接数。
Writing:正在发送响应报文的连接数。
Waiting:处于闲置状态,等待客户端发送请求的连接数。
nginx状态数会随着nginx重启清零。
三.编写一个监控nginx状态脚本,获取到状态信息:
cd /usr/local/sbin/
vim ngx_status.sh
#!/bin/bash
url="http://127.0.0.1/nginx_status"
curl=/usr/bin/curl
#检测nginx进程是否开启
function ping {
/sbin/pidof nginx | wc -l
}
#检测nginx状态信息
function active {
$curl $url 2>/dev/null | grep 'Active' | awk '{print $NF}'
}
function reading {
$curl $url 2>/dev/null | grep 'Reading' | awk '{print $2}'
}
function writing {
$curl $url 2>/dev/null | grep 'Writing' | awk '{print $4}'
}
function waiting {
$curl $url 2>/dev/null | grep 'Waiting' | awk '{print $6}'
}
function accepts {
$curl $url 2>/dev/null | awk NR==3 | awk '{print $1}'
}
function handled {
$curl $url 2>/dev/null | awk NR==3 | awk '{print $2}'
}
function requests {
$curl $url 2>/dev/null | awk NR==3 | awk '{print $3}'
}
$1
#给nginx监控加权限
chmod +x ngx_status.sh
#运行脚本
#检测是否开启
./ngx_status.sh ping
1 //开启返回1,否为0
#检测连接数active
./ngx_status.sh active
四.把zabbix_agent和nginx监控脚本关联起来
编辑zabbix_agent配置文件:
vim /etc/zabbix/zabbix_agentd.conf
#找到UserParamete=那行,再下面添加
UserParameter=nginx.status[*],/usr/local/sbin/ngx_status.sh $1
UserParameter是zabbix自定义监控脚本的一个选项,如果有多个可以写多行。
nginx.status[*]:这个参数是在zabbix里面自定义nginx_status.sh脚本的名字,方括号里面表示脚本有参数,就是$1。
2.在zabbix-server端操作
在zabbix-agent已经和监控脚本关联起来了,在server端测试有没有生效:
zabbix_get -s 192.168.247.170 -k 'nginx.status[accepts]'
// -s 源主机,就是zabbix-agent主机
//-k 后面接zabbix定义的监控脚本名字,方括号里参数
测试可以检测之后,最终还得以zabbix-web的形式呈现出来。
进入zabbixweb页面
我之前已经把nginx所在的服务器监控起来了,但是只是监控了服务器本身的一些系统参数,并没有监控应用。此次实验也是在这个基础上的(懒得在弄一次,相关的笔记我还没有写,可能等一下补充 可以在博客里找一下)。
如果手动把监控项添加进来的话,比较麻烦,需要一项项添加。所以我把这些监控项弄到了一个模板里面,然后在添加模板就简单多了。
模板下载链接:
https://pan.baidu.com/s/1PU9HzprLy7v0EU9IHbFv9g
导入模板到zabbix-web:
导入成功后,查看模块,模块名叫Template App NGINX
在主机中添加这个模块: