zabbix-06-自定义item、触发器、模板和图形

时间:2024-03-03 10:02:42

 这一篇文章通过监控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的监控!!