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

來源:互聯網
上載者:User

標籤: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*

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.