這個腳本調用zabbix的api去抓取全部有$itemkey(數字類型的有效)的機器的item的指定時間的history的數據,計算出最大,最小和平均值,保存爲csv文件,腳本一共輸出5列(主機名,itemid,最大值,最小值,平均值)php
#!/bin/bash apiurl="http://10.1.x.x/zabbix/api_jsonrpc.php" starttime="2016-09-01 00:00:00" stoptime="2016-09-25 00:00:00" username="username" password="password" itemkey="system.cpu.load[percpu,avg1]" csvfile=/tmp/cpuinfo.csv startts=`date +%s -d "$starttime"` stopts=`date +%s -d "$stoptime"` echo '"hostname","itemid","min","max","avg"' > $csvfile gettoken() { curl -d "{\"jsonrpc\": \"2.0\",\"method\": \"user.login\",\"params\": {\"user\": \"$username\",\"password\": \"$password\"},\"id\":1,\"auth\":null}" -H "Content-Type:application/json" $apiurl 2>/dev/null|sed 's/.*result":"//'|sed 's/".*$//'|| return 1 } getdatabyitemid() { itemdata=`curl -d "{\"jsonrpc\": \"2.0\",\"method\": \"history.get\",\"params\": {\"output\": \"extend\",\"history\": 0,\"itemids\": \"$1\",\"time_from\": $startts,\"time_till\": $stopts},\"id\": 1,\"auth\":\"$token\"}" -H "Content-Type:application/json" $apiurl 2>/dev/null` max=`echo $itemdata|jq .|grep ' "value":'|sed 's/.*": "//'|sed 's/",//'|sort -n|tail -1` min=`echo $itemdata|jq .|grep ' "value":'|sed 's/.*": "//'|sed 's/",//'|sort -n|head -1` lc=`echo $itemdata|jq .|grep ' "value":'|sed 's/.*": "//'|sed 's/",//'|wc -l` count=`echo $itemdata |jq .|grep ' "value":'|sed 's/.*": "//'|sed 's/",//'|awk '{i+=$1}'END'{print i}'` avg=`awk 'BEGIN{printf "%.2f\n", '$count'/'$lc'}'` echo "\"$host\",\"$1\",\"$min\",\"$max\",\"$avg\"" echo "\"$1\",\"$min\",\"$max\",\"$avg\"" >> $csvfile } getitems() { curl -d "{\"jsonrpc\": \"2.0\",\"method\": \"item.get\",\"params\": {\"output\": \"extend\",\"search\": {\"key_\":\"$itemkey\"}},\"id\": 1,\"auth\":\"$token\"}" -H "Content-Type:application/json" $apiurl 2>/dev/null } gethostbyitemids() { host=`curl -d "{\"jsonrpc\": \"2.0\",\"method\": \"host.get\",\"params\": {\"output\": \"extend\",\"itemids\": \"$1\"},\"id\": 1,\"auth\":\"$token\"}" -H "Content-Type:application/json" $apiurl 2>/dev/null |jq .|grep ' "host":'|awk -F'"' '{print $4}'` echo "search host \"$host\" item \"$itemkey\" data....." echo -n "\"$host\"," >> $csvfile } token=`gettoken`|| (echo "get token failed" && exit 1) echo $token itemids=`getitems`&& echo $itemids|jq .|grep ' "itemid":'|sed 's/.*itemid": "//'|sed 's/",//'|while read n;do gethostbyitemids $n;getdatabyitemid $n;done