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.