低级别发现Low-level discovery(LLD)前端
在对主机的监控中,可能出现这样的状况,例如对某主机网卡 eth0 进行监控,能够指定须要监控的网卡是 eth0,而将网卡做为一个通用监控项时,根据主机操做系统的不一样,网卡的名称也不彻底相同,有些操做系统的网卡名称是 eth 开头的,而有些网卡名称是 em、enps0、ens 开头的,遇到这种状况,若是分别针对不一样的网卡名设置不一样的监控项,那就太繁琐了,此时使用 zabbix 的低级发现功能就能够解决这个问题mysql
在 Zabbix 中,支持几种现成的类型的数据项发现,分别是:web
1.文件系统发现
sql
2.网络接口发现服务器
3.SNMP OID 发现网络
4.CPU 核和状态ide
下面是 zabbix 自带的 LLD keyoop
1.vfs.fs.discovery #适用于zabbix agent监控方式spa
2.snmp.discovery #SNMP agent监控方式操作系统
3.net.if.discovery #适用于zabbix agent监控方式
4.system.cpu.discovery #适用于zabbix agent监控方式
能够用 zabbix-get 来查看 key 获取的数据,对于 snmp 不能经过 zabbix-get 来验证,只能在 web 页面中进行配置使用
下面是一个 zabbix-get 的例子:
其中,{#IFNAME} 就是一个宏变量,会返回系统中全部网卡的名字。宏变量能够定义在主机、模板以及全局,宏变量都是大写的。使用宏变量,可使 zabbix 功能更增强大
在自动发现中使用zabbix自带的宏,固定的语法格式为:{#MACRO}
zabbix还支持用户自定义的宏,这些自定义的宏也有特定的语法:{$MACRO}
在 LLD 中,经常使用的内置宏有 {#FSNAME}, {#FSTYPE}, {#IFNAME}, {#SNMPINDEX}, {#SNMPVALUE} 等
{#FSNAME}:表示文件系统名称
{#FSTYPE}:表示文件系统类型
{#IFNAME}:表示网卡名称
{#SNMPINDEX}:会获取 OID 中最后一个值
{#SNMPVALUE}:从返回的值中过滤掉 loopback 接口
宏的级别有多种:其优先级由高到低顺序以下:
1.主机级别的宏优先级最高
2.第一级模式中的宏
3.第二季模式中的宏
4.全局级别的宏
所以,zabbix 查找宏的顺序为:首选查找主机级别的宏,若是在主机级别不存在宏设置,那么 zabbix 就会去模板中看是否设置有宏;若是模板中也没有,将会查找使用全局的宏;如果在各级别都没找到宏,那么将不使用宏
zabbix 自定义监控项
有时候当咱们监控的项目在 zabbix 预约义的key中没有定义时,这时候咱们能够经过编写 zabbix 的用户参数的方法来监控咱们要求的项目 item。形象一点说 zabbix 代理端配置文件中的 User parameters 就至关于经过脚本获取要监控的值,而后把相关的脚本或者命令写入到配置文件中的 User parameter 中,而后 zabbix server 读取配置文件中的返回值经过处理前端的方式返回给用户
一、zabbix agent 端开启 Userparameter 指令
UnsafeUserParameters=1
启用 agent 端自定义 item 功能,设置此参数为1后,就可使用 UserParameter 指令了
UserParameter用于自定义itme。语法格式为:
UserParameter=<key>,<command>
其中:
UserParameter为关键字
key为用户自定义key名字能够随便起
<command>为咱们要运行的命令或者脚本。
一个简单的例子:
UserParameter=ping,echo 1
代理程序程序将会永远的返回 1 当咱们在服务器端添加 item 的 key 为 ping 的时候
稍微复杂的例子:
UserParameter=mysql.ping, /usr/local/mysql/bin/mysqladmin ping|grep -c alive
当咱们执行 mysqladmin -uroot ping 命令的时候若是 mysq 存活要返回 mysqld is alive,咱们经过 grep–c 来计算 mysqld is alive 的个数,若是 mysql 存活着,则个数为 1,若是不存活很,明显 mysqld is alive 的个数为 0,经过这种方法咱们能够来判断 mysql 的存活状态。
当咱们在服务器端添加 item 的 key 为 mysql.ping 时候,对于 zabbix 代理程序,若是 mysql 存活,则状态将返回 1,不然,状态将返回 0
二、让 key 接受参数
让 key 也接受参数的方法使 item 添加时更具有了灵活性
例如,系统预约义 key :
vm.memory.size[<mode>]
其中的 mode 模式就是用户要接受的参数,当咱们填写为 free 时则返回的为内存的剩余大小,若是咱们填入的为 userd 时返回的是内存已经使用的大小
相关语法以下:
UserParameter=key[*],command
其中,Key 的值在主机系统中必须是惟一的,其中 * 表明命令中接受的参数,command 表示命令,也就是客户端系统中可执行的命令
例如:
UserParameter=ping[*].echo $1
若是执行ping[0],那么将一直返回 '0',若是执行ping[aaa],将一直返回 'aaa'