设为首页 收藏本站
查看: 3185|回复: 0

[经验分享] zabbix 中快速创建同组多主机同一item 的graph的方法

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-11-13 09:41:20 | 显示全部楼层 |阅读模式
接到一个需求,说想批量查看机器的运行情况,在zabbix中使用guest登录时查看多个主机的运行数据时需要不停的切换,Screen 的方法已经有了(Screen 的方法是将每个item的graph放到一个屏幕上),但是看起来不够明晰;最好是将各机器的同一item放到同一个graph里。    比如一个Nginx的组里有10台机器,将这10台机器的内存使用率放到一个graph里,方便在测试时查看。
    在zabbix的前端要创建此类的graph只能通过手工一个一个的加,不能创建此类的templates。网上查找,有批量创建Screen的针对API的python脚本,但是由于尚未接触过zabbix的API,所以就没使用。想想是否可以通过操作zabbix的数据库来做到呢,于是研究一番,有了这个bash脚本。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#!/bin/bash
# date: 2015/11/12 10:00
export PATH=/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/apache/bin:/root/bin

CMD="mysql -uroot zabbix_2 -Bse"
CMD2="mysql -uroot zabbix_2 -e"
color=`openssl rand -base64 6 |md5sum |cut -c1-6 |tr [a-f] [A-F]`
# 获取zabbix内组ID
gid=`$CMD "SELECT groupid FROM groups WHERE name=\"$1\""`

# 判断参数及组名是否正确
if [ $# -ne 2 ];then
    echo -e "\e[031mplease input \"zabbix_group_name\" and \"key_name\"\e[0m"
    exit 3
fi
if [ -z $gid ];then
    echo -e "\e[031mzabbix_group_name is error\e[0m"
    exit 4
fi

# 组ID之下的HOST-id
hid=`$CMD "SELECT hostid FROM hosts_groups WHERE groupid=${gid};"`
hid_last=`$CMD "SELECT hostid FROM hosts_groups WHERE groupid=${gid};" | head -1`

# itemid,用来检查第二个参数key是否有效
testitem=`$CMD "SELECT itemid FROM items WHERE key_=\"$2\" AND hostid=${hid_last}"`
# 获取最后一个graph的ID,insert时需使用这个数字加1
grapid=`$CMD "SELECT graphid FROM graphs" | tail -1`

# 获取最后一个gitemid, 每个gitemid对应一个itemid, 多个gitemid对应一个graphid,gitemid每insert一次得加一
gitemid=`$CMD "SELECT gitemid FROM graphs_items" |tail -1`

# insert graphs 表中一个graph记录
in_graphs() {
    new_graph_id=$((grapid+1))
      # 记录下此次运行产生的graphid
    echo "此次产生的graphid为:$new_graph_id" >> $0.out
    name="$1-$2"
    $CMD2 "INSERT INTO graphs VALUES ($new_graph_id,'$name',900,200,0.0000,100.0000,NULL,1,1,0,1,0,0.0000,0.0000,0,0,NULL,NULL,0);"
}
# insert graphs_items 表中多个graphs_item记录的指向
in_graphs_items() {
    $CMD2  "INSERT INTO graphs_items VALUES ($gitemid,$new_graph_id,$itemid,0,0,'$color',0,2,0)"
}

# 获取指定组下的每个host的指定的item,比如vm.memory.size[total]这个key
if [ -z $testitem ];then
    echo -e "\e[031mkey_name is error\e[0m"
    exit 5
else
    in_graphs "$1" "$2"
    for i in $hid;do
        let gitemid++
        color=`openssl rand -base64 6 |md5sum |cut -c1-6 |tr [a-f] [A-F]`
        itemid=`$CMD "SELECT itemid FROM items WHERE key_=\"$2\" AND hostid=${i}"`
        in_graphs_items
    done
    echo -e "\e[032mcreate graph done\e[0m;"
fi



    此脚本因是与数据库交互的所以本人使用时创建了~/.my.cnf,在里面输入了[client]
password = 123456。需使用两个参数“group_name”和“key_name”,参数需要使用“”引起来。如果成功的提示,即可在前端查看是否有graph生成了。生成的名字是"gruop_name+key_name".
    这里有个问题需要提醒一下,也是我第一次知道。
1, 在graphs 表里 graphid 的数字指向了 graphs_items 中的多个 gitemid 号;

       表          项                 表        项            表    项
    graphs:grapid    graphs_items:gitemid   items:itemid


        564:                            1871    :         23733
                                          1872    :         23317

2,graphs_items 中的 itemid 又指向了 items 中的 itemid。itemid与hostid是有联系的,而hostid又是通过groupid获取到同组之下的hostid的

    这是创建graph的相关关系。在前端创建好此类graph时,如果直接delete删除,那么只是在graphs表中将这个graphid删除了,而不删除在graphs_items中指向graphid的行。 而下次你再创建类似graphs时,graphs表会使用新的ID号,而不会接着graphs表中的ID号来,所以老是在前端创建此类graphs并删除时,会在graphs_items表时产生许多垃圾数据.
    但是此脚本,是直接针对数据库的,不会略过graphs中的使用过的ID号,所以删除后再创建这个graphs时会发现在graph里每个item都是双份的。 此中细节不得了解过后才能理解。
    如有问题,欢迎指正,谢谢。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-138607-1-1.html 上篇帖子: Zabbix 监控windows服务器监控闪断zabbix_get [12577]: Timeout while executing operatio 下篇帖子: Zabbix 监控Mysql数据库及主从数据库 主机
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表