分布式系统监视zabbix讲解六之自定义监控项--技术流ken

时间:2023-02-06 20:36:21

 

概述

Zabbix支持许多在多种情况下使用宏。宏是一个变量,由如下特殊语法标识:

{MACRO} 

根据在上下文中, 宏解析为一个特殊的值。

有效地使用宏可以节省时间,并使Zabbix变地更加高效。

在一个的典型用途中,宏可以用于模板中。因此,模板的触发器可能命名为“Processor load is too high on {HOST.NAME}”。当这个模板应用与主机(如 Zabbix Server )时,并且当触发器展示在监控页面上时,触发器的名称讲解析为“Processor load is too high on Zabbix server”。

宏可以在监控项键值参数中使用。宏只能用在监控项键值参数的一部分中,例如 item.key[server_{HOST.HOST}_local] 。双引号参数不是必须的,因为Zabbix将处理任何模糊不清的特殊参数(如果这些参数存在于已解析的宏中)。

 

用户宏

概述

除了支持开箱即用的宏之外,Zabbix 还支持更灵活的用户宏。

用户宏可以在全局、模板和主机级别进行定义。这些宏具有一个特殊的语法:

{$MACRO}

用户宏可被用于:

  • 监控项名称;
  • 监控项键值参数;
  • 触发器名称和描述;
  • 触发器表达式参数和常量;
  • 许多其他位置;

宏名称中允许使用以下字符:A-Z , 0-9 , _ , . 。

Zabbix 根据以下优先级解析宏:

  1. 主机级别的宏 (首先检查);
  2. 为主机的第一级别模板定义的宏(即,直接链接到主机的模板),按照模板 ID 来排序;
  3. 为主机的第二级别模板定义的宏,按照模板 ID 来排序;
  4. 为主机的第三级别模板定义的宏,按照模板ID来排序,等;
  5. 全局宏 (最后检查)。

换言之,如果一个主机不存在一个宏, Zabbix 将会尝试在级别递增的主机模板中找到它,如果仍然找不到,那么将会使用全局宏(如果全局宏存在的话)。

如果 Zabbix不能找到宏, 那么宏将不能被解析。

如果要定义用户宏,请转到Zabbix的前端页面的如下位置:

  • 对于全局宏,请访问  管理 → 常规 → 右上角下拉菜单选择 “宏” 
  • 对于主机和模板级别的宏,请打开主机或模板属性并查看   标签页面。

认识userparameter_mysql.conf文件

这个文件在zabbix客户端的子目录下,如果你想要自己来设置监控项的话,参考这个文件即可。

[root@ken ~]# ls /etc/zabbix/zabbix_agentd.d/
testuser.conf             userparameter_mysql.conf  

现在我们来打开它,看一下具体内容

[root@ken ~]# vim /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
# For all the following commands HOME should be set to the directory that has .my.cnf file with password information.

# Flexible parameter to grab global variables. On the frontend side, use keys like mysql.status[Com_insert].
# Key syntax is mysql.status[variable].
UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/var/lib/zabbix mysql -N | awk '{print $$2}'

# Flexible parameter to determine database or table size. On the frontend side, use keys like mysql.size[zabbix,history,data].
# Key syntax is mysql.size[<database>,<table>,<type>].
# Database may be a database name or "all". Default is "all".
# Table may be a table name or "all". Default is "all".
# Type may be "data", "index", "free" or "both". Both is a sum of data and index. Default is "both".
# Database is mandatory if a table is specified. Type may be specified always.
# Returns value in bytes.
# 'sum' on data_length or index_length alone needed when we are getting this information for whole database instead of a single table
UserParameter=mysql.size[*],bash -c 'echo "select sum($(case "$3" in both|"") echo "data_length+index_length";; data|index) echo "$3_length";; free) echo "data_free";; esac)) from information_schema.tables$([[ "$1" = "all" || ! "$1" ]] || echo " where table_schema=\"$1\"")$([[ "$2" = "all" || ! "$2" ]] || echo "and table_name=\"$2\"");" | HOME=/var/lib/zabbix mysql -N'

UserParameter=mysql.ping,HOME=/var/lib/zabbix mysqladmin ping | grep -c alive
UserParameter=mysql.version,mysql -V

可以看到这个文件里面只有四行是生效的,其余的都已经被注释掉了。现在我们来过滤出来这几行

[root@ken ~]# cp /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf{,bak} #对文件做一个备份
[root@ken ~]# grep -E -v '^#|^$' /etc/zabbix/zabbix_agentd.d/userparameter_mysql.confbak > /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf #过滤出注释行和空白行

[root@ken
~]# vim /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/var/lib/zabbix mysql -N | awk '{print $$2}' #查看数据库状态 UserParameter=mysql.size[*],bash -c 'echo "select sum($(case "$3" in both|"") echo "data_length+index_length";; data|index) echo "$3_length";; free) echo "data_free";; esac)) from information_schema.tables$([[ "$1" = "all" || ! "$1" ]] || echo " where table_schema=\"$1\"")$([[ "$2" = "all" || ! "$2" ]] || echo "and table_name=\"$2\"");" | HOME=/var/lib/zabbix mysql -N' #查看数据库空间大小 UserParameter=mysql.ping,HOME=/var/lib/zabbix mysqladmin ping | grep -c alive #查看数据库是否在线 UserParameter=mysql.version,mysql -V #查看数据库版本信息

 

自定义监控项目

 现在我们已经了解了整个文件的书写格式,即

1. UserParameter=key,command

2.UserParameter=key[*],command

两种格式的区别即第一个不能接受用户参数,第二个可以接受变量,更加灵活。

现在我们一一来实现,直观感受下效果。

 

1. UserParameter=key,command 应用示例

第一步:进入到子目录下,创建一个testyserp.conf (文件名无所谓,你也可以把你自己设置的写进上面那个文件中,都是可以的。)

[root@ken ~]# cd /etc/zabbix/zabbix_agentd.d/
[root@ken zabbix_agentd.d]# touch testuserp.conf

第二步:写入你要监控的内容,这里我监控的是内存的总量,内存的使用量,以及内存剩余量。

[root@ken zabbix_agentd.d]# vim testuserp.conf
UserParameter=check.totalmem,free -m| awk -F ' +' 'NR==2{print $2}'
UserParameter=check.usedmem,free -m| awk -F ' +' 'NR==2{print $3}'
UserParameter=check.freemem,free -m| awk -F ' +' 'NR==2{print $4}'

第三步:重启zabbix客户端

[root@ken zabbix_agentd.d]# systemctl restart zabbix-agent

第四步:在zabbix中添加监控项,configure>hosts>items>create item,上面文件中定义的三个key一一复制进去,点击add保存即可,创建三个监控项

分布式系统监视zabbix讲解六之自定义监控项--技术流ken

分布式系统监视zabbix讲解六之自定义监控项--技术流ken

分布式系统监视zabbix讲解六之自定义监控项--技术流ken

第五步:查看。monitoring>latest data>select,选择你的组即可查看

分布式系统监视zabbix讲解六之自定义监控项--技术流ken

你可以把它们显示在一张图形中 前面白色方框内选中>display graph

分布式系统监视zabbix讲解六之自定义监控项--技术流ken

分布式系统监视zabbix讲解六之自定义监控项--技术流ken

 

2.UserParameter=key[*],command应用示例

 第一步:还是进入到客户端的子目录下,创建一个文件用来存储自定义的监控项

[root@ken ~]# cd /etc/zabbix/zabbix_agentd.d/
[root@ken zabbix_agentd.d]# touch test.conf

第二步:写入我们想要的监控项目。写成如下格式,这样我们就可以来接收参数了。

[root@ken zabbix_agentd.d]# vim test.conf
 UserParameter=check.meminfo[*],cat /proc/meminfo | awk -F " +" '/$1/{print $$2}'

第三步:重启zabbix-agent客户端

[root@ken zabbix_agentd.d]# systemctl restart zabbix-agent

 

第四步:现在把check.meminfo这个key写进zabbix的key当中。

监控SwapTotal总量

分布式系统监视zabbix讲解六之自定义监控项--技术流ken

监控SwapFree

分布式系统监视zabbix讲解六之自定义监控项--技术流ken

 添加完之后就可以去monitoring > latest data > select 你的application

分布式系统监视zabbix讲解六之自定义监控项--技术流ken

 选中,选择display graph.查看图形界面

分布式系统监视zabbix讲解六之自定义监控项--技术流ken

 分布式系统监视zabbix讲解六之自定义监控项--技术流ken

 

结言

学会了上面的自定义监控,想要监控什么你是不是都可以做到了那? 只要记住格式,会使用命令来获取你想要的结果,即可自定义监控项,以数字或者图形化界面显示出来。