Systemüberwachung

Hintergrund

Bisher erfolgte eine Protokollierung nur in der Systemdatenbank.

Mit der Version 4.1.7 ist ein erweitertes Monitoring implementiert, welches umfangreiche Informationen zum zentralen Logserver senden kann.

Da wir für unsere eigenen Hosting Lösungen seit einiger Zeit Grafana als Überwachungssystem verwenden, ist eine Implementierung für diese Systemlandschaft erfolgt. Intern kann der Logger aber gegen andere ähnlich funktionierende Systeme ausgetauscht werden.

Sprechen Sie uns bei Bedarf dazu an.

Protokollierte Ereignisse

Übermittelt werden z.Z. folgende Ereignisse:

  • Erfolgreiche Anmeldungen.
  • Fehlgeschlagene Anmeldeversuche.
  • Alle Fehlermeldungen, unterschieden nach Fehlern aus Ajax-Requests und anderen.
  • Konfigurierbare Aktionen anhand von Schwellwerten für Ajax-Aktionen, abhängig von der Ausführungsdauer.
  • Informationen über den Start der Web-Anwendung.
  • Einträge, die via Cardo4.Env.ReportHandledError von Anwendungen erstellt werden.
  • cardo4 Anwendungen, für die ein SQL Update erforderlich ist (wird einmalig beim Start von cardo ermittelt)

Übermittelte Daten

Die folgenden Beschreibung bezieht sich auf die Übermittlung an Grafana Loki.

Es werden folgende "Label" statisch erstellt:

  • app: Der Name der Website, wie im IIS konfiguriert

  • machineName: Der Host-Name des generierenden Servers

  • level: Einer der Werte: trace, error, debug, info, warning

Alle weiteren vom System übergebenen Werte werden als JSON Objekt als Log-Line übergeben.

Die Eigenschaften des JSON Objektes sind dabei von der Art des Ereignisses abhängig.

Immer enthalten sind:

  • t: Der Text der Meldung, hier sind i.d.R. keine dynamischen Werte enthalten, so dass eine Gruppierung nach dem Label möglich ist

  • user: Der Anmeldename des ausführenden Nutzers

  • remoteAddr: Die (evtl. geforwardete) IP Adresse des Aufrufers

Bei Ereignissen vom Typ Fehler: (Ajax und andere):

  • type: .Net Typename der Exception

  • stackTrace: Der Stacktrace des Fehlers

Bei Ereignissen vom Typ Anmeldungen (Erfolgreich oder Fehler):

  • type: "login"

    Der Label level ist dann entweder error oder info.

Bei allen Ajax-Request (Fehler und bei definierten Schwellwerten):

  • ajaxMethode: Name der Methode

  • ajaxClass: Name der Klasse

    Bei Schwellwerten zusätzlich:

    • durationMs: Dauer der Aktion in Millisekunden.

Bei allen via Cardo4.Env.ReportHandledError geschriebenen:

  • type: "handledError"
  • affectedItem: - wie übergeben -

Ist die Option Monitoring.StoreAjaxParameters aktiviert, dann werden für die Ajax-Request ab Level "warning" auch die Argumente mit protokolliert.

Die Argumentnamen werden dabei mit prefix "p_", gefolgt von dem Namen, wie in der Methode, deklariert generiert.

Sicherheitshinweis: Alle Parameter oder Objekteigenschaften vom Typ IduIT.GeoLib.Net.EncryptedString oder Parameter oder Objekteigenschaften, die den (C#) Namen "pwd" oder "password" enthalten, werden dabei nicht mit protokolliert. Passen Sie ggf. die Argumente in Ajax-Methoden entsprechend an, damit im Protokoll keine sicherheitskritischen Daten enthalten sind.

Z.Z. gibt es hier teilweise Probleme, dass Werte in der Ausgabe vom Grafana in bestimmten Konstellationen nicht ausgegeben werden, wir hoffen auf Besserung :)

cardo Konfiguration

Per Default ist das Monitoring deaktiviert und kann in den App-Settings der web.config von cardo4 aktiviert und konfiguriert werden. Die Vorlage "web.config.template" die in den Updates ausgeliefert wird, enthält entsprechende Hinweise.

Der Platzhalter {PROJEKTNAME} ist optional, wenn nicht angegeben, dann gilt dieser für alle cardo Instanzen des Servers, der Punkt "." ist dann wegzulassen.

Als Endpunkt ist z.Z. nur Loki verfügbar. Hinterlegen Sie zur Aktivierung des Monitorings hier die Url zu der API ihrer Loki-Installation. Für den Zugriff ist z.Z. keine Proxyeinstellung vorgesehen. Wir gehen davon aus, dass der Server per Direktzugriff erreichbar ist.

<add key="{PROJEKTNAME}.Monitoring.GrafanaLoki.ApiEndpoint" value="http://MeinLokiServer:3100/loki/api/v1/push" />

Alle weiteren Argumente sind ohne Wirkung, wenn kein API Endpunkt eingestellt ist.

Um die Ausgabe der Argumente von Ajax-Methoden zu aktivieren, muss StoreAjaxParameters angegeben werden. Der Standardwert ist "false".

<add key="{PROJEKTNAME}.Monitoring.StoreAjaxParameters" value="false"/>

Neben Fehlern kann es auch sinnvoll sein, bei Überschreitung bestimmter Ausführungsdauer einen Protokolleintrag erstellen zu lassen. Dazu können Schwellwerte bestimmt werden, die bei Ajax-Methoden einen Protokolleintrag erzwingen.

Jeder Schwellwert wird dabei über eine Protokoll-Stufe und den Zeitbereich in Millisekunden, wann dieser zutrifft, definiert. Es wird dabei in der angegebenen Reihenfolge der erste Eintrag ermittelt, der zu der aktuellen Ausführungsdauer der Funktion passt. Wird keiner gefunden, wird keine Protokollierung ausgelöst.

Beachte: Ab der Stufe Warning werden, wenn auch StoreAjaxParameters mit true angegeben ist, die Argumente des Methodenaufrufs mit protokolliert.

<add key="{PROJEKTNAME}.Monitoring.Thresholds" value="warning:2000-3000;error:3000-" />

Jeder Eintrag besteht entspricht dem Format:

<TraceLevel>:<Untergrenze in Millisekunden>-<Obergrenze in Millisekunden>

Zwischen den Einträgen muss ein Semikolon als Trennzeichen angegeben werden.

Die im Beispiel angegeben Definition bedeutet dabei:

"Alle Ajax-Aufrufe die zwischen 2...3 Sekunden dauern als Warnung protokollieren, die Aufrufe die über 3 Sekunden dauern als Fehler protokollieren, alle anderen nicht protokollieren."

Oder, um alle Anfragen zu protokollieren (nicht empfohlen!):

<add key="{PROJEKTNAME}.Monitoring.Thresholds" value="warning:2000-3000;error:3000-;default:0-2000" />

Grafana - Einrichtung des Logpanels

In Grafana kann ein Log-Panel eingerichtet werden. Wählen Sie als Datenquelle den eingestellten Loki Server aus.

Folgende Abfrage bietet sich für die Ausgabe an:

{app !=""} | json | line_format "{{.app}}@{{.machineName}} : {{.t}} IP:{{.remoteAddr}}"

Ergibt dann eine Ausgabe folgender Art:

Grafana Monitor


Zuletzt geändert: 20.08.2021 12:05:35 (erstmals erstellt 08.07.2021)