Protokollierung der gesamten HTTP-Kommunikation mit Mule ESB

Mule ESB bietet mit der Standard Komponente HTTP-Request eine effektive Möglichkeit REST APIs innerhalb von Mule Anwendungen zu konsumieren. Konzepte wie API-led Connectivity als auch die zunehmende Anzahl wachsender externer APIs fördern die Vernetzung von Anwendungen und erhöhen somit die Anzahl der Kommunikationsendpunkte. In diesem Verbund von Anwendungen, Unternehmensprozessen und Schnittstellen entsteht sehr schnell der Bedarf die Kommunikation zwischen den Systemen und Partnern zu protokollieren.

Mule HTTP Request und Response Logger

Mule setzt auf dem Java Logging Framework Apache Log4j2 auf und erlaubt die Protokollierung der HTTP Request und Responses durch Setzen des Log-Levels DEBUG für die Logger HttpMessageLogger sowie com.ning.http. Neben der Log4j2 Konfigurationsdatei log4j2.xml, bietet die AnyPoint Platform die Möglichkeit Logger über die Weboberfläche zu konfigurieren.

<Loggers>
  <AsyncLogger name="org.mule.module.http.internal.HttpMessageLogger" level="DEBUG" />
  <AsyncLogger name="com.ning.http" level="DEBUG" />
</Loggers>

Im Mule ESB enthaltene Logger protokollieren anschließend alle HTTP Requests und Responses. In unserem Fall wird die Abfrage der REST API Ressource GET https://api.dataliquid.com/system/api/users/1 auf dem Log-Level DEBUG protokolliert.

Der im Mule HTTP Module verwendete Grizzly HTTP Client protokolliert den auszuführenden HTTP Request mit dem Logger com.ning.http.client.providers.grizzly.AsyncHttpClientFilter.

REQUEST: HttpRequestPacket (
   method=GET
   url=/system/api/users/1
   query=null
   protocol=HTTP/1.1
   content-length=-1
   headers=[
      Host=api.dataliquid.com:443
      User-Agent=AHC/1.0
      Connection=keep-alive
      Accept=*/*]
)

Mule HTTP Request

Der Mule HTTP Message Logger org.mule.module.http.internal.HttpMessageLogger zeichnet den ausgehenden HTTP Request auf.

GET /system/api/users/1 HTTP/1.1
Host: api.dataliquid.com:443
User-Agent: AHC/1.0
Connection: keep-alive
Accept: */*
Content-Type: application/json

Mule HTTP Response

Die eingehende HTTP Response wird ebenfalls durch den Logger org.mule.module.http.internal.HttpMessageLogger protokolliert.

HTTP/1.1 200 OK
Date: Thu, 13 Sep 2018 17:34:39 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 83
Connection: keep-alive
Vary: Origin, Accept-Encoding
Access-Control-Allow-Credentials: true
Cache-Control: public, max-age=14400
Pragma: no-cache
Expires: Thu, 13 Sep 2018 19:34:39 GMT

{
  "id": 1,
  "user_id": 1,
  "username": "jdoe"
}

Fazit

Durch die vorgestellten Logger bietet das Mule Framework die Möglichkeit die ausgetauschte HTTP Kommunikation im Logfile zu protokollieren. Der Speicherbedarf kann durch das erhöhte Log-Volumen schnell die bereitgestellten Speicherkapazitäten überschreiten. Darüberhinaus empfiehlt sich der Einsatz eines Log Management Systems um die Log Messages auch bei einer starken Frequentierung der Logs übersichtlich auszuwerten zu können.

Wie aufgezeigt werden in dem Log Level DEBUG alle Informationen der HTTP Kommunikation protokolliert. Darunter können sich auch sicherheitsrelevante Informationen (wie Client Id, Secrets, Credentials) oder sensible Daten (wie Kundenangaben, Kreditkarten, o.ä.) befinden. Die Log Level sollten daher nur im Bedarfsfall für Analysetätigkeiten oder im Fall von Fehlern aktiviert werden.

Nach oben