Mk_oracle und Custom Queries

Hallo,

mit mk_oracle sind ja auch Custom Queries möglich welche das Plugin gegen die Instanzen ausführt und das Ergebnis über den Agent an die cmk Instanz abliefert.

Die Doku dazu ist leider übersichtlich, die manpage verweist auf das Plugin und dort sind nur die Optionen beschrieben, da komme ich aber irgendwie nicht klar. Ist nur ein SQL möglich oder gehen mehrere?
Hat hier jemand ein funktionierendes Beispiel?
Wir verwenden die Agent Bakery, welches ja mk_oracle.cfg erzeugt. In WATO lässt sich das nicht konfigurieren, wie bekomme ich die Inhalte rein ohne das sie überschrieben werden?

Edit: Hier stehen im Abschnitt 6 einige Infos. In bin durch den Link Custom SQLs for Oracle DBs in der Intoducion direkt falsch abgebogen.
Verbesserungsvorschlag 1: Der Link in der Introduction sollte nicht auf die manpage sondern auf Kapitel 6 verweisen - sonst übersieht man das evtl.
Verbesserungsvorschlag 2: Die Beispiele enthalten kein SQL. Wo genau wird das query jetzt festgelegt?
Verbesserungsvorschlag 3: Die Dateinamen im Beispiel heißen mysql.sql, hier geht es aber um Oracle.

Und es bleibt die Frage wie das über WATO mit der Agent Bakery konfiguriert werden kann.
Die Queries kann man ja durchaus lokal festlegen, in der Bakery müsste aber zumindest SQLS_DIR gesetzt werden können. Wenn man die Inhalte gleich mit verteilen kann wäre das natürlich besser.

2 Likes

Hi,
die custom SQLs sind sehr flexibel und - leider - nicht sonderlich gut dokumentiert, wie Du ja bereits fest gestellt hast.

Daher mal ein kurzes Beispiel:
/etc/check_mk/mk_oracle.cfg

SQLS_SECTIONS=my_custom_sql
SQLS_DIR=/etc/check_mk/sql
SQLS_MAX_CACHE_AGE=120
 
my_custom_sql () {
SQLS_SIDS=testdb1
SQLS_SQL=name.sql
}

/etc/check_mk/sql/name.sql

select ‘details:’||ltrim(count(1))||’ users in dba_users’
from dba_users;
PROMPT exit:0

Agentausgabe:

[[[testdb1|test1234]]]

Checkname:

ORA TESTDB1 SQL NAME.SQL WARN - 25 users in dba_users(!),

Mein letzter Stand ist, das es keinen Support für die Bakery geben wird, weil die Variationsmöglichkeiten zu groß sind. Du kannst allerdings die Bakery parallel verwenden, wenn Du die Konfigrationen in /etc/check_mk/mk_oracle.d speicherst.

4 Likes

Vielen Dank für deine hilfreiche Antwort!

Auch von mir danke für dieses Beispiel!

Wenn ich die Konfiguration in die mk_oracle.cfg schreibt, dann klappt es. Wenn ich im gleichen Verzeichnis ein Verzeichnis mk_oracle.d anlege und darin meine test.cfg mit den gleichen Einstellungen - dann wird kein Service gefunden. So überschreibt mir ein neuer Agent aus der Bakery die Config wieder.

Muss ich das directory mk_oracle.d noch irgendwo angeben?
Die Variable MK_CONFDIR zeigt auf das Verzeichnis welches die mk_oracle.cfg und mk_oracle.d enthält. Der cmk Benutzer ist natürlich der Owner.

Hi,
die Funktion wurde erst nach dem Release von 1.6 implementiert.
https://checkmk.de/check_mk-werks.php?werk_id=10848

Da es sich um eine funktionalie Erweiterung handelt, diese nur in Ausnahme auf besehende stable-Releases übernommen werden, wird es in der 1.6.0 noch fehlen. Leider wird Dir da nichts anderes übrig bleiben als bei den Jungs von Tribe29 zu fragen, ob sie das portieren können oder Du muß Dir ein eigenes Plugin mergen und per MKP bereit stellen.

Ich verwende bei uns intern immer ein selbst zusammengeselltes Plugin, weil ich nicht so lange auf die Bereitstellung im stable warten möchte.

Gruß
Thorsten

1 Like

Hi Thorsten,

vielen Dank, das erklärt wieso es in meiner 1.6er Site noch nicht klappt.

Für andere hier mal noch die “Übersetzung” des Beispiels zur Doku.

Doku:

/*details:Text to display in the service detail output*/
prompt details: Some details for the service output;

/*perfdata:METRIKNAME=CURRENTVALUE;WARN;CRIT;MAX METRIKNAME=CURRENTVALUE2;WARN;CRIT;MAX*/
prompt perfdata:MyMetricName1=10;15;20;30 MyMetricName2=16;15;20;30;
prompt perfdata:MyMetricName3=21;15;20;30 MyMetricName4=15;15;20;30;

/*long:Text to display in the long output of the service*/
prompt long: Here comes some long output for the service;
prompt long: Here comes some more long output for the service;

/*exit:Status of the service as a number*/
prompt exit:2;

Hier angepasst an das Beispiel von Thorsten mit der Anzahl der User (ja, macht fachlich keinen Sinn, aber als Beispiel ok). Die erste zeile liefert den Service Output, die zweite Zeile einen Performance Graph und die dritte Zeile definiert den Status des Service.
Long Output habe ich jetzt mal weggelassen, das Prinzip ist aber wie bei den anderen.

select 'details: ' || ltrim(count(1)) || ' users in dba_users' from dba_users;
select 'perfdata: user=' || ltrim(count(1)) || ';80;90;' from dba_users;
select 'exit: ' || case when ltrim(count(1)) >= 80 then 1 when ltrim(count(1)) >= 90 then 2 else 0 end status from dba_users;
2 Likes

Bei der Konferenz fehlte die Zeit in die technischen Details zu gehen - eventuell was für die nächste Präsentation zum Thema mk_oracle
Ich gucke nicht wirklich oft hier ins Forum rein, weil mir auch die Zeit dafür fehlt (Mailing Liste war schneller und so zumindest öfter mal gemacht), aber sonst schreib wenn du Fragen hast. ICh versuche ab und an mal in den Thread zu schauen.

Dokumentation wurde schon überarbeitet und mittlerweile steht dort in der Tat schon wesentlich mehr als vorher - ausbaufähig und dein Input ist gut

Verbesserungsvorschlag 1: Der Link in der Introduction sollte nicht auf die manpage sondern
auf Kapitel 6 verweisen - sonst übersieht man das evtl.
Verbesserungsvorschlag 2: Die Beispiele enthalten kein SQL. Wo genau wird das query
jetzt festgelegt?
Verbesserungsvorschlag 3: Die Dateinamen im Beispiel heißen mysql.sql, hier geht es aber
um Oracle.

Zur Agent Bakery - wir benutzen diese bis jetzt nicht und ich hab auch ehrlich gesagt nicht gesehen das es möglich ist (heisst nicht das nicht doch möglich) - aber da musst sonst ins Daily Build gucken.
Da kommt im übrigen noch einiges mehr. Wie auch auf der Konferenz schon ein Teil angekündigt/gezeigt

Vorher: 1.6
ORA $SID Performance

Nachher: 1.7 (wenn im WATO eingestellt - ledier nicht default)
ORA $SID Performance DB-Time
ORA $SID Performance IO Stats Bytes
ORA $SID Performance IO Stats Requests
ORA $SID Performance Memory
ORA $SID Performance System Wait
ORA $SID Uptime

Cheers
Daniel

@MightyDinosaurus

Eventuell noch ein komplexeres Anwendungs-Beispiel als das von @Rendanic

Stell dir vor du hast
-10 DBs auf einem Host

  • Login mit Wallet
  • User haben alle den selben Prefix/Postfix
  • SQL soll nur bei 4 Test DBs abgefragt werden
  • PROD DB ist für alle SQLs excluded
  • 1 SQL, muss aber mit unterschiedlichen Parametern ausgeführt werden

DBUSER=‘/@mon_${ORACLE_SID}.kunde::::’
SKIP_SIDS=‘proddb01’
MAX_TASKS=10 (kommt dann hoffentlich auch mit 1.7 - parallelization - 10 DBs auf einmal abfragen)

sc_avq_perf_1 () {
SQLS_SIDS=‘$SID1,$SID2’
SQLS_SQL=sc_avq_perf_1.sql
SQLS_ITEM_NAME=‘PERF 1’
SQLS_PARAMETERS="
DEFINE VAR_LOCK_SEC_IN_WAIT_WARN = 0
DEFINE VAR_LOCK_SEC_IN_WAIT_ERR = 30
DEFINE VAR_MAX_NR_IN_WARN = 10
DEFINE VAR_MAX_NR_IN_ERR = 20
DEFINE VAR_EXCLUDE_WAIT_CLASS = ‘Idle’
"
}

sc_avq_perf_2 () {
SQLS_SIDS=‘$SID4,$SID6’
SQLS_SQL=sc_avq_perf_1.sql
SQLS_ITEM_NAME=‘PERF 1’
SQLS_PARAMETERS="
DEFINE VAR_LOCK_SEC_IN_WAIT_WARN = 3
DEFINE VAR_LOCK_SEC_IN_WAIT_ERR = 40
DEFINE VAR_MAX_NR_IN_WARN = 20
DEFINE VAR_MAX_NR_IN_ERR = 30
DEFINE VAR_EXCLUDE_WAIT_CLASS = ‘Idle’
"
}

nur Zur Sicherheit - $SID sind die wirklich SID Namen und keine Variable welche automatsich abgefüllt wird

Der Servicename soll nie den Namen der Funktion haben, sieht doof aus - daher gibt es
SQLS_ITEM_NAME=‘PERF 1’
Das ist dann immer ORA $SID SQL $SQLS_ITEM_NAME

hoffe das hilft auch noch jemanden
LG
Daniel

und Servus @pitchfork
long time no read/see :wink:

Danke für die ausführlichen beispiele. Aus Zeitgründen kann ich mir das wohl erst nächste Woche genauer anschauen.

Um das Beispiel komplett zu machen, was wäre der Inhalt von sc_avq_perf_1.sql ?

“leider” applikationsspezifisch - darf ich nicht raus geben. Was genau fehlt dir da? oder was ist da unklar?
Normales SQL

LG
Daniel

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.