Distributed Logging mit der Enterprise Library

In den Beiträgen

wurden schon einige Grundlagen des Logging Application Blocks der Enterprise Library erläutert. In diesem Beitrag geht es nun um das Logging mit der Message Queuing (MSMQ) von Microsoft. MSMQ ist ein Warteschlangen System. Vereinfacht gesagt stellt man Nachrichten ein und ein Verwender holt diese ab und verarbeitet diese Nachrichten. Dieses Szenario wird oft in verteilten Anwendungen eingesetzt.

Grundlegender Ablauf

Um Log-Einträge an einem zentralen Ort zu verwalten, wird die Applikation so konfiguriert, dass alle anfallenden Log-Einträge an einen so genannten „Message Queue Trace Listener“ gesendet werden. Der Logging Application Block legt daraufhin einen Eintrag in der Message Queuing-Warteschlange an. Der „Enterprise Library Distributor Service“ arbeitet diese Warteschlange ab und schreibt die entsprechenden Einträge dann in ein konfiguriertes Logging-Ziel. Logging-Ziel kann z.B. eine einfache Text-Datei, eine XML-Datei oder eine Datenbank sein. Zur Verdeutlichung das folgende Schaubild:

MSMQ_Distributed_Logging_01

Der Ablauf sieht folgendermaßen aus:

  1. Applikation auf Rechner A ruft die Enterprise Library API auf um einen Log-Eintrag zu schreiben
  2. Enterprise Library benutzt den Binary-Formater und stellt den serialisierten Log-Eintrag in die MSMQ-Queue
  3. MSMQ sendet den Log-Eintrag zu der Ziel-Queue auf Rechner C
  4. Der Enterprise Library Distributor Service pollt auf diese Ziel-Queue (Zeitspanne des Polling ist parametrierbar)
  5. Der Enterprise Library Distributor Service ruft die Enterprise Library API auf und serialisiert den Queue-Eintrag in einen entsprechenden Log-Eintrag (z.B. in eine Text-Datei, XML-Datei, Datenbank usw.)
  6. Danach wird der Queue-Eintrag aus der MSMQ-Queue entfernt

Installation MSMQ

Message Queuing muss sowohl auf Client als auch auf dem Server installiert werden! Unter Windows 7 kann das Message Queuing wie folgt installiert werden (Systemsteuerung -> Programme -> Windows-Funktionen aktivieren oder deaktivieren):

MSMQ_Distributed_Logging_02

Der oben gezeigten Screenshot zeigt die Installation unter Windows 7. Unter Windows Server 2008R2 ist MSMQ unter den Server-Rollen zu finden:

Installation unter Windows Server 2008R2

Nachdem die MSMQ installiert wurde muss eine nicht transaktionale private Warteschlange erstellt werden, an die alle Log-Meldungen gesendet werden. Ein transaktionale Warteschlange würde auch funktionieren ist aber nicht notwendig, da der MSMQ Handler der Enterprise Library keine verteilten Transaktionen verwendet. Das ganze kann über die Computerverwaltung konfiguriert werden (Start -> Ausführen -> compmgmt.msc):

MSMQ_Distributed_Logging_04

Installation Enterprise Library Distributor Service

Um den Distributor Service der Enterprise Library zu installieren müssen die folgenden Schritte durchgeführt werden:

  • Der Logging Application Block, der Enterprise Library Core, die MSMQDistributor.exe Datei und MSMQDistributor.exe.config müssen auf den Rechner kopiert werden, der die Einträge aus der Message Queue liest. Auf diesem Computer muss die MSMQ installiert sein. Dieser Computer kann der gleiche Computer sein auf dem die Applikation läuft, es kann aber auch ein anderer Rechner in der gleichen Domäne sein.
  • Darüber hinaus müssen alle Dateien auf den Rechner kopiert werden, die von den einzelnen Trace Listenern verwendet werden, z.B. wenn in eine Datenbank geloggt werden soll muss der Data Access Application Block auf den Rechner kopiert werden, auf dem der Distributor Service läuft.
  • Anlegen einer entsprechenden Message Queue.
  • MSMQDistributor.exe.config Konfigurationsdatei editieren. Hierfür kann nicht das Konfigurationstool der Enterprise Library verwendet werden. Hier muss das Attribut „msmqPath“ den Namen der neu angelegten Queue erhalten (Standardwert ist: „.\Private$\entlib“)
  • Nun muss der Enterprise Library Distributor Service installiert werden. Am besten über das Kommandozeile mit dem Befehl: installutil -i msmqdistributor.exe. (Das Installer-Tool, Installutil.exe, befindet sich im .NET Framework Verzeichnis, z.B. C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727)! Installation als Administrator ausführen und Service unter dem lokalen Systemkonto laufen lassen!

War die Installation erfolgreich sollte der Dienst verfügbar sein:

MSMQ_Distributed_Logging_05

Nachdem der Service installiert wurde, kann dieser über die Dienste-Verwaltung gestartet werden. Alternative kann man folgenden Kommandozeilen-Befehl verwenden: net start „Enterprise Library Distributor Service“

Weitere Hinweise zur Installation: http://msdn.microsoft.com/en-us/library/ff664428%28v=pandp.50%29.aspx

Konfiguration

Innerhalb dieses Szenarios gibt es zwei .NET-Konfigurationsdateien für das Logging. Die eine Konfigurationsdatei befindet sich auf der Clientseite (schreiben von Log-Meldungen in die MSMQ-Warteschlange). Die andere Konfigurationsdatei befindet sich auf der Seite des MSMQ-Handlers (Enterprise Library Distributor Service). Hier empfiehlt es sich das Konfigurationstool der Enterprise Library zu verwenden.

Client-Konfiguration

MSMQ_Distributed_Logging_06

Enterprise Library Distributor Service Konfiguration

MSMQ_Distributed_Logging_07

Beispiel-Szenarios

Hier nun einige Beispiel-Szenarien, die in diesem Zusammenhang denkbar wären.

Szenario 1

In diesem Szenario werden alle benötigten Komponenten auf einem Rechner installiert.

MSMQ_Distributed_Logging_08

Szenario 2

In diesem Szenario wird das Logging auf zwei Rechner verteilt. Die Meldungs-Queue und der Enterprise Library Distributor Service werden auf einem Rechner installiert, wohingegen das eigentliche Logging-Ziel (z.B. eine MSSQL-Datenbank, XML-Dateien, usw.) auf einem weiteren Rechner eingerichtet wird.

MSMQ_Distributed_Logging_09

Szenario 3

In diesem Szenario sind die einzelnen Komponenten jeweils auf einem separaten Rechner installiert.

MSMQ_Distributed_Logging_10

Literaturverzeichnis und Weblinks

Abk.Quelle
[1]Using the Distributor Service
[2]Enterprise Library 5 Logging using MSMQ

One Response to Distributed Logging mit der Enterprise Library

  1.  

leave your comment

Fork me on GitHub