这一篇文章通过监控nginx服务来介绍如何做自定义监控。。。
首先,在做自定义监控之前,需要清楚自定义的监控需要通过Agent来完成,snmp是无法完成的。因此需要停掉在zabbix-agent上的snmpd服务
systemctl stop snmpd.service
systemctl disable snmpd.service
其次,本文通过自定义一个nginx的案例来做介绍,因此需要在zabbix-agent主机上安装nginx服务,并启动:
rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
yum -y install nginx
systemctl start nginx.service
另外,确认打开了zabbix-agent的如下配置(yum安装的默认打开),如果没有打开请先打开并重启服务
配置文件: /etc/zabbix/zabbix_agentd.conf +268
Include=/etc/zabbix/zabbix_agentd.d/*.conf
#重启zabbix-agent服务
systemctl restart zabbix-agent.service
注:以后所有自定义的配置文件,都应该放在放在/etc/zabbix_agent.d/目录下,并以.conf结尾。
一、自定义item(监控项)
1.1 UserParameter介绍
我们可以在配置文件/etc/zabbix/zabbix_agentd.conf中看到如下一段描述:
### Option: UserParameter # User-defined parameter to monitor. There can be several user-defined parameters. # Format: UserParameter=<key>,<shell command> # See \'zabbix_agentd\' directory for examples. # # Mandatory: no # Default: # UserParameter=
这就是自定义监控的格式了,即:
UserParameter=<key>,<shell command>
#其中各项含义如下:
UserParameter=:这是自定义配置的固定写法
<key>:自定义一个监控参数,例如nginx-alive
<shell command>:shell命令,需要用这个命令来获取对应的结果。可以是一个shell脚本!!
我们可以将这个参数配置写到Include=/etc/zabbix/zabbix_agentd.d/目录下的一个文件中,并以*.conf命名!
另外,在生产中建议开启另外一个参数UnsafeUserParameters(允许参数使用特殊字符):
配置文件:/etc/zabbix/zabbix_agentd.conf +287
UnsafeUserParameters=1
#修改完成后重启
systemctl restart zabbix-agent.service
1.2 zabbix_get介绍
zabbix-get是一个很好的通过agent获取key值的参数,一般装在zabbix-server上。在zabbix-server上安装zabbix_get
yum -y install zabbix-get
通过zabbix-get来获取对应参数的值
#查看zabbix_get帮助
zabbix_get --helo
#获取zabbix-agent主机的负载
zabbix-get -s zabbix-agent -p 10050 -k "system.cpu.load[all,avg1]"
#每一项含义如下:
1、-s zabbix-agent:指定监控的主机
2、-p 10050:指定zabbix-agent的端口好,默认为10050
3、-k "system.cpu.load[all,avg1]":指定需要获取的key值
结果如下:
1.3 实践:监控nginx是否存活
监控一个服务是否正常的方式:
1、监控该服务监听的端口
2、监控该服务的进程是否存在
3、通过请求获取状态值
前两种方式不一定会获取到正确的结果,可能端口和进程都在,但是服务却不正常,因此这里选择通过curl来进行判断。
- 第一步
通过crul命令来检测,并获取返回值
[root@zabbix-server zabbix]# curl --head -s http://zabbix-agent | grep \'200 OK\' | wc -l 1
#其中‘1’表示存活;‘0’表示挂掉
- 第二步
编写自定义监控配置文件
vim /etc/zabbix/zabbix_agentd.d/zabbix-nginx.conf
UserParameter=nginx-alive,curl --head -s http://zabbix-agent | grep \'200 OK\' | wc -l
#完成后重启zabbix-agent服务
systemctl restart zabbix-agent.service
- 第三步
通过zabbix_get来获取值,查看是否能正常获取
[root@zabbix-server zabbix]# zabbix_get -s zabbix-agent -p 10050 -k "nginx-alive" 1
#这里返回了1,说明初步配置成功。
1.4 创建一个item(监控项)
刚才仅仅是配置了通过命令能够获取,现在我们需要将它通过配置,从面板展示出来!这里仅介绍单独创建一个item,暂时不去关联应用集和模板。
- 第一步
依次选择【配置】、【主机】,并点击zabbix-agent的【监控项】
- 第二步
点击右上角的【创建监控项】
- 第三步
接下来这一步是最为重要的,即如何正确的配置这个监控项,先介绍一下每一项的含义
名称:给新建的监控项命名,最好和UserParameter的值一致,这里填nginx-alive
类型:Agent类型,一般为默认的Zannix 客户端
键值:这个是我们配置的UserParameter的值,这里是nginx-alive
主机接口:client的地址和端口,默认
信息类型:选择信息的类型,包括数字、字符、日志、文本等,这里我们获取的是一个数据,就选数字(无正负)
单位:zabbix默认会将超过1000的值以K来表示,超过1000K的以M来表示,这里我们只会获取0和1,就不填了
更新间隔:zabbix抓取信息的时间间隔,默认30s,一般来说需视服务的实际情况而定,不要配置的过小和过大
自定义时间间隔:自定义抓取信息的时间间隔配置,这里不做配置
历史数据保留时长:历史数据的保留时间期限,如果时间太长可能会导致磁盘占用率过高
存储趋势时间:即存储趋势图的保留时间,建议多加一些保留时间,以便日后查看
查看值:默认不变
新的应用集:一般来说一个item应该归属于一个或者多个应用集,如果没有的话可以在这里添加,但现在暂时不做添加
应用集:从已有的应用集中选择一个
填入主机资产记录栏位:资产记录相关,不填
描述:item的详细描述,必须填写清楚
配置如下,配置完成后点击添加:
- 第四步
查看配置是否成功
1、在主机的监控项中nginx-alive是已启用状态
2、依次选择【监测】、【最新数据】,并对目标nginx-alive监控项做过滤,查看是否获取了最新数据
整个配置流程如下:
增加一个新的监控项,并添加到面板暂时就介绍到这里~~
二、自定义触发器
自定义触发器的目的是为了在监控项发生异常的时候,能够及时的发送报警信息,具体配置步骤如下。
- 第一步
依次选择【配置】、【主机】、【触发器】
- 第二步
单击右上角的【创建触发器】
- 第三步
配置触发器:
1、填写触发器的名称;
2、选择触发器的严重性;
3、配置表达式
单击添加,在弹出来的对话框中选择正确的监控项及配置,然后系统会自动生成一个表达式。这里配置的意思是如果最后一次取值为0,则说明服务异常,触发严重告警状态。
4、点击添加,完成触发器的创建。
- 第四步
我们将Nginx服务手动关闭,查看监控页面是否会报警,如果报警说明配置正确!
说明:1、鼠标移动报警信息上面会看到我们配置的报警说明;2、Action为触发报警时服务器的动作(例如发送报警邮件等)。
三、创建一个模板
和zabbix系统自带的模板一样,当监控项过多的时候,单独添加监控项实在是太麻烦,因此需要将类似功能的监控项都放到同一个模板里面。监控项和模板的层级关系如下:
- 一个模板包含多个应用集
- 一个应用集包含多个监控项
下面做一个检测Nginx多种状态的实验来进行说明。
3.1 配置nginx状态检测
zabbix-agent完成
- 第一步
开启nginx的状态检测功能,并且只允许本机访问
cat > /etc/nginx/conf.d/nginx_status.conf<<EOF server { server_name 127.0.0.1; location /nginx_status{ stub_status on; access_log off; allow 127.0.0.1; deny all; } } EOF
- 第二步
校验配置是否正常,如果正常则重新加载配置文件
[root@zabbix-agent conf.d]# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful [root@zabbix-agent conf.d]# nginx -s reload
- 第三步
在本机通过curl命令查看结果(因为配置的127.0.0.1,因此其他主机无法访问)
[root@zabbix-agent conf.d]# curl http://127.0.0.1/nginx_status Active connections: 1 server accepts handled requests 77 77 77 Reading: 0 Writing: 1 Waiting: 0
- 第四步
编写shell脚本,通过不同的参数获取不同的值
[root@zabbix-agent zabbix]# mkdir /service/scripts -p
[root@zabbix-agent scripts]# chown zabbix.zabbix zabbix_nginx_status.sh
[root@zabbix-agent scripts]# chmod +x zabbix_nginx_status.sh
[root@zabbix-agent zabbix]# vim /service/scripts/zabbix_nginx_status.sh
#脚本内容如下
#!/bin/bash
NGINX_PORT=$1
nginx_active(){
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep \'Active\' | awk \'{print $NF}\'
}
nginx_reading(){
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep \'Reading\' | awk \'{print $2}\'
}
nginx_writing(){
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep \'Writing\' | awk \'{print $4}\'
}
nginx_waiting(){
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| grep \'Waiting\' | awk \'{print $6}\'
}
nginx_accepts(){
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk \'{print $1}\'
}
nginx_handled(){
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk \'{print $2}\'
}
nginx_requests(){
/usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/nginx_status/" 2>/dev/null| awk NR==3 | awk \'{print $3}\'
}
main(){
case $2 in
active)
nginx_active;
;;
reading)
nginx_reading;
;;
writing)
nginx_writing;
;;
waiting)
nginx_waiting;
;;
accepts)
nginx_accepts;
;;
handled)
nginx_handled;
;;
requests)
nginx_requests;
esac
}
main $1 $2
- 第五步
通过脚本获取相应的值,如果能正确返回,说明脚本能正常使用
3.2 配置zabbix监控文件UserParameter
zabbix-agent完成
- 第一步
修改原来的zabbix-nginx.conf 文件,增加一行配置
vim /etc/zabbix/zabbix_agentd.d/zabbix-nginx.conf
UserParameter=nginx-alive,curl --head -s http://zabbix-agent | grep \'200 OK\' | wc -l UserParameter=nginx-status[*],/bin/bash /service/scripts/zabbix_nginx_status.sh "$1" "$2"
- 第二步
重启zabbix-agent服务
systemctl restart zabbix-agent.service
- 第三步
在zabbix-server端通过zabbix_get获取值:
3.3 页面配置模板
能够正常获取参数后,就可以在页面开始配置一个新的模板了!!
- 第一步
依次选择【配置】、【模板】、【创建模板】
- 第二步
根据提示填入相应的信息,完成后点击添加(一个新的模板就创建好了)
- 第三步
在新模板里面创建一个应用集
- 第四步
往这个应用集里面添加监控项。依次创建7个不同的监控项!!
3.4 将模板加入到主机
模板配置好以后,还需要将这个模板添加到相应的主机,才能开始进行监控。
- 第一步
依次选择【配置】、【主机】、【zabbix-agent】、【模板】
- 第二步
添加一个Template Nginx status模板
- 第三步
过滤并查看最新数据。能查看到最新数据说明我们的模板配置完成!!
四、创建自定义图形
4.1 创建单个图形
- 第一步
依次选择【配置】、【模板】、【Template Nginx Status】、【图形】,并点击右上角的创建图形
- 第二步
根据提示填写相应的参数,并将我们刚才创建的监控项都添加进去(也可创建完成后动态调整)
- 第三步
因为图形的创建是基于模板的,之前我们已经将该模板添加到了zabbix-agent中,所以现在就已经可以通过过滤来检测该图形了。
4.2 创建聚合图形
有时候需要在同一个页面展示多个图形,因此就用到了聚合图形。
- 第一步
依次选择【监测】、【聚合图形】、【创建聚合图形】
- 第二步
根据提示,创建一个聚合图形
- 第三步
点击刚创建的这个聚合图形,并点击右上角的【编辑聚合图形】
- 第四步
按照自己的需求对这个聚合图形进行设置
点击更改按钮,根据提示进行配置。
注:这里不仅仅可以添加图形,还可以选择其他的资源,比如时钟,URL等等。。。
效果如下图:
4.3 创建幻灯片
有时候为了显示方便,可以将多个聚合图形配置成一个幻灯片进行轮训播放。
- 第一步
也是在监测、聚合图形里面有一个幻灯片演示
- 第二步
点击右上角的【创建幻灯片播放】
- 第三步
编辑这个幻灯片,并添加聚合图形到这个幻灯片里。
- 第四步
播放这个幻灯片。选择这个幻灯片,并点击右上角的⭐图标,将其添加到常用的聚合图形里面
- 第五步
将常用的聚合图形添加到仪表板
我们 可以到仪表板页面,然后点击【编辑仪表板】,将一个不常用的模块替换为【常用的聚合图形】,然后就能在面板看到我们刚添加的幻灯片演示拉~~
好啦,zabbix的一些自定义配置就介绍到这里了~~
下一篇介绍windows的监控!!