zabbix快速创建筛选(sql操作)

    公司由于大量业务调整,尤其是服务器功能和性能的转变,监控也跟随这变化,其中操作最为繁琐的当数zabbix筛选(相信各位从页面添加的都深感痛苦)于是有了本文。

    本文采用的方法是sql操作(由于本人不会php等,无法写程序直接调用官方api,所以,嘿嘿,不解释,同时也希望各路大大多多交流。)

    本文所述的脚本属于beta版,其中很多部分可以和sql,php,python进行结合,各位可以进行多种尝试。如果该脚本有任何bug,请及时联系我,同时我也会针对该版本进行更新,还望各位多多支持。

——————————————-Bash内容————————————————

#!/bin/sh

:<< Statement
Function : To Quick Create zabbix Screen
Version : 1.0-beta
Mail : 714810243@qq.com
Date : 2015-12-16
Bug     : 1.该脚本仅适用于zabbix-2.0.8(开发环境是该版本,其他版本没测试过,但是按照官方文档说明,应该适用到2.4.x >_< )
       2.该脚本目前只适用于传输一个key,无法支持多个,同一个分组必须要都含有该key值,如果无该key,那么,无key的机器将无法加入筛选
       3.目前该脚本仅仅适用于有图形的选项,对于简单图形等,不支持

       4.本文中的函数是准备用来进行第二版的扩展,如果不需要,可以删除

        该脚本可以和数据库,php等结合使用,目前是beta版,其功能还有待开发与完善。
Statement

[ -n ${DEBUG:-''} ] && set -v

DBUser=root
DBPasswd=sy381
DBHost=localhost

HostGroupName=$1
ScreenName=$2
Screenkey=$3

#插入screen
function InsertScreen (){
#查询组中主机数量,以便插入行和列的信息
Host_Num=`/usr/local/mysql-5.1.56/bin/mysql -u${DBUser} -p${DBPasswd} -h${DBHost} -e"
    SELECT
        count(*)
    FROM
        zabbix.hosts,
        zabbix.groups,
        zabbix.hosts_groups
    WHERE
        zabbix.hosts.hostid = zabbix.hosts_groups.hostid
    AND zabbix.hosts_groups.groupid = zabbix.groups.groupid
    AND zabbix.groups.name = '$HostGroupName';" | awk 'NR==2{print}'`

if [ $[$Host_Num%2] != '0' ] ;then
    LineNum=$[$Host_Num/2+1]
else
    LineNum=$[$Host_Num/2]
fi

LastScreenId=`/usr/local/mysql-5.1.56/bin/mysql -u${DBUser} -p${DBPasswd} -h${DBHost} -e"
    SELECT
        zabbix.screens.screenid
    FROM
        zabbix.screens
    ORDER BY
        zabbix.screens.screenid DESC LIMIT 1;" | awk 'NR==2{print}'`
    
ScreenId=$[$LastScreenId+1]

/usr/local/mysql-5.1.56/bin/mysql -u${DBUser} -p${DBPasswd} -h${DBHost} -e"
    INSERT INTO zabbix.screens (
        zabbix.screens.screenid,
        zabbix.screens.name,
        zabbix.screens.hsize,
        zabbix.screens.vsize
    )
    VALUES
        ('$ScreenId','$ScreenName', '2', '${LineNum}');"

}

#插入screen中的items
function InsertScreenitems (){

ScreenGrap=`/usr/local/mysql-5.1.56/bin/mysql -u${DBUser} -p${DBPasswd} -h${DBHost} -e"
        SELECT
            zabbix.graphs.graphid
    FROM
        zabbix.hosts_groups,
        zabbix.hosts,
        zabbix.groups,
        zabbix.items,
        zabbix.graphs_items,
        zabbix.graphs
    WHERE
        zabbix.groups.groupid = zabbix.hosts_groups.groupid
    AND zabbix.hosts_groups.hostid = zabbix.hosts.hostid
    AND zabbix.hosts.hostid = zabbix.items.hostid
    AND zabbix.graphs_items.itemid = zabbix.items.itemid
    AND zabbix.graphs.graphid = zabbix.graphs_items.graphid
    AND zabbix.groups.name = '$HostGroupName'
    AND ( zabbix.items.key_ LIKE '%$Screenkey%')  GROUP BY zabbix.graphs.graphid;"| awk 'NR!=1{print}'`

Screennum=`/usr/local/mysql-5.1.56/bin/mysql -u${DBUser} -p${DBPasswd} -h${DBHost} -e"
    SELECT
        zabbix.screens.screenid
    FROM
        zabbix.screens
    WHERE
        zabbix.screens.name = '$ScreenName';"| awk 'NR!=1{print}'`

x=0
y=0
        
for screenresource in $ScreenGrap ; do
#    echo $screenresource
    LastScreenitemsnum=`/usr/local/mysql-5.1.56/bin/mysql -u${DBUser} -p${DBPasswd} -h${DBHost} -e"
        SELECT
            zabbix.screens_items.screenitemid
        FROM
            zabbix.screens_items
        ORDER BY
            zabbix.screens_items.screenitemid DESC LIMIT 1;"| awk 'NR==2{print}'`
            
    Screenitemsnum=$[$LastScreenitemsnum+1]
    
    x=$[$x%2]
#    echo "$Screenitemsnum $Screennum 0 $screenresource 500 100 $x $y 1 1 0 0 0 0 0 0"
    /usr/local/mysql-5.1.56/bin/mysql -u${DBUser} -p${DBPasswd} -h${DBHost} -e"
    INSERT INTO
        zabbix.screens_items
    VALUES
        ('$Screenitemsnum','$Screennum','0','$screenresource','500','100','$x','$y','1','1','0','0','0','0','','0','0');"
    y=$[$y+$x]
    x=$[$x+1]
    
done

}
InsertScreen
InsertScreenitems
———————————————————————————–

使用方法  : sh shellname.sh  groupname  screenname  itemskey

            ex:  sh addscreen.sh 01-银行业务03  01-银行业务03-流量  bond0

那么,该脚本会生成名为01-银行业务03-流量的筛选,并将01-银行业务03分组中的所有机器(有bond0)的bond0网卡流量纳入筛选中。

欢迎各位多多交流和转载,转载还请保留出处,>.<


原创文章,作者:graysky,如若转载,请注明出处:http://www.178linux.com/10127

(1)
grayskygraysky
上一篇 2015-12-16
下一篇 2015-12-18

相关推荐

  • LAMP系列之(php-fpm模式)分布三台机器部署

    LAMP系列之(php-fpm模式)分布三台机器部署 现在我们需要做一个实验,就是把apache , php-fpm , mariadb ,分别安装在3台机器上,协同工作具体如下: 192.168.42.150 apache 192.168.42.151 php-fpm 192.168.42.152 mariadb 关闭防火墙 关闭selinux 分别给这3…

    Linux干货 2017-06-03
  • N21-北京-泥人-马哥教育网络班21期+第一周课程练习

    马哥教育网络班21期  第一周课程练习 一、计算机的组成 1、计算机主要由以下几部分组成:运算器 控制器 存储器(编址存储单元)、 输入、输出设备   2、运算器负责运算:只能做二进制的数学、逻辑运算, 控制器:控制由哪得到数据,放到哪去,协调运算器、存储器、输入、输出等设备 运算器、控制器整合到一起就是常说的中央处理器,也就是CPU。 …

    Linux干货 2016-07-12
  • 第十七周 作业–结合图形描述lvs原理

        LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。   Lvs有三种模式分别是lvs-nat、lvs-dr、lvs-tun。下面分别介绍lvs-nat、lvs-dr…

    Linux干货 2016-12-07
  • 通络通信

    网络详解: 网络的osi层次结构: 物理层: 以太网规定,连入网络的所有设备,都必须具有”网卡”接口。数据包必须是从一块网卡,传送到另一块网卡。 网卡的地址,就是数据包的发送地址和接收地址,这叫做MAC地址。 每块网卡出厂的时候,都有一个全世界独一无二的MAC地址,长度是48个二进制位,通常用12个十六进制数表示。 前6个十六进制数是厂商编号,后6个是该厂商…

    Linux干货 2016-09-02
  • Linux bash 特性、相关变量以及编程

    Linux bash 特性、相关变量以及编程 bash 特性之:命令hash 缓存此前执行过的命令(都是外部命令,不记录内嵌命令),加速命令的执行 hash    -d 清空指定命令记录   -r 直接清空hash表 bash 特性之一: 变量 程序=指令+数据 指令是有文件提供 数据是由…

    Linux干货 2016-12-29
  • 马哥教育网络班21期+第4周课程练习

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 [root@centos ~]# cp -r /etc/skel /home/tuser1 [root@centos ~]# ls -aldh&…

    Linux干货 2016-07-29

评论列表(3条)

  • stanley
    stanley 2015-12-19 20:02

    脚本写的不错,赞。内容上结合些样式更听睛

  • shenfang
    shenfang 2016-10-27 17:50

    在zabbix 2.2.11版本中运行这个脚本最后在插入screens_items表时少一个字段在最后加一个”空字段值就可以了,把(‘$Screenitemsnum’,’$Screennum’,’0′,’$screenresource’,’500′,’100′,’$x’,’$y’,’1′,’1′,’0′,’0′,’0′,’0′,”,’0′,’0′)改为
    (‘$Screenitemsnum’,’$Screennum’,’0′,’$screenresource’,’500′,’100′,’$x’,’$y’,’1′,’1′,’0′,’0′,’0′,’0′,”,’0′,’0′,”)

  • shenfang
    shenfang 2016-10-27 17:50

    为了写个评论注册个账号。。。。不开心。。。