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








	


        
        
                
                        
                        
                        
                
                
        



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

#!/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