Unter Windows Prozesse mit gleichem Namen aber unterschiedlichen Pfaden mit Performancedaten überwachen

Hallo,

wir möchten gern unter Windows den Serverprozess (sqlservr.exe) jeder Instanz eines MSSQL-Servers überwachen und brauchen da für jeden der Prozesse jeweils CPU- und RAM-Auslastung. Die Prozesse jeder Instanz lassen sich nur anhand des Pfades der exe unterscheiden, ansonsten heißen sie alle sqlservr.exe.

Wenn ich es richtig sehe bekomme ich über das Process-Discovery per SNMP zwar die Prozesse mit dem Pfad, jedoch keine Performance-Daten. Im normalen Agent-Output bekomme ich den Prozessnamen mit den Performancedaten, kann die einzelnen Prozesse aber mangels Pfad keiner MSSQL-Instanz zuordnen.

Hat jemand eine gute Idee, wie ich die Prozesse anhand des Pfades unterscheiden und mit Performancedaten überwachen kann?

Bitte unter Windows kein SNMP verwenden.
Im Agenten gibt es die Option komplette Pfade mit zu übertragen.

Sektion

ps:
    enabled: yes
    use_wmi: yes
    full_path: yes # This value has effect only when use_wmi is set

Wichtig ist hier die “full_path” Option. “enabled” und “use_wmi” sind per Default aktiv wenn ich mich nicht ganz täusche.

1 Like

Vielen Dank, darauf wäre ich nie gekommen.

Leider klappt es noch nicht so richtig.

In der check_mk.user ist nun konfiguriert:

ps:
    enabled: yes
    use_wmi: yes
    full_path: yes

Das habe ich dann gespeichert und den Agenten neu gestartet.

Leider hat es nichts gebracht, im Agent-Output steht in der ps-Section noch immer sowas wie:

<<<ps:sep(9)>>>
|(SYSTEM,64,4,0,0,0,0,62756285468750,0,2,3240703)|System Idle Process|
(...)
|(SYSTEM,3464,140,0,4,0,0,43959375000,1209,112,3240703)|System|
|(SYSTEM,2147490608,1260,0,284,0,0,104218750,57,3,3240702)|smss.exe|
|(SYSTEM,2147533424,4796,0,376,2,405781250,1552187500,517,11,3240659)|csrss.exe|
|(\\NT AUTHORITY\SYSTEM,174360,17312,0,4944,12,104375000,134375000,270,9,3240508)|nsrexecd.exe|
|(\\NT AUTHORITY\SYSTEM,2147744604,44156,0,4492,37,6105468750,7308125000,833,38,3240498)|SearchIndexer.exe|

Hier hätte ich nun vor den .exe-Filenamen den Pfad erwartet. Bei keinem der Prozesse steht ein Pfad daneben. Habe ich noch etwas vergessen, zu konfigurieren?

Sicher, dass die geänderte Konfiguration auch verwendet wird?
Bei mir sehen die einzelnen Zeilen wie folgt aus.

(SYSTEM,2151768484,14260,0,16164,3,156250,468750,167,11,7)      C:\WINDOWS\uus\AMD64\MoUsoCoreWorker.exe
(SYSTEM,2151767740,13476,0,22432,4,2968750,1875000,233,10,7)    sppsvc.exe
(SYSTEM,2151780036,18436,0,18516,10,781250,2031250,272,10,1)    C:\WINDOWS\system32\wbem\wmiprvse.exe

Hmm, keine Ahnung, was ich da gestern gemacht habe, jetzt klappt es jedenfalls. Vielen Dank :slight_smile:

Leider bringt mich das zum nächsten Problem: Wie bringe ich denn der Agent-Bakery bei, dass ich diese Parameter bei einer bestimmten Hostgroup setzen möchte oder er zumindest meine manuellen Änderungen nicht bei jedem Agent-Update wieder überschreibt?

Die betreffende Regel lautet - “Finetune Windows process monitoring”

Super, danke :grinning: :grinning: :grinning:

Jetzt läufts mit dem Pfaden und die Prozesse werden auch discovert. Leider werden nun aber alle discoverten Prozesse zu einem Check zusammengefasst. Wir bräuchten die Performancedaten jedoch einzeln für jeden MSSQL-Serverprozess. Hier habe ich nur die Rule " Memory and CPU of processes on Windows" gefunden, die aber wmic erfordert und lt. Doku auch deprecated ist.

Hast Du hier auch noch einen guten Tipp, wie ich das hinbekomme?

Du musst für jeden Prozess welchen du finden willst eine eigene Regel mit eigenem Pattern für das Matching erstellen.
Für das Erstellen der Regeln einfach “Process discovery” benutzen.
Das sollte wie gewünscht funktionieren.

Das klappt leider nicht. Auch wenn ich verschiedene Regeln beim “Process-Discovery” für die verschiedenen Pfade anlege kommt zum Schluß doch wieder nur ein Service heraus, der alle Prozesse zusammengefasst darstellt. Anscheinend wird da im Hintergrund nach dem Prozessnamen gruppiert.

Das geht, hab ich selbst auch in Verwendung für verschiedene Oracle Instanzen welche sich nur in Pfaden oder Aufrufparametern unterscheiden.
Kannst ja mal eine Discovery Regel zeigen wie die ausschaut.

Ich hänge mal einen Screenshot der Rules an.

Die Pfade mit den Prozessen aus dem Agent-Output sind:

C:\Program Files\Microsoft SQL Server\MSSQL14.INSTANZ4\MSSQL\Binn\sqlservr.exe -sINSTANZ4
C:\Program Files\Microsoft SQL Server\MSSQL15.INSTANZ5\MSSQL\Binn\sqlservr.exe -sINSTANZ5
C:\Program Files\Microsoft SQL Server\MSSQL14.INSTANZ3\MSSQL\Binn\sqlservr.exe -sINSTANZ3
C:\Program Files\Microsoft SQL Server\MSSQL14.INSTANZ2\MSSQL\Binn\sqlservr.exe -sINSTANZ2

Nach dem Discovery kommt dann:

Hallo,

dein Process Name muss unterschiedlich sein, sonst fasts er natürlich wieder alles zusammen. Der process name ist das, was dein Service Name am Ende wird.

Das ist ja genau das Problem, welches wir versuchen, zu lösen. Es sollen Prozesse mit gleichem Namen aber unterschiedlichen Pfaden überwacht werden (siehe meinen ersten Post).

Der Process Name wird nicht verwendet, um die Prozesse zu finden, sondern deinen Service zu bezeichnen. Ändere mal die rules und nenne die Prozesse INSTANZ<X>, lasse aber das Process Matching so wie jetzt. Damit sollte für jeder deiner Rule ein eigener Service entstehen.

1 Like

Du kannst an der Stelle sogar mit regular expression match groups arbeiten und deine Rules auf eine reduzieren und dennoch alle Prozesse einzeln haben. In diesem Fall würde deine Regel so aussehen:

Process Name: MSSQL_%s
Process Match: .MSSQL[0-9]{2}.([A-Z0-9])\.*

EDIT: Deine Services heißen dann proc_MSSQL_INSTANZ<X>
EDIT2: Vorteil an der Methode ist, dass sobald eine neue Instanz erstellt wird, die auch automatisch mit inventarisiert wird, ohne das eine neue Rule erstellt werden muss.

Beispiel bei uns für SAP-Services:

4 Likes

Cool, vielen Dank. Das hat mir sehr geholfen.

Nach dem Ändern des “Process Name” habe ich nun wie gewünscht für jeden Prozess einen eigenen Check. Mit den regular expression match groups muß ich mich mal näher beschäftigen, das klappt noch nicht so richtig. Ist aber erstmal nicht schlimm, bei uns haben die Instanzen überall feste Namen die ich mit ein paar einzelnen Regeln erfassen kann.

1 Like