低级别发现Low-level discovery(LLD)

在对主机的监控中,可能出现这样的情况,例如对某主机网卡 eth0 进行监控,可以指定需要监控的网卡是 eth0,而将网卡作为一个通用监控项时,根据主机操作系统的不同,网卡的名称也不完全相同,有些操作系统的网卡名称是 eth 开头的,而有些网卡名称是 em、enps0、ens 开头的,遇到这种情况,如果分别针对不同的网卡名设置不同的监控项,那就太繁琐了,此时使用 zabbix 的低级发现功能就可以解决这个问题

在 Zabbix 中,支持几种现成的类型的数据项发现,分别是:

1.文件系统发现

2.网络接口发现

3.SNMP OID 发现

4.CPU 核和状态

下面是 zabbix 自带的 LLD key

1.vfs.fs.discovery              #适用于zabbix agent监控方式

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 的例子:

skill——zbbix(低级别发现 与 zabbix 自定义监控项)_自定义

其中,{#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 读取配置文件中的返回值通过处理前端的方式返回给用户

1、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

2、让 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'