分布式监控系统之Zabbix宏、模板和自定义item
前文我们聊了下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的更多相关文章
- 分布式监控系统之Zabbix基础使用
前文我们了解了分布式监控系统zabbix的相关组件的作用和zabbix的部署,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13997582.html:今天我们 ...
- 分布式监控系统之Zabbix基础
1.为什么要使用监控系统? 我们知道一个系统不管怎么讲它都会出故障,我们为了保证线上业务的最大化的可用性,通常我们要给关键业务做高可用:做高可用的目的是为了让故障发生时,能够有一个备用的解决方案,将故 ...
- 分布式监控系统之Zabbix网络发现
前文我们了解了zabbix的宏,自定义item和模板的相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/14013331.html:今天我们来了解下zab ...
- 分布式监控系统之Zabbix主动、被动及web监控
前文我们了解了zabbix的网络发现功能,以及结合action实现自动发现主机并将主机添加到zabbix hosts中,链接指定模板进行监控:回顾请参考https://www.cnblogs.com/ ...
- 分布式监控系统之Zabbix 使用SNMP、JMX信道采集数据
前文我们了解了zabbix的被动.主动以及web监控相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/14024212.html:今天我们来了解下zabb ...
- 分布式监控系统之Zabbix proxy
前文我们了解了zabbix 使用snmp和jmx信道采集数据的相关使用配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/14029864.html:今天我们来 ...
- Zabbix分布式监控系统实践
https://www.zabbix.com/wiki/howto/install/Ubuntu/ubuntuinstall 环境介绍OS: Ubuntu 10.10 Server 64-bitSer ...
- 分布式监控系统Zabbix3.2给异常添加邮件报警
在前一篇 分布式监控系统Zabbix3.2跳坑指南 中已安装好服务端和客户端,此处客户端是被监控的服务器,可能有上百台服务器.监控的目的一个是可以查看历史状态,可以对比零晨和工作区间数据的对比,以便后 ...
- 分布式监控系统Zabbix3.2监控数据库的连接数
在 分布式监控系统Zabbix3.2跳坑指南 和 分布式监控系统Zabbix3.2给异常添加邮件报警 已经介绍了如何安装以及报警.此篇通过介绍监控数据库的3306端口连接数来了解如何监控其它端口和配置 ...
随机推荐
- 优化Mysql数据库的8个方法
通过8个方法优化Mysql数据库:创建索引.复核索引.索引不会包含含有NULL值的列.使用短索引.排序的索引问题.like语句操作.不要在列上进行运算.不使用NOT IN 和<>操作 1 ...
- Spring Aop 详解二
这是Spring Aop的第二篇,案例代码很详解,可以查看https://gitee.com/haimama/java-study/tree/master/spring-aop-demo. 阅读前,建 ...
- 1. Deep Q-Learning
传统的强化学习算法具有很强的决策能力,但难以用于高维空间任务中,需要结合深度学习的高感知能力,因此延展出深度强化学习,最经典的就是DQN(Deep Q-Learning). DQN 2013 DQN的 ...
- 小白也能看懂的JVM内存区域
前言 最近在准备面试题刷到了JVM这块,作为一个小白,巩固知识点最好的方式就是亲手写出来并分享:相信我的理解,同样是小白的你,一定有很大的帮助.不信,请你往下看! JVM内存区域简介 如果有人问Jav ...
- 常见ascii码记忆
常见字符的ASCII码值如下:空格的ASCII码值为32:数字0到9的ASCII码值分别为48到57:大写字母"A"到"Z"的ASCII码值分别为65到90:小 ...
- PS模式编辑
5.1PS灰度模式 (1)灰度模式:最多包含256种灰度的8位图像. (2)模式含义:不同模式对颜色的分类甚至种类都不一样,可以理解为格式不一样. (3)灰度模式:可以在去RGB格式下去色处理达到利斯 ...
- 一分钟了解"秒杀"系统
关于秒杀,第一反应都是实现起来比较复杂.难点在于:并发读+并发写+设计兜底方案的实现. 比如QQ,虽然数据量很大,但是多数的数据都是细粒度的数据查询,锁冲突比较少:但12306涉及到大量的读写操作,对 ...
- bash xshell 特性
1.tab键补全 2.命令行常用快捷键: ctrl键+ c #取消当前操作 ctrl键+ d #退出当前用户登录 ctrl键+ a #光标移动到光标所在行的行首 ctrl键+ e ...
- Ace editor中文文档
介绍 Ace是一个用JavaScript编写的可嵌入代码编辑器.它与Sublime,Vim和TextMate等本地编辑器的功能和性能相匹配.它可以轻松地嵌入任何网页和JavaScript应用程序中. ...
- uniapp微信小程序canvas绘图插入网络图片不显示
网络图片缓存 在uni中wx可以用uni代替 无区别: 先把要插入的网络图片缓存(getImageInfo); let context = uni.createCanvasContext('first ...