Skip to content

SELECT from MySQL and put to Zabbix

Понадобилось получать некие значения из БД, и рисовать графики.

Вот что вышло.

 

margin-collect.sh

#!/bin/sh

DATABASE=megabase
USER=megauser
PASS=megapass
HOST=1.2.3.4
VHOUR=`date +%H |sed 's/^0//i'`

mysql -h $HOST -u$USER -p$PASS $DATABASE -B -N -e 'SELECT SUM(DST_BILL_TIME) as minutes,BILL_DATE,sum(SRC_SYS_PRICE*SRC_BILL_TIME - DST_SYS_PRICE*DST_BILL_TI
ME) as profit FROM CDR_BILL201209 WHERE BILL_DATE=(select curdate()) and VHOUR='$VHOUR';'
mysql -h $HOST -u$USER -p$PASS $DATABASE -B -N -e 'SELECT SUM(DST_BILL_TIME) as minutes,BILL_DATE,sum(SRC_SYS_PRICE*SRC_BILL_TIME - DST_SYS_PRICE*DST_BILL_TI
ME) as profit FROM CDR_BILL201209 WHERE BILL_DATE=(select date_sub(curdate(),interval 1 day)) and VHOUR='$VHOUR';'
mysql -h $HOST -u$USER -p$PASS $DATABASE -B -N -e 'SELECT SUM(DST_BILL_TIME) as minutes,BILL_DATE,sum(SRC_SYS_PRICE*SRC_BILL_TIME - DST_SYS_PRICE*DST_BILL_TI
ME) as profit FROM CDR_BILL201209 WHERE BILL_DATE=(select date_sub(curdate(),interval 2 day)) and VHOUR='$VHOUR';'

 

 

margin-parse.awk

BEGIN {

id=0;
}

{

if ( NF ==3){
id +=1
print "ambs.example.net minutes"id" " $1;
print "ambs.example.net margin"id" "$3

fflush()
next
}
}

 
Вместо ambs.example.net вписать имя мониторящегося хоста, такое как в заббиксе.
 

 

margin.sh

/etc/zabbix/scripts/margin-collect.sh |awk '{print $1,$2,$3}'|awk -f /etc/zabbix/scripts/margin-parse.awk | zabbix_sender -c /etc/zabbix/zabbix_agentd.conf -r -i -

 

В заббиксе создаем айтемы

minutes1
margin1
minutes2
margin2
minutes3
margin3

тип - Zabbix trapper

Allowed hosts - хост сервера с которого приходят данные

Type of information - Numeric (float)

 

И дальше по крону запускаем margin.sh раз в полчаса, получая таким образом данные от сендера.

Leave a Reply

Your email address will not be published. Required fields are marked *

π