#!/bin/bash ######################################################################## # # Was macht das Script: # # Das Script suche eine bestimmte Zeile im pc_server-Log von Aleph. Die # gefundenen Zeilen werden in ein separates Log geschrieben, dass von # Nagios ausgelesen wird und die Anzahl der verbrauchten Lizenzen # grafisch darstellt. # Fehlerhafte Zeilen im pc_server-Log erzeugen mehrmals woechentlich # deutlich ueberhoehte Werte. Um diese fehlerhaften Zeilen auszu- # sortieren ist der unten aufgefuehrte Regex-Ausdruck entstanden. # # Um fehlerhafte Zeilen auszusortieren # grep 1) nur Zeilen, die 52 Zeichen lang sind # grep 2) letztes Wort herausfiltern # grep 3) letztes Wort muss 6 fuehrende Nullen haben und nachfolgend # drei beliebige Ziffern # # grep -x '.\{52\}' aleph_pc_user_05-02-2016.log | \ # grep -oE '[^ ]+ | \ # grep -E '[0]{6}[0-9]{3}' # ######################################################################## # Variablen # Pfad zum pc_server-Log von Aleph dateipfad="/exlibris/aleph/a22_1/log" # aktuelles pc_server-Log von Aleph dateiname="pc_server_6530.log" # Pfad zum pc_server-Log fuer Nagios logpfad="/home/nagios/nagios_scripts/pc_server_user/logs" # aktuelles pc_server-Log fuer Nagios logdatei="aleph_pc_user_`date +"%d-%m-%Y"`.log" # suche das letzte Vorkommen des Strings im Log, der 'word count (wc)' # muss groesser als eins sein, ansonsten wurde das Log vor zu kurzer # Zeit neu angelegt oder es besteht ein anderer Fehler. anzahl=`tac ${dateipfad}/${dateiname} | grep -m1 'Active GUI users :' | wc -l` # gibt es eine Zeile im Aleph log, die den String 'Active GUI users :' # enthaelt? Falls ja, pruefen wir die Zeile auf Korrektheit und # schreiben diese, wenn korrekt ins Log fuer Nagios if [ ${anzahl} -gt 0 ]; then # Auslesen der Zeile, letztes "Wort" in der Zeile sollte obige # Bedingungen der gepipten grep-Befehle erfuellen. Der awk-Befehl # macht daraus eine Zahl, die soll kleiner sein als 200. Ist die # Bedingung erfuellt, schreiben wir die Zeile ins Log fuer Nagios, # ansonsten wird kein Logeintrag geschrieben. #if [[ $(grep -x '.{52}' ${dateipfad}/${dateiname} | grep -oE '[^ ]+ | grep -E '[0]{6}[0-9]{3}' | awk '{print $1+0}') -lt 200 ]]; then if [[ $(grep -x '.{52}' ${dateipfad}/${dateiname}) ]] && [[ $(grep -oE '[^ ]+ ${dateipfad}/${dateiname} | grep -E '[0]{6}[0-9]{3}' | awk '{print $1+0}') -lt 200 ]]; then # Die Zeile im Aleph-Log ist # - genau 52 Zeichen lang # - das letzte Wort besteht aus sechs fuehrenden Nullen und # enthaelt anschliessend drei beliebige Ziffern von 0 - 9 # - die sich daraus ergebende Zahl ist zudem kleiner als 200 ######################################################################## # Anfang "nur fuer Testzwecke" ######################################################################## # Den kompletten String aus dem pc_server-Log auslesen #stringKomplett=`tac ${dateipfad}/${dateiname} | grep -m1 'Active GUI users :'` # Die aktuelle Zahl noch als String aus dem pc_server-Log auslesen #zahlAlsString=`tac ${dateipfad}/${dateiname} | grep -m1 'Active GUI users :' | grep -oE '[^ ]+ | grep -E '[0]{6}[0-9]{3}'` # Die als String ausgelesene Zahl in eine Zahl umwandeln #zahl=`tac ${dateipfad}/${dateiname} | grep -m1 'Active GUI users :' | grep -oE '[^ ]+ | grep -E '[0]{6}[0-9]{3}' | awk '{print $1+0}'` # Ausgabe des kompletten und der Teilstrings #echo ${stringKomplett} #echo ${zahlAlsString} #echo ${zahl} ######################################################################## # Ende "nur fuer Testzwecke" ######################################################################## # Die korrekte Zeile muss noch ins Log geschrieben werden # Zeitstempel printf "`date +"%d-%m-%Y %H:%M"` " >> ${logpfad}/${logdatei} # Aktive User grep -F 'Active GUI users :' ${dateipfad}/${dateiname} | tail -n1 >> ${logpfad}/${logdatei} # Falls die Zeile nicht den Erwartungen entspricht, wird nichts ins # Log geschrieben, kein else-Abschnitt noetig fi # das else der aeusseren Schleife. Ist im pc_server-Log keine Zeile mit # 'Active GUI users :' vorhanden, wird fuer Nagios eine erstellt. Ist # im Log fuer Nagios keine Zeile vorhanden, entstehen ansonsten # unschoene Fehlermeldungen. else # Zeitstempel printf "`date +"%d-%m-%Y %H:%M"` " >> ${logpfad}/${logdatei} # Aktive User echo "Active GUI users : 000000000" | tail -n1 >> ${logpfad}/${logdatei} fi exit 0