zabbix 批量添加聚合圖形


環境為centos 腳本要在centos zabbix服務器上運行,zabbix server上運行

1.先把腳本部署到zabbix客戶端,把腳本保存為nic.sh 存放路徑確保zabbix可以訪問

#!/bin/sh 
function NIC {
    #變量
    #網卡名
    NIC=`ifconfig | grep -v ':Link' | grep -E 'Link|flags' | awk '{print $1}' | grep -vE 'lo|^$'`
    #統計網卡個數
    Num=`ifconfig | grep -v ':Link' | grep -E 'Link|flags' | awk '{print $1}' | grep -vE 'lo|^$' | wc -l`
    #新布局的網卡名后面有冒號需要去掉
    sed=`ifconfig | grep -v ':Link' | grep -E 'Link|flags' | awk '{print $1}' | grep -vE 'lo|^$'| sed 's/://g'`
    #網卡總數減1
    Less=`expr $Num - 1`
    #用於修改key結尾的自增變量
    add="0"
    #存放"判斷ifconfig是否為新布局"值
    judgment=''
    #判斷ifconfig是否為新布局
    if [ $add == 0 ]
    then
        HWaddr=`ifconfig $i | grep -E 'HWaddr'`
        judgment=`echo $?`
    fi
    #替換NIC變量
    if [ $judgment != 0 ]
    then
        NIC=`echo $sed| sed 's/ /\n/g'`
    fi
    #寫key開頭參數
    echo -e "{"'\n\t''"data":['
    #收集ifconfig,網卡名,mac,IP,子網掩碼,網關
    for i in $NIC;
    do
      echo -e '\t\t''{'

      if [ $judgment == 0 ]
      then
           #新布局
          if [ $add == $Less ]
          then
                #當為最后一塊網卡,則替換結尾逗號
                ifconfig $i | grep -E 'HWaddr|inet addr|Bcast|Mask' | sed -e ':a;$!N;s/\n/ /;ta;P;D' | sed -e 's/inet addr:/inet addr /g' -e 's/Bcast:/Bcast /g' -e 's/Mask:/Mask /g' | awk '{print "\t\t\t\"{#IFNMSG}\":\""$1"\":\""$5"\":\""$8"\":\""$12"\":\""$10"\"},"}'|sed -e 's/,/]}/g'
          else
                ifconfig $i | grep -E 'HWaddr|inet addr|Bcast|Mask' | sed -e ':a;$!N;s/\n/ /;ta;P;D' | sed -e 's/inet addr:/inet addr /g' -e 's/Bcast:/Bcast /g' -e 's/Mask:/Mask /g' | awk '{print "\t\t\t\"{#IFNMSG}\":\""$1"\":\""$5"\":\""$8"\":\""$12"\":\""$10"\"},"}'
          fi
      else
           #舊布局
          if [ $add == $Less ]
          then
                #當為最后一塊網卡,則替換結尾逗號
                ifconfig $i | grep -v inet6 | grep -E 'flags|inet|netmask|broadcast|ether' | sed -e ':a;$!N;s/\n/ /;ta;P;D' | sed -e 's/:://g' -e 's/inet addr:/inet addr /g' -e 's/Bcast:/Bcast /g' -e 's/Mask:/Mask /g' | awk '{print "\t\t\t\"{#IFNMSG}\":\"""'"$i"'""\":\""$12"\":\""$6"\":\""$8"\":\""$10"\"},"}'|sed -e 's/,/]}/g'
          else
                ifconfig $i | grep -v inet6 | grep -E 'flags|inet|netmask|broadcast|ether' | sed -e ':a;$!N;s/\n/ /;ta;P;D' | sed -e 's/:://g' -e 's/inet addr:/inet addr /g' -e 's/Bcast:/Bcast /g' -e 's/Mask:/Mask /g' | awk '{print "\t\t\t\"{#IFNMSG}\":\"""'"$i"'""\":\""$12"\":\""$6"\":\""$8"\":\""$10"\"},"}'
          fi 
      fi
      #用於修改key結尾的自增變量
      let add+=1
    done
}
$1

chown zabbix:zabbix /usr/local/zabbix/scripts/nic.sh

chmod +x /usr/local/zabbix/scripts/nic.sh

修改zabbix_agentd.conf最后行添加UserParameter=nic.nic,/usr/local/zabbix/scripts/nic.sh NIC; 

重啟zabbix agent

 

2.打開zabbix>配置>主機>選擇群組    將頁面的內容全部復制到服務器的文檔上

3.執行 grep -Ev 'Windows|停用的' 文檔名 | egrep -o '([0-9]{1,3}\.){3}[0-9]{1,3}\: [0-9]{5}' | sed -e 's#: #\t#g' | sort -t'.' -k1,1n -k2,2n -k3,3n -k4,4n > zabbix-ip-port

4.保存下面的代碼然后執行,過濾出 ip和zabbix端口

#!/bin/bash
#避免已存在,先執行刪除
rm -rf sh-ip-port
while read link
do
ip=`echo "$link" | awk -F '\t' '{print $1}'`
port=`echo "$link" | awk -F '\t' '{print $2}'`
#顯示當前ip
#
echo ${ip}
#調用客戶端的腳本
nic=`/usr/local/zabbix/bin/zabbix_get -s$ip -p$port -k"nic.nic" | grep -E "填寫需要加到聚合圖形的ip段,多個ip段 | 分隔符隔開,如: 172.17.16|172.16.16" | awk -F '\"' '{print $4}' | awk -F ':' '{print $1}' | sed -e 's/"//g' | uniq` a=`echo $?` for i in $nic; do if [ i != "" ]; then echo -e $ip"\t$i" >> sh-ip-port fi done done < zabbix-ip-port

5.保存下面的代碼然后執行,生成聚合圖形的xml文件

 
         
#!/bin/bash
#避免已存在,先執行刪除
rm
-rf sh-ip-port.xml
#提示輸入組名 read
-t 30 -p "group name:" name x=0 y=0 while read link do ip=`echo "$link" | awk -F '\t' '{print $1}'` port=`echo "$link" | awk -F '\t' '{print $2}'`
#顯示ip與xy值 #
echo ${ip} #echo x=$x #echo y=$y
#可以自定義width與height值
cat >> sh-ip-port.xml << EOF <screen_item> <resourcetype>0</resourcetype> <width>500</width> <height>100</height> <x>$x</x> <y>$y</y> <colspan>1</colspan> <rowspan>1</rowspan> <elements>0</elements> <valign>0</valign> <halign>0</halign> <style>0</style> <url/> <dynamic>0</dynamic> <sort_triggers>0</sort_triggers> <resource> <name>Network traffic on $port</name> <host>$ip</host> </resource> <max_columns>3</max_columns> <application/> </screen_item> EOF
  #指定一行只有3個
if [ $x -eq 2 ];then x=0 let y=$y+1; else let x=$x+1; fi done < sh-ip-port
#由於第一次的列值為0但是zabbix導入時必須為總數,y值小一位所以這里要加1 let y
=$y+1;
#添加文件頭
sed -i "1i<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<zabbix_export>\n\t<version>3.0</version>\n\t<date>2016-04-14T02:53:19Z</date>\n\t<screens>\n\t<screen>\n\t\t<name>$name</name>\n\t\t<hsize>3</hsize>\n\t\t<vsize>$y</vsize>\n\t\t<screen_items>" sh-ip-port.xml #添加結尾
echo -e '\t\t</screen_items>\n\t</screen>\n\t</screens>\n</zabbix_export>' >>sh-ip-port.xml

6.將sh-ip-port.xml文件從服務器下載,然后到zabbix聚合圖形導入即可


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM