Post by Robert SanderPost by Werner FlammePost by Werner FlammeHallo,
https://github.com/HeinleinSupport/check_mk/tree/master/sap_hana
Hier kann in der Agent Bakery z.B. die Authentifizierung auf Userstore
umgestellt werden.
Das Problem ist die Anzeige in WATO. WATO unterscheidet
anscheinend nicht, wenn mehrere DB auf einem Host liegen und zeigt die
Ergebnisse der einzelnen Datenbanken wild durcheinander an.
WIMRE kann das obige Plugin auch mehrere Instanzen.
Hallo Robert,
das mit den "mehrere Instanzen" - jein. Der Serverteil kann es, wie ich
jetzt festgestellt habe, aber der Agent-Teil macht Keks.
Im Agent finde ich einen Kommentar, der sowas von gar nicht zutrifft...
# configfile should contain USERSTOREKEY for support of multiple HANA
instances OR USER + PASSWORD
# The USERSTOREKEY (if available) is then merged with the SID name to to
find a matching entry in the HDB USERSTORE.
# i.e. USERSTOREKEY="SVAMON" + SID = I08 means we need a key for
SVAMONI08 in the HDB userstore
Kompletter Quatsch, wenn eine Zeile USERSTOREKEY gelesen wird, wird der
Eintrag 1:1 verwendet. Und es findet keinerlei Unterscheidung nach
Instanzen oder dergleichen statt.
Also habe ich mir eine kleine Routine geschrieben, die die Zeile
source "$configFile"
ersetzt. Dabei habe ich ausschlieÃlich auf meinen Bedarf abgestellt,
also Verwendung von hdbuserstore, keine Username/Passwort-Kombinationen.
Die lassen sich aber sich bei Bedarf ergÀnzen:
mycounter=0
declare -a MYSID
declare -a MYUSERSTOREKEY
while read MYLINE ; do
[ ${MYLINE:0:1} = '#' ] && continue # comment
if [ ${MYLINE:0:12} = 'USERSTOREKEY' ] ; then
if [ "x${MYLINE:12:1}" = 'x_' ] ; then
MYSID[$mycounter]=${MYLINE:13:3}
MYUSERSTOREKEY[$mycounter]=$(echo "$MYLINE" | cut -d'=' -f2)
let "mycounter += 1"
fi
fi
done < "$configFile"
if [ $mycounter -eq 0 ]; then
exit_unknown
fi
max_counter=$mycounter
Ganz unten versucht der Agent dann, ÃŒber Instanzen zu iterieren, was
fehlschlagen muss, weil die USERSTOREKEY ja nicht den einzelnen
Instanzen zugeordnet werden. Stattdessen loope ich ÃŒber meine Arrays:
mycounter=0
while [ $mycounter -lt $max_counter ]; do
USERSTOREKEY=${MYUSERSTOREKEY[$mycounter]}
SID=$(echo ${MYSID[$mycounter]} | tr [[:lower:]] [[:upper:]])
INSTANCEDIR=$(ls -d /usr/sap/${SID}/HDB??)
INSTANCEUSER=$(echo "$SID" | tr [[:upper:]] [[:lower:]])"adm"
INSTANCE='XX'
if [ -d "$INSTANCEDIR" ]; then
INSTANCE=${INSTANCEDIR:(-2)}
do_query
fi
let "mycounter += 1"
done
AuÃerdem kommt in etlichen SQL-Abfragen "HOST = '$(hostname -f)'" vor.
Das habe ich ersetzt mit "HOST like '$(hostname)%'", denn nur 2 der 4
HANA-Hosts hier sind mit FQDN installiert, die anderen beiden haben den
"kurzen" Hostnamen, und so erwische ich beide FÀlle.
Nebenbei habe ich noch etwas geÀndert, die Credentials:
function hdbsql() {
# -C don't escape output, -F change separator , -x = quiet
output, only query result / -a = no header in reply to select statements
# plus sed removes leading and trailing ;
if [ -n "$USERSTOREKEY" ] ; then
# CREDENTIALS="-U ${USERSTOREKEY}${SID}"
CREDENTIALS="-U ${USERSTOREKEY}"
else
CREDENTIALS="-u ${USER} -p ${PASSWORD} -n localhost -i
${INSTANCE}"
fi
su - ${INSTANCEUSER} -c
"/usr/sap/${SID}/HDB${INSTANCE}/exe/hdbsql -C -F\; -x -a ${CREDENTIALS}
\"$1\"" 2>/dev/null | sed -e "s/^;//" -e "s/;$//" ; (exit ${PIPESTATUS[0]})
}
Wenn ich einen hdbuserstore-Eintrag habe, ist dort der Hostname und der
anzusprechende Port enthalten (ggf. auch die DB-SID), so dass ich die
auf der Kommandozeile nicht mehr benötige. Ãbrigens wÀre hier die Stelle
mit CREDENTIALS="-U ${USERSTOREKEY}${SID}", aber das ist ja
auskommentiert, und zwar nicht von mir ;). Schöner wÀre Ìbrigens
${USERSTOREKEY:0:(-3)}, dann wÃŒrde in der config-Datei die SID hinten
angehÀngt, aber es wÀre immer noch nur ein Eintrag möglich...
Ergebnis: das Plugin liefert jetzt Daten, in deren Bezeichnung
SID+Instanznummer vorkommen, die also wirklich DB-spezifische Ergebnisse
liefern. Finde ich zwar doppelt gemoppelt, aber egal, wichtig ist die
Unterscheidbarkeit.
Irgendwann werde ich bestimmt auch herausbekommen, warum der Abschnitt
<<<sap_hana_diskusage:sep(59)>>>
[[S5D 00]]
Data;OK;Size 943.8 GB, Used 466.1 GB, Free 51 %
Log;OK;Size 943.8 GB, Used 466.1 GB, Free 51 %
Trace;OK;Size 943.8 GB, Used 466.1 GB, Free 51 %
zu drei Fehlermeldungen "UNKN - check failed - please submit a crash
report!" fÃŒhrt... (SAP HANA Disk S5D 00 - Trace, - Log, - Data)
Oder warum die recht lange Liste nach
<<<sap_hana_threads:sep(59)>>>
[[S5D 00]]
3325207763;waiting for wake up
3099;core/stat
9441682;Wait
52;Queue Master
105634550;interval 1 sec.
3990;ExecutePrepared
nameserver; ...
die Meldung "UNKN - 5 Threads started, active is unknown" ergibt. Zuerst
hatte ich "CRIT - 0 Threads started, active is yes", dann habe ich den
Hostnamen in der SQL-Abfrage geÀndert...
Ãbrigens bleibt immer noch das Problem, dass ich damit pro Instanz nur
eine DB abfragen kann. Das ist bei HANA 1 ohnehin der Regelfall, aber
bei HANA 2 habe ich pro Instanz mindestens eine System-DB und eine
Tenant-DB. Mal sehen, wie ich das noch einbauen kann...
GruÃ
Werner
--