Skip to content

Commit 999bf31

Browse files
committed
check_httpv2_evn special summary
1 parent 7645af9 commit 999bf31

4 files changed

Lines changed: 81 additions & 5 deletions

File tree

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
# check_httpv2_evn - Erweiterte Inhaltsprüfung
2+
3+
## Beschreibung
4+
5+
Dieses Monitoring-Paket (MKP) enthält eine angepasste Version des `check_httpv2`-Plugins mit dem Namen `check_httpv2_evn`. Die Anpassung ermöglicht es, im Fehlerfall spezifische Teile aus dem Body einer HTTP-Antwort zu extrahieren und als Service-Zusammenfassung (Summary) in Checkmk anzuzeigen. Dies ist besonders nützlich für die Überwachung von APIs, die detaillierte Fehlermeldungen im JSON-Format zurückgeben.
6+
7+
## Funktionsweise
8+
9+
Die Kernfunktionalität basiert auf einer intelligenten Nutzung der Regex-Optionen des Checks:
10+
11+
1. **Invertierte Regex-Prüfung:** Anstatt auf einen "OK"-Zustand zu prüfen, wird ein regulärer Ausdruck konfiguriert, der den **Fehlerfall** beschreibt.
12+
2. **Fehlerfall-Erkennung:** Die Option `--body-regex-invert` wird verwendet. Das bedeutet:
13+
* **OK-Zustand:** Der Regex für den Fehlerfall findet **keine** Übereinstimmung im Antwort-Body. Durch die Invertierung ist der Check-Status **OK**.
14+
* **Fehler-Zustand:** Der Regex findet eine Übereinstimmung. Der Check geht in den Zustand **WARNING**.
15+
3. **Dynamische Ausgabe:** Im Fehlerfall wird der gesamte Text, der vom regulären Ausdruck gefunden wurde, als Service-Output verwendet. Die Standard-Fehlermeldung wird dadurch ersetzt.
16+
17+
## Konfiguration
18+
19+
Die Konfiguration erfolgt über das Regelwerk **"Setup > Services > Other services > Integrate Nagios plug-ins"**.
20+
21+
**Kommandozeilen-Beispiel:**
22+
23+
```
24+
check_httpv2_evn --url '$URL$' --method GET --body-regex '(?s)"msg":".*?".*"status":"-.*?".*"summary":\{.*\}' --body-regex-invert
25+
```
26+
27+
*Anmerkung: Weitere Parameter wie Authentifizierung (`--auth-user`, etc.) können bei Bedarf hinzugefügt werden.*
28+
29+
### Wichtige Parameter erklärt
30+
31+
* `--body-regex '(?s)"msg":".*?".*"status":"-.*?".*"summary":\{.*\}`'
32+
* Dieser reguläre Ausdruck ist das Herzstück. Er ist so gestaltet, dass er nur zutrifft, wenn ein negativer Status (z.B. `"status":"-1"`) im JSON vorkommt.
33+
* `(?s)`: Sorgt dafür, dass der Punkt `.` auch Zeilenumbrüche umfasst.
34+
* `\{` und `\}`: Die geschweiften Klammern des `summary`-Objekts müssen mit einem Backslash maskiert werden, da sie in Regex eine Sonderbedeutung haben.
35+
* Der Ausdruck ist so geschrieben, dass er die komplette relevante Zeile findet.
36+
37+
* `--body-regex-invert`
38+
* Dieser Schalter ist entscheidend. Er kehrt die Logik um und sorgt dafür, dass der Check nur dann fehlschlägt, wenn der Regex eine Übereinstimmung findet.
39+
40+
## Anwendungsbeispiel
41+
42+
Angenommen, eine API unter `https://sub.dom.tld/api/tool/spoolMonitor` wird überwacht.
43+
44+
**Antwort im OK-Fall:**
45+
```json
46+
{"msg":"ok","status":"1","summary":{"spoolsMissing":0,"spoolsTotal":42}}
47+
```
48+
Der Regex (`..."status":"-.*?"...`) findet keine Übereinstimmung. Wegen `--body-regex-invert` ist der Service-Status **OK**.
49+
50+
**Antwort im Fehlerfall:**
51+
```json
52+
{"msg":"spool error","status":"-1","summary":{"spoolsMissing":2,"spoolsTotal":42}}
53+
```
54+
Der Regex findet eine Übereinstimmung. Der Service-Status wird **WARNING**.
55+
56+
**Resultierender Service-Output in Checkmk:**
57+
```
58+
{"msg":"spool error","status":"-1","summary":{"spoolsMissing":2,"spoolsTotal":42}} (!)
59+
```
60+
61+
Diese Konfiguration ermöglicht eine sehr präzise und informative Überwachung von API-Endpunkten.

packages/check-http/src/checks.rs

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -408,10 +408,25 @@ fn check_body_matching(body: Option<&Body>, matcher: Vec<TextMatcher>) -> Vec<Op
408408
&format!("{}: {} ({})", match_text, m.inner(), match_predicate),
409409
)]
410410
} else {
411-
notice(
412-
State::Crit,
413-
&format!("{}: {} ({})", match_text, m.inner(), not_match_predicate),
414-
)
411+
let mut full_match_text = None;
412+
if let TextMatcher::Regex { regex, .. } = m {
413+
if let Some(captures) = regex.captures(&body.text) {
414+
// We have captures, so the regex matched. This only happens
415+
// in the "else" branch if the expectation was `false` (inverted match).
416+
// The user wants the full match in the output.
417+
if let Some(full_match) = captures.get(0) {
418+
full_match_text = Some(full_match.as_str().to_string());
419+
}
420+
}
421+
}
422+
if let Some(text) = full_match_text {
423+
notice(State::Warn, &text)
424+
} else {
425+
notice(
426+
State::Warn,
427+
&format!("{}: {} ({})", match_text, m.inner(), not_match_predicate),
428+
)
429+
}
415430
}
416431
})
417432
.collect::<Vec<_>>()

packages/check-http/src/http/check_httpv2_evn.md

Whitespace-only changes.

packages/check-http/src/version.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@
33
// conditions defined in the file COPYING, which is part of this source code package.
44

55
// This file is ignored by bazel and the version is set with a build flag.
6-
pub const VERSION: &str = "UNSET";
6+
pub const VERSION: &str = "2.4.0 for EVN by ITeratio";

0 commit comments

Comments
 (0)