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
···
Robert Sander schrieb am 05.11.18 um 11:06: > On 05.11.18 10:50, Werner Flamme wrote:
Robert Sander schrieb am 04.11.18 um 18:30: >>> Hallo, >>> >>> wir hatten Anfang des Jahres ein SAP HANA Agentenplugin entwickelt:
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.
--