標籤:des style http color 檔案 os
我們都知道Zabbix是一個非常強大的監控工具,我們公司呢也在用Zabbix監控所有網站的狀態。
最近有一個需求,就是我們需要產生一份報告,報告裡要包含前一天一整天的時間節點和對應的回應時間,這樣的報告用來統計網站的可用性達到了什麼水準。
?
Zabbix本身內建報告功能,可是都是映像的,並沒有資料格式的。雖然沒有提供資料格式的報表,但是Zabbix提供了一套API,可以根據需求萃取對應的資料(JSON格式),於是我就寫了個指令碼,用來把每個監控的網址的監控資料輸出到一個CSV檔案中。(後續可以用Excel做一個宏去把所有收集到的CSV檔案集合成一個XLS檔案,這個Excel檔案可以下載到:)
?
PS:伺服器上面沒有任何進階程式設計語言的編譯工具或者運行環境,所以一切資料都用shell指令碼去處理。用shell處理Json,蛋疼的不是一點點。。。。。。也有可能是我shell水平過差。。。如果有更好的想法的話請建議一下。謝謝。
?
?
?
指令碼如下:
#!/bin/bash
##擷取api的授權碼,後面擷取需要的資訊的時候要用到。
##先根據官方方法擷取授權,之後會有一段輸出資訊,其中包含授權碼,用awk處理一下就能得到那串碼了。
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`
authstr=`echo $authjson | awk -F "[,:\"]" ‘{print $11}‘`
echo $authstr
##報告的初始時間和結束時間(前一天的0點到24點)
from=`date? "+%Y-%m-%d 00:00:00" -d"-1day"`
echo $from
now=`date? "+%Y-%m-%d 00:00:00"`
##轉換為Linux時間格式,Zabbix只支援這種格式。
from=`date -d "$from" ‘+%s‘`
now=`date -d "$now" ‘+%s‘`
##每隔監控的網址在資料庫中都有對應的一條記錄,現在直接從資料庫中擷取所有的網址對應的ID。
##getID.sql的內容如下:
##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就好。)
mysql --user=root --password=zabbix zabbix < getMalaysiaID.sql > /etc/scripts/outputMYID.txt
##mysql命令擷取到的ID是有一個表頭的,去掉。
sed ‘1d‘ /etc/scripts/outputMYID.txt > /etc/scripts/outputMYID_Daily.txt
##清理以前的臨時檔案
rm -rf /etc/scripts/dailyreports/tmpjson/*.txt
##擷取每一個ID對應的網址的曆史監控記錄,Json格式,用時間段來做限定。
for i in `cat /etc/scripts/outputMYID_Daily.txt`
do
???? jsonstr="{\"jsonrpc\": \"2.0\",\"method\":\"history.get\",\"params\":{\"history\":0,\"itemids\":[\"$i\"],\"time_from\":\"$from\",\"time_till\":\"$now\",\"output\":\"extend\"},\"auth\": \"$authstr\",\"id\": 1}"
???? gethistory="curl -l -X POST -H ‘Content-Type: application/json‘ -d ‘"$jsonstr"‘ http://127.0.0.1/zabbix/api_jsonrpc.php"
???? echo $gethistory > /etc/scripts/tmp.sh
???? chmod a+x /etc/scripts/tmp.sh
???? /etc/scripts/tmp.sh > /etc/scripts/dailyreports/tmpjson/$i.txt
done
##建立一個檔案夾!- -
now=`date "+%Y%m%d"`
mkdir /etc/scripts/dailyreports/dailyreports$now
##處理擷取到的Json資料了
for i in `ls /etc/scripts/dailyreports/tmpjson/`
do
???? rm /etc/scripts/dailyreports/tmp/*
##擷取所有的回應時間的記錄
???? 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
##擷取所有的時間節點的記錄
???? 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
##擷取到的時間節點要處理成人看的格式。
???? for c in `cat /etc/scripts/dailyreports/tmp/clocks_org`
???? do
????????? date [email protected]$c ‘+%Y-%m-%d %H:%M:%S‘ >> /etc/scripts/dailyreports/tmp/clocks_new
???? done
##設定新檔案的檔案名稱
???? itemidstr=`echo $i | awk -F [.] ‘{print $1}‘`
???? itemname=`mysql --user=root --password=zabbix zabbix -e "select key_ from items where itemid=$itemidstr;" | awk -F [\[,] ‘{print $2}‘`
##建立一個報告檔案,並且加入表頭
???? echo "Monitored URL:,$itemname," > /etc/scripts/dailyreports/dailyreports$now/$itemidstr.csv
???? echo "Clock,Response Time(s)," >> /etc/scripts/dailyreports/dailyreports$now/$itemidstr.csv
##把時間節點的記錄跟回應時間的記錄合成一個檔案,並且追加到剛剛的報告檔案裡。
???? paste -d "," /etc/scripts/dailyreports/tmp/clocks_new /etc/scripts/dailyreports/tmp/values /dev/null >> /etc/scripts/dailyreports/dailyreports$now/$itemidstr.csv
done
##清理臨時檔案
rm -rf /etc/scripts/dailyreports/tmpjson/*.txt
##把所有獲得的報告都收集起來,然後把寫好宏的Excel檔案也收集到一起,打包發給需要的人。
##到時候在excel檔案裡會有一堆說明,點擊哪兒哪兒的按鈕就可以得到一份合適的Excel的報告啦。
mkdir /etc/scripts/dailyreports/dailyreports$now/csv
mv /etc/scripts/dailyreports/dailyreports$now/*.csv /etc/scripts/dailyreports/dailyreports$now/csv/
cp /etc/scripts/dailyreports/README.xls /etc/scripts/dailyreports/dailyreports$now/
cd /etc/scripts/dailyreports/
zip -r dailyreports$now.zip dailyreports$now/
cd /root/sendEmail-v1.51
./sendEmail –f [email protected] -t [email protected] -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
rm -rf /etc/scripts/dailyreports/dailyreports*