In diesem Beitrag will ich ein Check_MK Agent Plugin erstellen, welches Daten aus einer Datenbank aus liest und in Check_MK als Service mit Statistik integriert.
1. Installation
1.1. Java installieren
sudo apt-get install openjdk-8-jre
1.2. SQL-Workbench installieren
SQL-Workbench von der Seite laden.
wget http://www.sql-workbench.net/Workbench-Build119.zip
Die ZIP-Datei entpacken.
unzip Workbench-Build119.zip
2. Einrichtung
2.1. SQL-Workbench Profile
Starten Sie SQL-Workbench im Grafikmodus und legen ein Connection Profile an, mit dem Sie eine Verbindung zur Datenbank auf bauen können.
./Workbench-Build119/sqlworkbench.sh
2.2. Verzeichnisse anlegen
mkdir -p ./check-db-plugin/{lib,logs,result}/
Die Bibliothek in das Projektverzeichnis kopieren.
cp ./Workbench-Build119/sqlworkbench.jar ./check-db-plugin/lib/
2.3. Script erstellen
Dieses Script starte SQL-Workbench im Command-Modus und transformiert die Datenbankabfrage in eine OUT-Datei. Als „ProfileName“ verwenden Sie den Namen, welche Sie unter Punk 2.1. erstellt haben.
vim ./check-db-plugin/start.sh
chmod +x vim ./check-db-plugin/start.sh
#!/bin/sh DIR=/home/user/check-db-plugin/ JAVA_HOME=/usr/lib/jvm/default-java/ JAR=lib/sqlworkbench.jar CONFIG=/home/user/.sqlworkbench SCRIPT=count.sql LOG=logs/check.log cd $DIR $JAVA_HOME/bin/java \ -jar $JAR \ -profile='ProfileName' \ -command='WBInclude count.sql;' \ -configDir=$CONFIG \ -logfile=$LOG \ -readOnly \ -displayResult=false; \ # -script=$SCRIPT |
In der Datei „count.sql“ erstellen Sie die Abfrage für die Datenbank und die anschließende XSLT Transformation.
vim ./check-db-plugin/count.sql
WbConnect ProfileName; WbExport -type=xml -file='result/table.xml' -stylesheet='count.xslt' -xsltOutput='result/table.out'; SELECT count(*) as SUM, 50 as WARNING, 100 as CRITICAL FROM table WHERE status = 'closed'; |
Die XSLT Transformation wandelt das Ergebnis der Datenbank in eine einfache Textausgabe um.
vim ./check-db-plugin/count.xslt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | <?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > <xsl:output encoding="iso-8859-15" method="text" indent="no" standalone="no" omit-xml-declaration="no" doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" /> <xsl:variable name="newline"><xsl:text> </xsl:text></xsl:variable> <xsl:variable name="tab"><xsl:text>	</xsl:text></xsl:variable> <xsl:template match="/"> <!-- Write the data rows --> <xsl:for-each select="/wb-export/data/row-data"> <xsl:for-each select="column-data"> <xsl:value-of select="."/> <xsl:if test="position() < last()"><xsl:value-of select="$tab"/> </xsl:if> </xsl:for-each> <xsl:value-of select="$newline"/> </xsl:for-each> </xsl:template> </xsl:stylesheet> |
3. Check_MK Agent
3.1. Verzeichnis erstellen
Der Check soll nur alle 120 Sekunden asynchron ausgeführt werden, deshalb wird ein Verzeichnis 120 angelegt.
sudo mkdir -p /usr/lib/check_mk_agent/local/120/
3.2. Check erstellen
Der Check liest im Verzeichnis die Dateien mit der Endung /home/user/check-db-plugin/result/*.out aus und stellt das Ergebnis im Check_MK agent bereit.
sudo vim /usr/lib/check_mk_agent/local/120/check-db-plugin.sh
sudo chmod +x /usr/lib/check_mk_agent/local/120/check-db-plugin.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | #!/bin/sh # Plugin Return Codes # = 0 OK # = 1 Warning # = 2 Critical # = 3 Unknown # DIR=/home/user/check-db-plugin/ FILTER=result/*.out NAME="SQL-counter" # Start SQL-Workbench into batch mode $DIR/start.sh > /dev/null for file in $DIR/$FILTER; do filename=$(basename "$file") date=$(date -r "$file" +"%Y-%m-%d %H:%M:%S") count=$(cut -f1 ${file}) limit_warning=$(cut -f2 ${file}) limit_critical=$(cut -f3 ${file}) if [ -z $count ] ; then status=3 statustext="UNKNOWN" elif [ $count -gt $limit_critical ] ; then status=2 statustext="CRITICAL" elif [ $count -gt $limit_warning ] ; then status=1 statustext="WARNING" else status=0 statustext="OK" fi if [ $count -eq $limit_warning ] && [ $count -eq $limit_critical ] ; then unset limit_warning unset limit_critical fi echo "${status:-1} ${NAME}_${filename} count=${count};$limit_warning;$limit_critical; Check(${statustext}): ${count} - ${date}" done exit $status |
Quelle: Check_MK
Download: SQL-Workbench Handbuch: Install, Scripting, Export
Schreibe einen Kommentar