調用zabbix api統計統計某個item的全部機器的history數據

這個腳本調用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
相關文章
相關標籤/搜索