公司由于大量業務調整,尤其是服務器功能和性能的轉變,監控也跟隨這變化,其中操作最為繁瑣的當數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.www58058.com/10127
腳本寫的不錯,贊。內容上結合些樣式更聽睛
在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′,”)
為了寫個評論注冊個賬號。。。。不開心。。。