Monitoring Correlation Logs¶
Product observability enables rapid debugging of product issues. The Micro Integrator enables observability using Correlation logs. Correlation logs allow you to monitor individual HTTP requests from the point that a message is received by the Micro Integrator until the corresponding response message is sent back to the original message sender. That is, the complete round trip of an HTTP message (client → Micro Integrator → back-end → Micro Integrator → client) can be tracked and analyzed using a log file.
When Correlation logs are enabled for the Micro Integrator server, a separate log file named correlation.log
is created in the <MI_HOME>/repository/logs/
directory. Every HTTP message that flows through the ESB and between the Micro Integrator and external clients undergoes several state changes. A new log entry is created in the correlation.log
file corresponding to the state changes in the round trip of a single HTTP request. A Correlation ID assigned to the incoming HTTP request is assigned to all the log entries corresponding to the request. Therefore, you can use this Correlation ID to easily locate the logs relevant to the round trip of a specific HTTP request and, thereby, analyze the behavior of the message flow.
Enabling Correlation logs¶
At the server start-up¶
You can enable Correlation logging by passing a system property.
-
If you want Correlation logs to be enabled every time the server starts, add the following system property to the product start-up script (stored in the
<MI_HOME>/bin/
directory) and set it totrue
.-DenableCorrelationLogs=true \
-
Alternatively, you can pass the system property at the time of starting the server by executing the following command:
- On Linux/MacOS/CentOS:
sh micro-integrator.sh -DenableCorrelationLogs=true
- On Windows:
micro-integrator.bat -DenableCorrelationLogs=true
- On Linux/MacOS/CentOS:
Now when you start the Micro Integrator, the correlation.log
file is created in the <MI_HOME>/repository/logs/
directory.
During the runtime¶
-
You can enable correlation logging by invoking the configs resource of the Management API. For more information, see enable/disable correlation logs using the Management API.
-
Alternatively, you can enable correlation logging using the MI dashboard.
-
You cannot disable the correlation logs during runtime if the correlation logs are enabled using the system property.
Sending an HTTP request with a Correlation ID¶
When the client sends an HTTP request to the Micro Integrator, a Correlation ID for the request can be passed using the Correlation header that is configured in the Micro Integrator. By default, the Correlation header is activity_id
. If you want to change the default Correlation header, see the topic on configuring Correlation logs. If the client does not pass a Correlation ID in the request, the Micro Integrator will generate an internal value and assign it to the request. The Correlation ID assigned to the incoming request is assigned to all the log entries that are related to the same request.
Shown below is the POST request that is sent using the CURL client. Note that the Correlation ID is set in this request.
curl -X POST --data @request.json http://localhost:8280/healthcare/categories/surgery/reserve -H "Content-Type:application/json" -H "activityid:correlationID"
Accessing the Correlation logs¶
If you know the Correlation ID of the HTTP request that you want to analyze, you can isolate the relevant logs as explained below.
-
Open a terminal and navigate to the
<MI_HOME>/repository/logs/
directory where thecorrelation.log
file is saved. -
Execute the following command with the required Correlation ID.
Replace
<correlation_ID>
with the required value.bash cat correlation.log | grep "<correlation_ID>"
Shown below is an example of Correlation log entries corresponding to the round trip of a single HTTP request.
2021-11-30 15:27:27,262|correlationID|HTTP-Listener I/O dispatcher-5|0|HTTP State Transition|http-incoming-17|POST|/healthcare/categories/surgery/reserve|REQUEST_HEAD
2021-11-30 15:27:27,262|correlationID|HTTP-Listener I/O dispatcher-5|0|HTTP State Transition|http-incoming-17|POST|/healthcare/categories/surgery/reserve|REQUEST_BODY
2021-11-30 15:27:27,263|correlationID|HTTP-Listener I/O dispatcher-5|1|HTTP State Transition|http-incoming-17|POST|/healthcare/categories/surgery/reserve|REQUEST_DONE
2021-11-30 15:27:27,265|correlationID|HTTP-Sender I/O dispatcher-4|42173|HTTP State Transition|http-outgoing-4|POST|http://localhost:9090/grandoaks/categories/surgery/reserve|REQUEST_HEAD
2021-11-30 15:27:27,265|correlationID|HTTP-Sender I/O dispatcher-4|0|HTTP State Transition|http-outgoing-4|POST|http://localhost:9090/grandoaks/categories/surgery/reserve|REQUEST_DONE
2021-11-30 15:27:27,267|correlationID|HTTP-Sender I/O dispatcher-4|2 |HTTP|sourhttp://localhost:9090/grandoaks/categories/surgery/reserve|BACKEND LATENCY
2021-11-30 15:27:27,267|correlationID|HTTP-Sender I/O dispatcher-4|2|HTTP State Transition|http-outgoing-4|POST|http://localhost:9090/grandoaks/categories/surgery/reserve|RESPONSE_HEAD
2021-11-30 15:27:27,267|correlationID|HTTP-Sender I/O dispatcher-4|0|HTTP State Transition|http-outgoing-4|POST|http://localhost:9090/grandoaks/categories/surgery/reserve|RESPONSE_BODY
2021-11-30 15:27:27,267|correlationID|HTTP-Sender I/O dispatcher-4|0|HTTP State Transition|http-outgoing-4|POST|http://localhost:9090/grandoaks/categories/surgery/reserve|RESPONSE_DONE
2021-11-30 15:27:27,269|correlationID|HTTP-Listener I/O dispatcher-5|6|HTTP State Transition|http-incoming-17|POST|/healthcare/categories/surgery/reserve|RESPONSE_HEAD
2021-11-30 15:27:27,269|correlationID|HTTP-Listener I/O dispatcher-5|0|HTTP State Transition|http-incoming-17|POST|/healthcare/categories/surgery/reserve|RESPONSE_BODY
2021-11-30 15:27:27,269|correlationID|HTTP-Listener I/O dispatcher-5|0|HTTP State Transition|http-incoming-17|POST|/healthcare/categories/surgery/reserve|RESPONSE_DONE
2021-11-30 15:27:27,269|correlationID|HTTP-Listener I/O dispatcher-5|7|HTTP|http-incoming-17|POST|/healthcare/categories/surgery/reserve|ROUND-TRIP LATENCY
Reading Correlation logs¶
The pattern/format of a Correlation log is shown below along with an example log entry.
Time Stamp|Correlation ID|Thread name|Duration|Call type|Connection name|Method type|Connection URL|HTTP state
2021-10-26 17:34:40,464|de461a83-fc74-4660-93ed-1b609ecfac23|HTTP-Listener I/O dispatcher-3|535|HTTP|http-incoming-3|GET|/api/querydoctor/surgery|ROUND-TRIP LATENCY
The detail recorded in a log entry is described below.
State | Description |
---|---|
Time Stamp | |
Correlation ID | Each log contains a Correlation ID, which is unique to the HTTP request. A client can send the Correlation ID in the header of the HTTP request. If this Correlation ID is missing in the incoming request, the ESB will generate one for the request. The HTTP header that carries the Correlation ID is configured in the ESB. |
Thread name | |
Duration | The duration (given in milliseconds) depends on the type of log entry:
|
Call type | There are two possible call types:
|
Connection name | |
Method type | |
Connection URL | The connection URL of the external client with which the message is being communicated. For example, if the message is being read from the client, the connection URL corresponds to the client sending the message. However, if the message is being written to the backend, the URL corresponds to the backend client. |
HTTP state | Listed below are the state changes that a message goes through when it flows through the ESB, and when the message flows between the ESB and external clients. Typically, a new log entry is generated for each of the states. However, there can be two separate log entries created for one particular state (except for BACKEND LATENCY and ROUND-TRIP LATENCY) depending on whether the message is being read or written. You can identify the two separate log entries from the connection URL explained above.
|
Configuring Correlation Logs (Optional)¶
For information, see Configuring Correlation Logs.
Top