分布式监控系统之Zabbix宏、模板和自定义item

  前文咱们聊了下zabbix的基础使用,包括主机的添加、监控项、触发器、action以及告警通知的配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/14007342.html;今天咱们来了解下zabbix的宏、模板和自定义监控项的相关话题;html

  一、什么是宏?node

  简单讲宏就是一个字符串变量,做用和变量做用很相似;不一样的是宏它是一个常量,一般是一个固定值的替代形式;宏主要做用是方便咱们配置一些常常须要修改的值,用宏替换比较方便;好比咱们要监控700台nginx,其中nginx的端口有时候监听在80,有时候监听在8080,若是不使用宏,那么对应端口信息就是一个数字,若是端口发生变化咱们要修改700次;有了宏咱们只须要修改对应宏的值便可;nginx

  宏的分类git

  在zabbix中宏份内建宏和自定义宏,所谓内建宏就是zabbix中原生就有的宏,咱们能够直接调用;自定义宏就是咱们本身按照需求定义的一个宏;除了按照这种方式划分宏,咱们也能够按照宏的做用范围来划分;好比定义在某一个主机之上,其做用域仅对该主机生效的宏咱们叫主机宏,这种宏做用范围小,但优先级很高;除了主机宏还有模板宏,全局宏;所谓模板宏就是定义在某个模板上的宏,其做用域是针对连接了该模板的全部主机,其优先级要略小主机宏;全局宏是指做用整个zabbix的宏,其优先级最小,生效范围是zabbix上的全部调用了该宏主机;在zabbix中内建宏的格式是{全大写字母},咱们在引用时,直接使用大括号+宏名就好;在上一篇博客中,咱们定义脚本媒介时,就用到了三个内建的宏,{ALERT.SENDTO},这个就是一个内建宏,它表明接收邮件的地址;内建宏在官方文档中有很详细的说明,若是用到能够去官方文档查看https://www.zabbix.com/documentation/4.0/manual/appendix/macros/supported_by_location;自定义宏在定义和引用和内建宏稍有不一样,自定义宏在定义和引用都须要用在大括号里用$符号+宏名;好比定义一个nginx端口的宏,咱们能够写成{$NGINX_PORT};github

  zabbix自定义全局宏web

  提示:在Administration--->General 而后选择下拉菜单找到Macros,点击进去进入全局宏的定义页面;redis

  提示:这样就定义了两个全局宏,咱们在添加主机监控项就能够直接调用对应的宏就能够了;shell

  自定义主机宏bash

  提示:在主机列表中找到对应主机,而后点击进入编辑主机信息的页面,找到Macros;app

  自定义模板宏

  提示:在configuration--->Templates中,找对应要定义模板宏的模板,点击进入编辑模板的界面,找到Macros,添加对应的宏便可;最后点击update便可;

  二、自定义监控项

  在上一篇博客咱们就了解了什么是监控项,监控项就是定义怎么去采集数据的一个key;可是咱们前边用到都是内建的监控项,在zabbix上内建的监控项都是针对很通用的指标数据;在必定程度上不是很知足本身业务的监控需求,此时咱们就须要自定义监控项来采集咱们须要的指标数据;咱们在使用监控项时,其实就是在使用一种方法或程序经过zabbix server和agent通讯,在被监控主机上执行咱们选定的程序或方法,程序和方法执行后获得的数据,就是监控项采集的数据,而后经过zabbix agent将采集的数据发送或响应给zabbixserver;不难理解就是在被监控端执行一段代码,而后将代码返回的结果经过agent发送或响应给zabbix server完成一次数据采集;那么咱们自定义监控项就是来自定义怎么获取对应指标数据的方法;而后给这个获取对应指标数据的方法或程序用一个key表示,在zabbix上直接调用key,zabbix就会发指令给agent执行对应key说对应的程序或方法来采集数据;在zabbix中,自定义监控项咱们须要本身手动写脚本或命令去获取指定的数据;而后经过配置文件的方式告诉agent;

  自定义监控项的格式

  在zabbix agent配置文件中以UserParameter=<key>,<shell command>格式来自定义监控项;一般咱们都是将自定义监控项手动的写一个以.conf结尾的文件中,而后经过zabbix agent配置文件中的Include指定将其导入agent配置生效;默认/etc/zabbix/zabbix_agentd.d/目录下的全部以.conf结尾的文件都是被导入的;

  示例:自定义监控项采集node04上的内存空闲空间

[root@node04 ~]# cat /etc/zabbix/zabbix_agentd.d/mem.conf
UserParameter=node04.os.Mem.free,free |awk '/^Mem/{print $4}' 
[root@node04 ~]# 

  提示:以上配置表示自定义监控项的key为node04.os.Mem.free;对应采集数据的方法是执行后面对命令;

  重启zabbix agent 

[root@node04 ~]# systemctl restart zabbix-agent.service 
[root@node04 ~]# ss -tnl
State      Recv-Q Send-Q           Local Address:Port                          Peer Address:Port              
LISTEN     0      128                          *:80                                       *:*                  
LISTEN     0      128                          *:22                                       *:*                  
LISTEN     0      100                  127.0.0.1:25                                       *:*                  
LISTEN     0      128                          *:10050                                    *:*                  
LISTEN     0      128                         :::80                                      :::*                  
LISTEN     0      128                         :::22                                      :::*                  
LISTEN     0      100                        ::1:25                                      :::*                  
[root@node04 ~]# 

  提示:重启若是对应agent监听端口正常处于监听,说明咱们的配置文件没有问题;

  在zabbix server上安装zabbix-get工具

[root@node03 ~]# yum install -y zabbix-get

  验证:在zabbix server上使用zabbix_get命令看看是否可以使用对应的key获取到数据呢?

[root@node03 ~]# zabbix_get -s 192.168.0.44 -p 10050 -k 'node04.os.Mem.free'
1594992
[root@node03 ~]# zabbix_get -s 192.168.0.44 -p 10050 -k 'node04.os.Mem.free'
1595248
[root@node03 ~]# zabbix_get -s 192.168.0.44 -p 10050 -k 'node04.os.Mem.free'
1595132
[root@node03 ~]# zabbix_get -s 192.168.0.44 -p 10050 -k 'node04.os.Mem.free'
1595008
[root@node03 ~]# 

  提示:能够看到在zabbix sever上可以使用zabbix_get工具获取到node04上咱们自定义监控项的值;

  配置zabbix 使用自定义监控项,周期性的检测

  提示:调用自定义监控项,直接写对应的key便可;

  提示:能够看到对应的监控项已经采集到数据了;

  自定义带参监控项

  所谓带参监控项指使用一个key,传递不一样的参数,采集不一样的指标;

  示例:根据传递不一样参数,来采集内存总量、空闲量、buffers等值

[root@node04 ~]# cat /etc/zabbix/zabbix_agentd.d/mem.conf
UserParameter=node04.os.Mem.free,free |awk '/^Mem/{print $4}' 
UserParameter=os.mem[*], awk '/^$1/ {print $$2}' /proc/meminfo 
[root@node04 ~]#

  提示:这里须要说明一点,在配置文件中使用$1表示引用传递给key的第一个参数,那么对应awk中的$1就须要写成$$1来表示awk自身的参数;以上配置表示使用os.mem这个key在中括号里支持参数,传递的参数将会被后面定义的命令中的$1引用;

  重启zabbix-agent,让其配置生效

[root@node04 ~]# systemctl restart zabbix-agent.service 
[root@node04 ~]# ss -tnl
State      Recv-Q Send-Q           Local Address:Port                          Peer Address:Port              
LISTEN     0      128                          *:80                                       *:*                  
LISTEN     0      128                          *:22                                       *:*                  
LISTEN     0      100                  127.0.0.1:25                                       *:*                  
LISTEN     0      128                          *:10050                                    *:*                  
LISTEN     0      128                         :::80                                      :::*                  
LISTEN     0      128                         :::22                                      :::*                  
LISTEN     0      100                        ::1:25                                      :::*                  
[root@node04 ~]# 

  验证:在zabbix server 上使用zabbix_get来获取指定key是否可以获取到数据?

[root@node03 ~]# zabbix_get -s node04 -p 10050 -k 'os.mem[MemTotal]'
1867048
[root@node03 ~]# zabbix_get -s node04 -p 10050 -k 'os.mem[MemFree]' 
1595552
[root@node03 ~]# zabbix_get -s node04 -p 10050 -k 'os.mem[Buffers]'
2108
[root@node03 ~]# 

  提示:能够看到在zabbix server上使用zabbix_get工具,给key传递不一样的参数,获取到的数据也不尽相同;咱们就能够基于这个key传递不一样的参数来采集对应的指标数据;

  验证:在zabbix上使用咱们自定义带参监控项周期性采集数据,看看是否可以采集到数据?

  提示:添加item对应key和参数便可;

  提示:能够看到在zabbix上使用指定带参监控项也能正常的采集到数据;

  三、模板

  模板是zabbix中快速添加配置监控的一种机制;它省去了咱们大量重复的配置item,触发器,graph等等操做;它是一个逻辑的概念,只有当模板连接到某个主机才会生效;在zabbix也内建了不少模板,咱们添加主机时,直接链接某个模板,对应主机就会继承链接的模板上定义的全部监控配置;模板能够导出和导入,也能够模板中嵌套模板;

  模板的使用

  连接某个模板到node04

  提示:在主机列表中找到对应主机,点击对应主机名称进入编辑主机配置界面,找到Templates子菜单,选择要连接的模板,点击add后再点击updete便可;

  提示:能够看到连接了某个模板之后,对应主机上就多了不少item,触发器和graphs等等,同时在templates下也显示了连接的某班名称;

  建立模板

  提示:在configuration--->Templates菜单下找到create template按钮,点击进入建立模板的界面;

  提示:填写好对应的名称和组点击add,一个模板就建立好了;

  提示:建立好一个空模板就有点相似咱们添加了一个主机,上面没有任何监控配置,咱们能够像在某个主机上定义监控项,触发,graph同样的操做在模板上定义监控项,触发器等等;

  取消模板连接

  提示:找到对应主机,进入编辑主机配置界面,进入templates子菜单,选择对应模板的操做;这里有unlink和unlink and clear两个操做,unlink表示取消连接模板,但以前收集的数据并不会删除,第二个unlink add clear表示取消连接的同时删除以前收集的数据;

  导入模板

  在zabbix share这个网站上有不少模板,咱们能够选择一款模板下载下来导入到本地使用

  示例:找模板监控redis的模板

  提示:找到对应的代码托管地址,而后点击进入对应地址下载模板和agent配置文件;

  提示:下载上面两个文件,.conf文件是agent配置文件,在对应主机上下载放在agentd.d目录下;模板文件是.xml格式的文件,下载到本地上传至zabbix上;

  在node04上安装redis,telnet

[root@node04 ~]# yum install redis telnet -y

  修改redis配置文件,让其监听在node04的全部可用地址上

[root@node04 ~]# grep "^bind" /etc/redis.conf
bind 0.0.0.0
[root@node04 ~]# 

  启动redis

[root@node04 ~]# systemctl start redis
[root@node04 ~]# ss -tnl
State      Recv-Q Send-Q           Local Address:Port                          Peer Address:Port              
LISTEN     0      128                          *:6379                                     *:*                  
LISTEN     0      128                          *:80                                       *:*                  
LISTEN     0      128                          *:22                                       *:*                  
LISTEN     0      100                  127.0.0.1:25                                       *:*                  
LISTEN     0      128                          *:10050                                    *:*                  
LISTEN     0      128                         :::80                                      :::*                  
LISTEN     0      128                         :::22                                      :::*                  
LISTEN     0      100                        ::1:25                                      :::*                  
[root@node04 ~]# 

  将配置文件导入到zabbix agent配置目录下

[root@node04 ~]# wget https://raw.githubusercontent.com/cuimingkun/zbx_tem_redis/master/userparameter_redis_lld_plus.conf -O /etc/zabbix/zabbix_agentd.d/userparameter_redis_lld_plus.conf
--2020-11-20 23:16:36--  https://raw.githubusercontent.com/cuimingkun/zbx_tem_redis/master/userparameter_redis_lld_plus.conf
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.76.133
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|151.101.76.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1717 (1.7K) [text/plain]
Saving to: ‘/etc/zabbix/zabbix_agentd.d/userparameter_redis_lld_plus.conf’

100%[======================================================================>] 1,717       --.-K/s   in 0.08s   

2020-11-20 23:17:06 (20.8 KB/s) - ‘/etc/zabbix/zabbix_agentd.d/userparameter_redis_lld_plus.conf’ saved [1717/1717]

[root@node04 ~]# ll /etc/zabbix/zabbix_agentd.d/userparameter_redis_lld_plus.conf
-rw-r--r-- 1 root root 1717 Nov 20 23:17 /etc/zabbix/zabbix_agentd.d/userparameter_redis_lld_plus.conf
[root@node04 ~]# 

  修改zabbix agent配置文件和unit file,容许zabbix agent 以root身份运行

[root@node04 ~]# grep "^AllowRoot" /etc/zabbix/zabbix_agentd.conf                                               
AllowRoot=1
[root@node04 ~]# grep "^[User|Group]" /etc/systemd/system/multi-user.target.wants/zabbix-agent.service          
User=root
Group=root
[root@node04 ~]# 

  重启zabbix_agent

[root@node04 ~]# systemctl daemon-reload 
[root@node04 ~]# systemctl restart zabbix-agent.service 
[root@node04 ~]# ss -tnl
State      Recv-Q Send-Q           Local Address:Port                          Peer Address:Port              
LISTEN     0      128                          *:6379                                     *:*                  
LISTEN     0      128                          *:80                                       *:*                  
LISTEN     0      128                          *:22                                       *:*                  
LISTEN     0      100                  127.0.0.1:25                                       *:*                  
LISTEN     0      128                          *:10050                                    *:*                  
LISTEN     0      128                         :::80                                      :::*                  
LISTEN     0      128                         :::22                                      :::*                  
LISTEN     0      100                        ::1:25                                      :::*                  
[root@node04 ~]# 

  在zabbix web gui导入模板

  提示:在configuration--->Templates菜单下找到Import,点击进入导入模板的界面;

  提示:选择下载的模板,而后点击Import便可;

  查看导入的模板

  提示:能够看到咱们的模板已经导入成功;

  连接导入的模板到node04,看看是否可以采集到对应的数据呢?

  提示:能够看到对应主机连接模板之后,多了两个自动发现的配置;其余的监控项,触发器都没有变,这是由于它这个模板是自动发现的配置,等它扫描完配置,对应的监控配置都会自动应用上去;

  查看是否可以采集到数据呢?

  提示:这个扫描配置和采集数据的过程稍微有点长,要耐心多等一会;

  如今查看主机列表,看看对应监控项和其余监控配置是否有变化呢?

  提示:能够看到如今就多了不少监控配置;好了从互联网下载的模板已经成功导入到zabbix并成功采集到数据;

相关文章
相关标签/搜索