Folgender Sachverhalt: SCOM soll ueber seinen Linux Agent eine Logdatei ueberwachen. In dieser Logdatei tauchen bei Eingabe eines falschen API-Keys Eintraege nach folgendem Muster auf: belanglosertext HTTP/1.1" 403 48 "-" "belanglosertext" Im SCOM habe ich daraufhin zunaechst folgende Regexp angegeben: HTTP\/[\d.]+.\s+(?:403)\s+(4[0-9])\s+ Welche auch wie vorhergesehen den wesentlichen Teil der Fehlermeldung erkennt, sofern man sie mittels einem der Zahlreichen Regex-Checker im Netz ueberprueft. (der wesentliche Teil lautet HTTP/1.1" 403 {eine zweistellige Zahl zwischen 40 und 49}) Auch die Eingabemaske von SCOM bietet eine Moeglichkeit der Ueberpruefung an, welche den angegebenen Ausdruck als gueltig erkennt. Die Logdatei des Linux Agents unter /var/opt/microsoft/scx/log/scx.log gibt aber folgende Fehlermeldung aus und das Event wird ignoriert: SCXLogFileProvider DoInvokeMethod - invalid regexp : HTTP\/[\d.]+.\s+(?:403)\s+(4[0-9])\s+ Nun habe ich ein wenig recherchiert und bin auf diese Seite hier gestossen: https://blogs.technet.microsoft.com/systemcenterjp/2018/05/21/scom-linux-monitoring-regex/ (nur auf Japanisch) Welche suggeriert, dass die Ueberpruefung in der Eingabemaske das .NET Regex verwendet, der Linux Agent wohl das POSIX BRE. Wenn ich nun den oeben angegebenen Ausdruck nach POSIX BRE umforme, funktioniert es jedoch ebenfalls nicht. HTTP\/[0-9.]{1,}.:blank:{1,}403:blank:{1,}(4[0-9]):blank: (Die online Tools kommen damit allerdings auch klar) Nun meine Frage: Gibt es bei SCOM sonst noch etwas zu beachten wie man eine Regexp definieren soll? Da ich selbst aus der Linux/Unix Ecke komme, kenne ich mich mit den MS Produkten nur bedingt aus und wuerde mich ueber Loesungsansaetze freuen.
> HTTP\/[\d.]+.\s+(?:403)\s+(4[0-9])\s+ > > die Ueberpruefung in der Eingabemaske das .NET Regex verwendet, > der Linux Agent wohl das POSIX BRE. Das "(?:403)" lässt eher PCRE vermuten - ein simples "403" sollte das gleiche machen.
foobar schrieb: > Das "(?:403)" lässt eher PCRE vermuten Korrekt. Beim ersten Ausdruck handelt es sich tatsaechlich um PCRE. Die ueberarbeitete Version wurde aufgrund eines Formatierungsfehlers dann im Beitrag nicht mehr korrekt dargestellt. Also hier nochmals:
1 | HTTP\/[0-9.]{1,}.[[:blank:]]{1,}403[[:blank:]]{1,}(4[0-9])[[:blank:]] |
Mal ins Blaue...
1 | HTTP\/[0-9.]\+.[[:blank:]]\+403[[:blank:]]\+(4[0-9])[[:blank:]] |
oder
1 | HTTP\/[0-9.]\{1,\}.[[:blank:]]\{1,\}403[[:blank:]]\{1,\}(4[0-9])[[:blank:]] |
versuchen wenn er keinen Fehler verursacht aber nicht "trifft", tausch mal 'blank' gegen 'space'
Unter SCOM konnte ich es noch nicht testen aber in der Bash funktioniert es nicht. Ich habe die Regexp noch mal ueberarbeitet und nun funktioniert sie jedenfalls in der Bash.
1 | (HTTP[^"]*" (403)[[:space:]](4[0-9])[[:space:]]) |
Das Problem das ich am häufigsten mit RegExp habe, ist in der Tat das manches bis zum Exzess escaped werden muss (in besonders blöden implementationen sogar doppelt) generell ist "+" ein "1 oder mehr" Quantifizierer, genau wie "{1,}" beides muss soweit Herr Internetz sagt in SCOM escaped sein also als "\+" bzw als "\{1,\}" in der Bash wäre beides falsch da darf es nicht escaped sein, Dein Ergebniss ist also soweit korrekt bis hier :D
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.