mikrocontroller.net

Forum: PC-Programmierung SCOM und Regexp


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Eric (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: foobar (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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.

Autor: Eric (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:
HTTP\/[0-9.]{1,}.[[:blank:]]{1,}403[[:blank:]]{1,}(4[0-9])[[:blank:]]

Autor: sid (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mal ins Blaue...
HTTP\/[0-9.]\+.[[:blank:]]\+403[[:blank:]]\+(4[0-9])[[:blank:]]
oder
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'

Autor: Eric (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.
(HTTP[^"]*" (403)[[:space:]](4[0-9])[[:space:]])

Autor: sid (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.