zoukankan      html  css  js  c++  java
  • 分布式系统监视zabbix讲解六之自定义监控项--技术流ken

     

    概述

    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保存即可,创建三个监控项

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

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

    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总量

    监控SwapFree

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

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

     

    结言

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

  • 相关阅读:
    xml和json笔记
    Ajax开发技术介绍与实战练习
    MATLAB学习(4)——min
    MATLAB学习(2)——zeros
    MATLAB学习(1)——ordfilt2
    vim的基本命令
    VS2015 闪退问题
    Error (10028): Can't resolve multiple constant drivers for net "mydata[14]" at sd_read.v(207)
    自动识别设备
    Internal Error: Sub-system: CUT, File: /quartus/db/cut/cut_post_syn_util.cpp, Line: 709 name_to_atom_map[iname] == 0
  • 原文地址:https://www.cnblogs.com/kenken2018/p/9908306.html
Copyright © 2011-2022 走看看