APM Support Matrix

Middleware APM is built on OpenTelemetry, and offers several ways to instrument your applications, from deep, code-level language agents to kernel-level eBPF instrumentation that needs no changes to your application at all.

Because of this layered approach, if your application runs on Linux and communicates over HTTP, gRPC or common database protocols, Middleware can trace it, regardless of its programming language or runtime version, and without code changes.

This page summarizes which languages, runtime versions, frameworks and platforms are supported by each instrumentation method.

Instrumentation Methods#

Middleware APM supports the following instrumentation methods. Choose the method that best fits your platform and how much control you have over your application code and images.

MethodHow it worksCode or image changesDepth of visibility
Language agents and SDKsAdd the Middleware or OpenTelemetry agent to your applicationAgent or package added to the applicationCode-level spans, custom instrumentation, continuous profiling (where available)
Kubernetes auto-instrumentationThe OpenTelemetry Operator and Middleware language detector inject language agents into podsNoneSame as language agents
Amazon ECS auto-instrumentationThe mw-ecs CLI adds an init container and environment variables to your task definitionsNone (new task definition revision)Same as language agents
Linux systemd auto-instrumentationThe Linux agent injects language agents into systemd servicesNone (service restart)Same as language agents
IIS auto-instrumentationInstalls OpenTelemetry .NET automatic instrumentation for selected IIS App PoolsNoneSame as language agents
OBI (eBPF)Captures traces from the Linux kernel using eBPFNoneProtocol-level traces and RED metrics (request rate, errors and duration)
OpenTelemetry native SDKsUse any OpenTelemetry SDK and export over OTLP to MiddlewareSDK added to the applicationCode-level spans and custom instrumentation

Platform Support#

The table below shows which instrumentation methods are available on each platform. Language agents, SDKs and OpenTelemetry native SDKs are supported on every platform.

PlatformKubernetes auto-instrumentationECS auto-instrumentationLinux systemd auto-instrumentationIIS auto-instrumentationOBI (eBPF)Language agents and SDKs
Linux VMs and bare metal (including AWS EC2, Azure, GCP and Oracle Cloud Infrastructure)——✅—✅✅
Docker on Linux————✅✅
Docker Swarm————✅✅
Kubernetes (including EKS, AKS, GKE and OKE)✅————✅
Amazon ECS on EC2—✅———✅
Amazon ECS on Fargate—✅———✅
Windows Server with IIS———✅—✅
Serverless (for example, AWS Lambda and Google Cloud Run)—————✅

Language Support#

Instrumentation methods by language#

LanguageLanguage agent / SDKKubernetes auto-instrumentationECS auto-instrumentationLinux systemd auto-instrumentationIIS auto-instrumentationOBI (eBPF)
Java (including Kotlin and Scala)✅✅✅✅—✅
Python✅✅✅✅—✅
Node.js (including NestJS and Next.js)✅✅✅✅—✅
.NET✅✅——✅✅ (.NET on Linux)
Go✅✅———✅
PHP✅————✅
Ruby✅✅———✅
Rust✅ (OpenTelemetry SDK)————✅
C++✅ (OpenTelemetry SDK)————✅
Elixir and Erlang✅ (OpenTelemetry SDK)————✅
Swift✅ (OpenTelemetry SDK)————✅
Any other language on Linux—————✅

For languages without a dedicated Middleware agent, use the official OpenTelemetry SDK for your language and export data to Middleware over OTLP. See Getting Started with OpenTelemetry for endpoint and authentication details.

LanguageLanguage agent / SDK supportsOlder runtime versionsPopular frameworks and libraries
JavaJava 8+Supported with OBISpring Boot, Spring MVC, Spring WebFlux, Jakarta EE / Servlet, Tomcat, Jetty, JBoss / WildFly, Quarkus, Micronaut, Vert.x, JDBC, Hibernate, Kafka, RabbitMQ, gRPC
PythonPython 3.9+Supported with OBIDjango, Flask, FastAPI, Starlette, Tornado, Pyramid, Falcon, Celery, SQLAlchemy, psycopg / psycopg2, PyMySQL, PyMongo, Redis, Requests, httpx, aiohttp, gRPC, Kafka
Node.jsNode.js 18.17.1+Supported with OBIExpress, Fastify, Koa, Hapi, NestJS, Next.js 13.4+, pg, MySQL, MongoDB, Redis / ioredis, KafkaJS, gRPC
.NET.NET 6.0+; .NET Framework 4.6.2+ on IIS.NET Framework applications with older dependency versions are handled automatically by IIS auto-instrumentation; .NET on Linux with OBIASP.NET Core, ASP.NET MVC / Web API (.NET Framework), WCF, HttpClient, SqlClient, Entity Framework Core, gRPC
GoGo 1.17+Supported with OBIGin, Chi, net/http, gRPC, database/sql, GORM, go-pg, MongoDB driver
PHPPHP 8.0+Supported with OBILaravel, Symfony, Slim, PDO, cURL
RubyRuby 3.0+Supported with OBIRails, Sinatra, Rack
Rust, C++, Elixir / Erlang, SwiftAs supported by the OpenTelemetry SDK for the languageSupported with OBIAs supported by the OpenTelemetry instrumentation libraries for the language

Framework support for language agents comes from the OpenTelemetry instrumentation libraries. For the complete list for each language, see the OpenTelemetry registry of supported libraries and frameworks.

Choosing a Method#

OBI Requirements and Coverage#

OpenTelemetry eBPF Instrumentation (OBI) works independently of your application's language and runtime version, because it observes network and protocol activity from the Linux kernel.

  • Operating system: Linux with kernel 5.8 or later and BTF enabled, or kernel 4.18 or later on RHEL-family distributions (Red Hat, CentOS, Rocky Linux, Oracle Linux).
  • What it captures: Traces and RED metrics (request rate, errors and duration) for HTTP/HTTPS, HTTP/2, gRPC and common database and messaging protocols, such as SQL, Redis and Kafka.
  • What it does not capture: Code-level spans inside your application, custom instrumentation and continuous profiling. Use a language agent or SDK when you need this level of detail.