利用Shell生成Zabbix監控的數字報表


我們都知道Zabbix是一個非常強大的監控工具,我們公司呢也在用Zabbix監控所有網站的狀態。

最近有一個需求,就是我們需要生成一份報告,報告里要包含前一天一整天的時間節點和對應的響應時間,這樣的報告用來統計網站的可用性達到了什么水准。

 

Zabbix本身自帶報告功能,可是都是圖像的,並沒有數據格式的。雖然沒有提供數據格式的報表,但是Zabbix提供了一套API,可以根據需求獲取對應的數據(JSON格式),於是我就寫了個腳本,用來把每個監控的網址的監控數據輸出到一個CSV文件中。(后續可以用Excel做一個宏去把所有收集到的CSV文件集合成一個XLS文件,這個Excel文件可以下載到:)

 

PS:服務器上面沒有任何高級編程語言的編譯工具或者運行環境,所以一切數據都用shell腳本去處理。用shell處理Json,蛋疼的不是一點點。。。。。。也有可能是我shell水平過差。。。如果有更好的想法的話請建議一下。謝謝

 

腳本如下:

 1 #!/bin/bash
 2 
 3 ##獲取api的授權碼,后面獲取需要的信息的時候要用到。
 4 
 5 ##先根據官方方法獲取授權,之后會有一段輸出信息,其中包含授權碼,用awk處理一下就能得到那串碼了。
 6 authjson=`curl -l -X POST -H 'content-type: application/json' -d '{"jsonrpc":"2.0","method":"user.authenticate","params":{"user":"Admin","password":"zabbix"},"id":1}'  http://127.0.0.1/zabbix/api_jsonrpc.php`
 7 authstr=`echo $authjson | awk -F "[,:\"]" '{print $11}'`
 8 echo $authstr
 9 
10 ##報告的初始時間和結束時間(前一天的0點到24點)
11 from=`date  "+%Y-%m-%d 00:00:00" -d"-1day"`
12 echo $from
13 now=`date  "+%Y-%m-%d 00:00:00"`
14 
15 ##轉換為Linux時間格式,Zabbix只支持這種格式。
16 from=`date -d "$from" '+%s'`
17 now=`date -d "$now" '+%s'`
18 
19 ##每隔監控的網址在數據庫中都有對應的一條記錄,現在直接從數據庫中獲取所有的網址對應的ID。
20 
21 ##getID.sql的內容如下:
22 
23 ##select items.itemid from items join hosts on (items.hostid=hosts.hostid) where items.description like '%response time%' and hosts.host like '%WebSite%' and items.status=0; (sql文件可以根據實際情況編寫,只要能得到所有受監控網址的ID就好。)
24 
25 
26 mysql --user=root --password=zabbix zabbix < getMalaysiaID.sql > /etc/scripts/outputMYID.txt
27 
28 
29 ##mysql命令獲取到的ID是有一個表頭的,去掉。
30 sed '1d' /etc/scripts/outputMYID.txt > /etc/scripts/outputMYID_Daily.txt
31 
32 ##清理以前的臨時文件
33 rm -rf /etc/scripts/dailyreports/tmpjson/*.txt
34 
35 ##獲取每一個ID對應的網址的歷史監控記錄,Json格式,用時間段來做限定。
36 for i in `cat /etc/scripts/outputMYID_Daily.txt`
37 do
38      jsonstr="{\"jsonrpc\": \"2.0\",\"method\":\"history.get\",\"params\":{\"history\":0,\"itemids\":[\"$i\"],\"time_from\":\"$from\",\"time_till\":\"$now\",\"output\":\"extend\"},\"auth\": \"$authstr\",\"id\": 1}"
39      gethistory="curl -l -X POST -H 'Content-Type: application/json' -d '"$jsonstr"' http://127.0.0.1/zabbix/api_jsonrpc.php"
40      echo $gethistory > /etc/scripts/tmp.sh
41      chmod a+x /etc/scripts/tmp.sh
42      /etc/scripts/tmp.sh > /etc/scripts/dailyreports/tmpjson/$i.txt
43 done
44 
45 ##新建一個文件夾!- -
46 now=`date "+%Y%m%d"`
47 mkdir /etc/scripts/dailyreports/dailyreports$now
48 
49 ##處理獲取到的Json數據了
50 for i in `ls /etc/scripts/dailyreports/tmpjson/`
51 do
52      rm /etc/scripts/dailyreports/tmp/*
53 
54 ##獲取所有的響應時間的記錄
55 
56      cat /etc/scripts/dailyreports/tmpjson/$i | sed -e 's/[{}]/''/g' | awk -v k="text" '{n=split($0,a,","); for (i=1; i<=n; i++) print a[i]}' | grep value | grep -o '[0-9]\.[0-9]*' > /etc/scripts/dailyreports/tmp/values
57 
58 ##獲取所有的時間節點的記錄
59      cat /etc/scripts/dailyreports/tmpjson/$i | sed -e 's/[{}]/''/g' | awk -v k="text" '{n=split($0,a,","); for (i=1; i<=n; i++) print a[i]}' | grep clock | grep -o '[0-9]*' > /etc/scripts/dailyreports/tmp/clocks_org
60 
61 ##獲取到的時間節點要處理成人看的格式。
62      for c in `cat /etc/scripts/dailyreports/tmp/clocks_org`
63      do
64           date -d@$c '+%Y-%m-%d %H:%M:%S' >> /etc/scripts/dailyreports/tmp/clocks_new
65      done
66 
67 ##設置新文件的文件名
68      itemidstr=`echo $i | awk -F [.] '{print $1}'`
69      itemname=`mysql --user=root --password=zabbix zabbix -e "select key_ from items where itemid=$itemidstr;" | awk -F [\[,] '{print $2}'`
70 
71 ##創建一個報告文件,並且加入表頭
72      echo "Monitored URL:,$itemname," > /etc/scripts/dailyreports/dailyreports$now/$itemidstr.csv
73      echo "Clock,Response Time(s)," >> /etc/scripts/dailyreports/dailyreports$now/$itemidstr.csv
74 
75 ##把時間節點的記錄跟響應時間的記錄合成一個文件,並且追加到剛剛的報告文件里。
76      paste -d "," /etc/scripts/dailyreports/tmp/clocks_new /etc/scripts/dailyreports/tmp/values /dev/null >> /etc/scripts/dailyreports/dailyreports$now/$itemidstr.csv
77 
78 done
79 
80 ##清理臨時文件
81 rm -rf /etc/scripts/dailyreports/tmpjson/*.txt
82 
83 ##把所有獲得的報告都收集起來,然后把寫好宏的Excel文件也收集到一起,打包發給需要的人。
84 
85 ##到時候在excel文件里會有一堆說明,點擊哪兒哪兒的按鈕就可以得到一份合適的Excel的報告啦。
86 mkdir /etc/scripts/dailyreports/dailyreports$now/csv
87 mv /etc/scripts/dailyreports/dailyreports$now/*.csv /etc/scripts/dailyreports/dailyreports$now/csv/
88 cp /etc/scripts/dailyreports/README.xls /etc/scripts/dailyreports/dailyreports$now/
89 cd /etc/scripts/dailyreports/
90 zip -r dailyreports$now.zip dailyreports$now/
91 
92 cd /root/sendEmail-v1.51
93 
94 ./sendEmail –f sender@sender.com -t receiver@receiver.com -u KLDC DMZ1 Daily SLA Report for WebHosting -m KLDC DMZ1 Daily SLA Report For WebHosting -s 192.168.169.23:25 -a /etc/scripts/dailyreports/dailyreports$now.zip
95 
96 
97 rm -rf /etc/scripts/dailyreports/dailyreports*

 


免責聲明!

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



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