OpenTelemetry is an incubating Cloud Native Computing Foundation project which provides an open source framework for tracking and correlating data as it passes between disparate applications. Designed to complement the existing App Connect Enterprise monitoring features, this new feature provides a light-weight method of instrumentation which enables an ACE integration server to export span data to OpenTelemetry collectors. OpenTelemetry collectors can be thought of as vendor-agnostic proxies that receive data before sending it on to one or more observability back-ends. This new feature makes it easy to use tools such as IBM Instana or Jaeger to help trace data as it flows across multiple protocols and applications. Support is provided for the Linux x86-64 platform and the feature works when ACE is installed on-premises using integration node owned servers or when ACE is installed into a container environment using independent integration servers. OpenTelemetry is enabled at the integration server level, and spans are created for all message flow nodes that support OpenTelemetry:
- MQInput, MQOutput, MQReply, MQGet, MQPublication
- HTTPInput, HTTPReply, HTTPRequest, HTTPAsyncRequest, HTTPAsyncResponse
- RESTRequest, RESTAsyncRequest, RESTAsyncResponse
- SOAPInput, SOAPReply, SOAPRequest, SOAPAsyncRequest, SOAPAsyncResponse
- CallableInput, CallableReply, CallableFlowInvoke, CallableFlowAsyncInvoke, CallableFlowAsyncResponse
To switch on OpenTelemetry, before starting your integration server uncomment the relevant properties in the template server.conf.yaml
file which you will find in your integration server's working directory as shown below:
To better understand the kind of observability which is possible through this new feature, let's consider a situation that involves a set of ACE message flows which are available through the Toolkit Tutorials Gallery in an example which shows how to use MQ and HTTP to link message flows in a coordinated request-reply scenario:
This scenario uses three separate message flows. The initial
RequestFlow
receives data from an HTTP client, stores state information to an MQ queue, before sending a transformed message to a backend application (simulated using another message flow) via a separate MQ queue. The
BackendApplicationFlow
replies to a third and final
ReplyFlow
which retrieves the state message before finally replying to the initial HTTP client. The graphic below shows an Instana Call chart displayed next to the message flows. The call chart is hierarchical - the span information injected into the trace messages is used to define relationships between the component parts of the solution.
Instana also provides a Timeline chart which can be used to track the time spent in each part of the solution: