Xymon Microsoft SQL data query
Using FreeTDS it is possible to connect from A Linux server to Microsoft SQL Server (in this case I use SQL Server 2005), I use this to run a query on a Microsoft SQL Server from Xymon.
First we need to install the required packages, in this case I use a Debian system:
sudo apt-get install libdbd-odbc-perl libdbi-perl tdsodbc freetds-common |
Now configure a datasouce in the /etc/odbci.ini:
[DB01-DATASOURCE] Driver = /usr/lib/odbc/libtdsodbc.so Description = DB Server Trace = No Server = 192.168.0.1 Database = testdb ;Port = 4444 TDS_Version = 8.0 |
And add the server (DB01) to the freetds config /etc/freetds/freetds.conf:
[DB01] host = 192.168.0.1 port = 1433 tds version = 8.0 |
Xymon setup:
Now create a xymon /ext/xymon-DB01query.pl script to grab the data from the SQL Server.
Below is a basic version only usable on a single host in xymon and without any red/green/orange checking it wil create a test name ‘DB01query’ inside xymon.
Also I presume getting 2 valuables back from the SQL server that are put in @DATA.
#!/usr/bin/perl -w ############################################################################# # $Id: $ ############################################################################# use strict; ## BB and related test constants ############################################################################# use constant GREEN => 'green'; use constant YELLOW => 'yellow'; use constant RED => 'red'; # BB Global variables ############################################################################# my $bbtest = 'DB01query'; my $color = GREEN; my $status = $bbtest . " OK"; ## Main Program ############################################################################# { my $dbuser = 'CHANGETHIS'; my $dbpass = 'CHANGETHIS'; my $dbds = 'DB01-DATASOURCE'; my $machine = 'DB01'; my $perf = ""; my @DATA = ""; use DBI; my $dbh = DBI->connect("dbi:ODBC:$dbds", $dbuser, $dbpass, {PrintError => 1, RaiseError => 1, LongTruncOk=>1}); die "Unable for connect to server $DBI::errstr" unless $dbh; my $sql = "select * from database01"; my $sth = $dbh->prepare($sql) or die "Can't prepare statement: $DBI::errstr"; $sth->execute(); while ( my @row = $sth->fetchrow_array ) { $perf = "@row\n"; } @DATA = split(/ /,$perf); $dbh->disconnect; ## Send to Hobbit ############################################################################# my $report_date = `/bin/date`; chomp($report_date); system("$ENV{BB} $ENV{BBDISP} 'status $machine.$bbtest $color $report_date \n\n RESULT1 : $DATA[0] RESULT2: $DATA[1] '\n"); } |
I also want graphs from this so add a new section to the hobbitgraph.cfg:
[DB01query] TITLE DB01query YAXIS # DEF:RESULT1=DB01query.rrd:RESULT1:AVERAGE DEF:RESULT2=DB01query.rrd:RESULT1:AVERAGE LINE1:RESULT1#0000CC:RESULT1 LINE1:RESULT2#FFFF00:RESULT2 COMMENT:\n GPRINT:RESULT1:LAST:RESULT1\: %5.0lf (cur) GPRINT:RESULT1:MAX: \: %5.0lf (max) GPRINT:RESULT1:MIN: \: %5.0lf (min) GPRINT:RESULT1:AVERAGE: \: %5.0lf (avg)\n GPRINT:RESULT2:LAST:RESULT2\: %5.0lf (cur) GPRINT:RESULT2:MAX: \: %5.0lf (max) GPRINT:RESULT2:MIN: \: %5.0lf (min) GPRINT:RESULT2:AVERAGE: \: %5.0lf (avg)\n |
Edit the hobbitserver.cfg to include the DB01query in the TEST2RRD as ‘DB01query=ncv’ and change the default mode to GAUGE:
TEST2RRD="cpu=la,disk,inode,qtree,memory,$PINGCOLUMN=tcp,http=tcp,dns=tcp,dig=tcp,time=ntpstat,vmstat,iostat,netstat,temperature,apache,bind,sendmail,mailq,nmailq=mailq,socks,bea,iishealth,citrix,bbgen,bbtest,bbproxy,hobbitd,files,procs=processes,ports,clock,lines,ops,stats,cifs,JVM,JMS,HitCache,Session,JDBCConn,ExecQueue,JTA,TblSpace,RollBack,MemReq,InvObj,snapmirr,snaplist,snapshot,if_load=devmon,temp=devmon,DB01query=ncv" NCV_DB01query="RESULT1:GAUGE,RESULT1:GAUGE" |
Now add this new test to the hobbitlaunch.cfg in xymon:
> [DB01query] ENVFILE /vol/01/xymon/server/etc/hobbitserver.cfg NEEDS hobbitd CMD $BBHOME/ext/xymon-DB01query.pl LOGFILE $BBSERVERLOGS/DB01query.log INTERVAL 5m |
Just wait a while and the test should show up in xymon.