Dynatrace OneAgent SDK for C: Service and transaction monitoring for C++ and other native applications

Beginning with Dynatrace OneAgent v1.133, we now provide beta support for deep monitoring of C++ and other native language applications on Linux x86 and Windows. This release is part of a much larger announcement that we will detail soon: the beta availability of the Dynatrace OneAgent SDK.

Dynatrace OneAgent SDK for C/C++

To use the OneAgent SDK, you need access to the source code of the application you want to monitor. The SDK enables you to instrument your application manually. The OneAgent SDK for C/C++ currently supports remote call tracing and SQL database request tracing and will be extended in the next months.

You can deploy your application as usual once you’ve compiled your application against the OneAgent SDK for C/C++. Instrumentation has no negative effect on your application. Instrumentation remains dormant on systems where Dynatrace OneAgent isn’t installed.

Automatic detection and deep monitoring of native applications

Deploy your native application on any system that’s monitored by Dynatrace. Note that you should restart your application if it was running at the time of OneAgent installation. OneAgent automatically detects that your application is instrumented with the SDK and immediately begins monitoring it on the request level, just as it does with Java and Node.js.

Note that while you do need to access the code of your native application to get the full OneAgent experience on a monitored system, you only need to restart the application once OneAgent is installed to begin monitoring.

Program samples

The following native programs are part of the samples that come with the SDK.

This is a simple sample program that takes in a remote call, calls another component, and makes a database call. Once a service starts on a monitored host, you’ll see the service listed on the Transactions & services page (see example below).

The OneAgent SDK is fully compatible with OneAgent. SDK-instrumented remote calls are shown in the form of RPC service services, which behave just like any other service. You get full access to all analysis and monitoring functionality, including auto-baselining and AI-based root cause analysis.

Notice that this service calls another service and a database, just as expected. Let’s take a look at the Service flow and Smartscape to get a sense of what’s going on here.

As you can see, OneAgent recorded six requests to the service sample1.input_processor. From here, we can analyze the individual requests in PurePaths view.

You can see that most of the time is spent in the process method, but the transform remote method on another service is also called.

Looking at the code level, we see the schematic structure of the recorded PurePath, along with all related timings.

Some database calls were recorded. You can see the newly detected database service that was traced via the SDK.

Extend AI-based root cause analysis

Dynatrace OneAgent SDK C/C++ provides more than just visibility into your C applications; it extends visibility across your application landscape. All discovered services and databases are monitored automatically with the same level of monitoring detail. This means that requests to the sample1 sample application are baselined along with all the SQL statements of the newly discovered database. If a service slows down, begins producing errors, or crashes, Dynatrace will detect the issue and identify the root cause.

What about Python, Ruby, Perl, and Erlang?

Python, Ruby, Perl, and Erlang can all make calls to C via language bindings. We don’t plan to add language bindings for all four of these languages ourselves, but we do hope to have something for Python later in 2018. Let us know if you want to build such language bindings on top of the Dynatrace SDK. We’ll be happy to host these in our GitHub repository.

Those who know me know that I'm passionate about 3 things: rock climbing, physics, and performance.
I've worked in performance monitoring and optimizations in enterprise environments for the better part of the last 10 years. Now as a Product Manager I am doing my best to build those experiences into Dynatrace.