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

  1、什么是宏?

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

  宏的分类

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

  zabbix自定义全局宏

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

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

  自定义主机宏

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

  自定义模板宏

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

  2、自定义监控项

  在上一篇博客我们就了解了什么是监控项,监控项就是定义怎么去采集数据的一个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上使用指定带参监控项也能正常的采集到数据;

  3、模板

  模板是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并成功采集到数据;

分布式监控系统之Zabbix宏、模板和自定义item的更多相关文章

  1. Zabbix分布式监控系统实践

    https://www.zabbix.com/wiki/howto/install/Ubuntu/ubuntuinstall 环境介绍OS: Ubuntu 10.10 Server 64-bitSer ...

  2. 分布式监控系统Zabbix3.2给异常添加邮件报警

    在前一篇 分布式监控系统Zabbix3.2跳坑指南 中已安装好服务端和客户端,此处客户端是被监控的服务器,可能有上百台服务器.监控的目的一个是可以查看历史状态,可以对比零晨和工作区间数据的对比,以便后 ...

  3. 分布式监控系统Zabbix3.2监控数据库的连接数

    在 分布式监控系统Zabbix3.2跳坑指南 和 分布式监控系统Zabbix3.2给异常添加邮件报警 已经介绍了如何安装以及报警.此篇通过介绍监控数据库的3306端口连接数来了解如何监控其它端口和配置 ...

  4. 分布式监控系统Zabbix3.2对数据库的连接数预警

    在前篇分布式监控系统Zabbix3.2监控数据库的连接数 中已经对数据库的端口3306进行了监控,可以看到数据库的连接数历史变化有高有低,那如果达到了数据库连接数的阀值是不是主动通知给运维人员去检查问 ...

  5. 分布式监控系统Zabbix--完整安装记录(7)-使用percona监控MySQL

    前面已经介绍了分布式监控系统Zabbix-3.0.3-完整安装记录(2)-添加mysql监控,但是没有提供可以直接使用的Key,太过简陋,监控效果不佳.要想更加仔细的监控Mysql,业内同学们都会选择 ...

  6. 分布式监控系统Zabbix-3.0.3-完整安装记录(0)

    一.Linux下开源监控系统简单介绍1)cacti:存储数据能力强,报警性能差2)nagios:报警性能差,存储数据仅有简单的一段可以判断是否在合理范围内的数据长度,储存在内存中.比如,连续采样数据存 ...

  7. 分布式监控系统Zabbix-3.0.3-完整安装记录(1)

    分布式监控系统Zabbix-3.0.3的安装记录 环境说明zabbix-server:192.168.1.30     #zabbix的服务端(若要监控本机,则需要配置本机的Zabbix agent, ...

  8. 开源监控系统中 Zabbix 和 Nagios 哪个更好?

    监控平台的话,各有优劣,但基本都可以满足需求.等达到一定监控指标后,发现,最困难的是监控项目的管理. CMDB中小规模(服务器<=1k):Zabbix大规模(1k>=服务器<=10k ...

  9. 分布式监控系统Zabbix-3.0.3-完整安装记录(7)-使用percona监控MySQL

    前面已经介绍了分布式监控系统Zabbix-3.0.3-完整安装记录(2)-添加mysql监控,但是没有提供可以直接使用的Key,太过简陋,监控效果不佳.要想更加仔细的监控Mysql,业内同学们都会选择 ...

  10. Python之路,Day20 - 分布式监控系统开发

    Python之路,Day20 - 分布式监控系统开发   本节内容 为什么要做监控? 常用监控系统设计讨论 监控系统架构设计 监控表结构设计 为什么要做监控? –熟悉IT监控系统的设计原理 –开发一个 ...

随机推荐

  1. Android一 流

    补充Java知识:流 java.io 四个抽象类: 字节流:InputStream OutputStream 字符流:Reader Writer 站在程序角度上,输入(读入到程序)输出(从程序写出) ...

  2. openerp学习笔记 webkit 打印

    1.webkit 打印需要安装的支持模块 请首先安装 Webkit 报表引擎(report_webkit),再安装 Webkit 报表的支持库(report_webkit_lib),该模块讲自动安装和 ...

  3. iptables 下开放ftp

    这两天在给客户安装服务器时也顺便给他们使用iptables,不用不知道,一用才发现iptables还有很多东西可以学的,比如开放ftp.iptables 的filter表的INPUT链的默认策略设为了 ...

  4. nfs nobody,nobody 需要在nfs客户端修改从nfs服务器端共享过来的目录怎么办?

    1,加入我们使用nfs共享安装oracle, 安装oracle需要修改base,data,orainventory等等目录及自目录的属主及权限,一般会继承nfs客户端目录的权限及属主 groupadd ...

  5. 改动ubuntu/linux文件夹显示颜色

    通过secureCRT登陆linux,假设背景颜色选为黑色,非常可能在使用ls命令时看不清楚文件夹名,这时候我们能够通过一个简单的方式将文件夹变为一个显眼的颜色,比如"黄色". [ ...

  6. 使用百度富文本编辑器UEditor碰到的问题

    前面使用的是kindEditor,但是发现这个已经不再维护,并且bug不少,而我又不会改,哈哈,所以我就放弃了. 原来想过要用百度的这个UEditor,但是在配置的时候遇到了很多问题,基本上加载不出来 ...

  7. easyui+ajax获取同表关联的数据

    easyui是我们常用的前端框架之一,easyui的使用使得前端页面更加美观.为了能够使用combobox,ajax必须同步. 该小程序是使用ssm框架,对数据库的数据进行查询,所以url对应着map ...

  8. CSS三栏布局

    一.绝对定位 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> < ...

  9. python显示多个图表

    plt.figure(figsize=(64,64)) 每次都有创建新的,否则会覆盖 plt.subplot(121) plt.imshow(img,'gray') plt.title('origin ...

  10. 正睿 2019 省选附加赛 Day1 T1 考考试

    比较奇怪的一个枚举题. 注意到10=2*5,所以10^k的二进制表示一定恰好在末尾有k个0. 考虑从小到大去填这个十进制数. 填的时候记录一下当前的二进制表示. 每次尝试去填0或者10^k. 如果要填 ...