From b9b5d7e80e6c1a5df03e9a5f5639a941eddfeed1 Mon Sep 17 00:00:00 2001 From: Dmitrii Zolotukhin Date: Thu, 9 Apr 2026 13:43:51 +0200 Subject: [PATCH 1/3] DES-7315 Documented how to use OTEL in MxOK. --- .../refguide/runtime/tracing-in-runtime.md | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/content/en/docs/refguide/runtime/tracing-in-runtime.md b/content/en/docs/refguide/runtime/tracing-in-runtime.md index 07344e6bb2a..a74f8628aae 100644 --- a/content/en/docs/refguide/runtime/tracing-in-runtime.md +++ b/content/en/docs/refguide/runtime/tracing-in-runtime.md @@ -159,6 +159,73 @@ To use the OpenTelemetry Collector with Datadog, follow these steps: 2. Install the `otelcol_contrib` package instead of `otelcol` to include Datadog support. 3. Run the collector with the [appropriate configuration](https://docs.datadoghq.com/opentelemetry/setup/collector_exporter/install/#2---configure-the-datadog-exporter-and-connector) adapted for Datadog. +## Sending Traces from Mendix on Kubernetes + +Mendix on Kubernetes can send OpenTelemetry traces to a standards-compliant OpenTelemetry Collector. + +Some cloud providers provide OpenTelemetry instrumentation Agents and will not work with the Mendix Runtime. +For example: + +* [Azure Application Insights](https://learn.microsoft.com/en-us/azure/azure-monitor/app/opentelemetry-enable) is incompatible with the standard OpenTelemetry instrumentation Agent bundled with the Mendix Runtime. + +### Installing Jaeger from a Helm chart + +To get an OpenTelemetry collector installed into a Kubernetes cluster, contact your cluster admin. + +For quick experiments or non-production use cases, Jaeger can be installed using the [official Helm chart](https://github.com/jaegertracing/helm-charts/tree/jaeger-4.7.0/charts/jaeger). + +{{% alert color="warning" %}} +The default Jaeger configuration is not production-grade: it doesn't have any authentication and stores all traces in-memory. + +To get a production-grade OpenTelemetry collector installed into a Kubernetes cluster, contact your cluster admin. +{{% /alert %}} + +To install Jaeger into a Kubernetes cluster (except OpenShift), run the following commands in a Bash prompt: + +```shell +HELM_RELEASE=mx-jaeger +helm repo add jaegertracing https://jaegertracing.github.io/helm-charts +helm install $HELM_RELEASE jaegertracing/jaeger --version='~4.7' \ + --set storage.type=memory +``` + +To install Jaeger into an OpenShift cluster, run the following commands in a Bash prompt: + +```shell +HELM_RELEASE=mx-jaeger +helm repo add jaegertracing https://jaegertracing.github.io/helm-charts +helm install $HELM_RELEASE jaegertracing/jaeger --version='~4.7' \ + --set storage.type=memory \ + --set jaeger.podSecurityContext=null +``` + +To access the Jaeger web UI, run the following command in a Bash prompt: + +```shell +HELM_RELEASE=mx-jaeger +kubectl port-forward svc/${HELM_RELEASE} 16686:16686 +``` + +To send traces to this OpenTelemetry Collector, use the following hostname format (where `${HELM_RELEASE}` is the value of `HELM_RELEASE` used during installation, and `${NAMESPACE}` is the namespace where the Jaeger Helm chart was installed): + +``` +${HELM_RELEASE}.${NAMESPACE}.svc.cluster.local +``` + +for example, `mx-jaeger.example-namespace.svc.cluster.local`. + +### OpenTelemetry Collector + +To send logs and traces from a Mendix on Kubernetes environment to an OpenTelemetry collector, set the _Custom JVM Options_ to : + +``` +-javaagent:/opt/mendix/runtime/agents/opentelemetry-javaagent.jar -Dotel.javaagent.extensions=/opt/mendix/runtime/agents/mendix-opentelemetry-agent-extension.jar -Dotel.service.name=${APP_NAME} -Dotel.exporter.otlp.traces.endpoint=http://${OTEL_HOSTPORT}:4318/v1/traces -Dotel.exporter.otlp.traces.protocol=http/protobuf +``` + +Replace `${APP_NAME}` with a meaninful identifier for your environment (service), and `${OTEL_HOST}` with the hostname of the OpenTelemetry Collector. + +Depending on how the OpenTelemetry Collector is configured, the values of `-Dotel.exporter.otlp.traces.endpoint` and `-Dotel.exporter.otlp.traces.protocol` might need to be modified. + ## Include Metrics and Logs in OpenTelemetry You can also collect metrics data (CPU load, memory, etc.) and logs using OpenTelemetry. From ead2b8c5e45725b971be569508b4fe8338c48aa2 Mon Sep 17 00:00:00 2001 From: Dmitrii Zolotukhin Date: Mon, 13 Apr 2026 14:02:39 +0200 Subject: [PATCH 2/3] Fixed OTEL_HOST variable name. --- content/en/docs/refguide/runtime/tracing-in-runtime.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/refguide/runtime/tracing-in-runtime.md b/content/en/docs/refguide/runtime/tracing-in-runtime.md index a74f8628aae..982b0361f73 100644 --- a/content/en/docs/refguide/runtime/tracing-in-runtime.md +++ b/content/en/docs/refguide/runtime/tracing-in-runtime.md @@ -219,7 +219,7 @@ for example, `mx-jaeger.example-namespace.svc.cluster.local`. To send logs and traces from a Mendix on Kubernetes environment to an OpenTelemetry collector, set the _Custom JVM Options_ to : ``` --javaagent:/opt/mendix/runtime/agents/opentelemetry-javaagent.jar -Dotel.javaagent.extensions=/opt/mendix/runtime/agents/mendix-opentelemetry-agent-extension.jar -Dotel.service.name=${APP_NAME} -Dotel.exporter.otlp.traces.endpoint=http://${OTEL_HOSTPORT}:4318/v1/traces -Dotel.exporter.otlp.traces.protocol=http/protobuf +-javaagent:/opt/mendix/runtime/agents/opentelemetry-javaagent.jar -Dotel.javaagent.extensions=/opt/mendix/runtime/agents/mendix-opentelemetry-agent-extension.jar -Dotel.service.name=${APP_NAME} -Dotel.exporter.otlp.traces.endpoint=http://${OTEL_HOST}:4318/v1/traces -Dotel.exporter.otlp.traces.protocol=http/protobuf ``` Replace `${APP_NAME}` with a meaninful identifier for your environment (service), and `${OTEL_HOST}` with the hostname of the OpenTelemetry Collector. From 3061e69286109230f11855568f9474d7d563775c Mon Sep 17 00:00:00 2001 From: katarzyna-koltun-mx <108737161+katarzyna-koltun-mx@users.noreply.github.com> Date: Mon, 4 May 2026 19:28:47 +0200 Subject: [PATCH 3/3] Update tracing-in-runtime.md --- .../refguide/runtime/tracing-in-runtime.md | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/content/en/docs/refguide/runtime/tracing-in-runtime.md b/content/en/docs/refguide/runtime/tracing-in-runtime.md index 982b0361f73..5776f767736 100644 --- a/content/en/docs/refguide/runtime/tracing-in-runtime.md +++ b/content/en/docs/refguide/runtime/tracing-in-runtime.md @@ -161,12 +161,9 @@ To use the OpenTelemetry Collector with Datadog, follow these steps: ## Sending Traces from Mendix on Kubernetes -Mendix on Kubernetes can send OpenTelemetry traces to a standards-compliant OpenTelemetry Collector. +Mendix on Kubernetes can send OpenTelemetry traces to a standards-compliant OpenTelemetry collector. -Some cloud providers provide OpenTelemetry instrumentation Agents and will not work with the Mendix Runtime. -For example: - -* [Azure Application Insights](https://learn.microsoft.com/en-us/azure/azure-monitor/app/opentelemetry-enable) is incompatible with the standard OpenTelemetry instrumentation Agent bundled with the Mendix Runtime. +Some cloud providers provide OpenTelemetry instrumentation agents and will not work with the Mendix Runtime. For example, [Azure Application Insights](https://learn.microsoft.com/en-us/azure/azure-monitor/app/opentelemetry-enable) is incompatible with the standard OpenTelemetry instrumentation agent bundled with the Mendix Runtime. ### Installing Jaeger from a Helm chart @@ -175,11 +172,11 @@ To get an OpenTelemetry collector installed into a Kubernetes cluster, contact y For quick experiments or non-production use cases, Jaeger can be installed using the [official Helm chart](https://github.com/jaegertracing/helm-charts/tree/jaeger-4.7.0/charts/jaeger). {{% alert color="warning" %}} -The default Jaeger configuration is not production-grade: it doesn't have any authentication and stores all traces in-memory. - -To get a production-grade OpenTelemetry collector installed into a Kubernetes cluster, contact your cluster admin. +The default Jaeger configuration is not production-grade, because it does not have any authentication and stores all traces in memory. To get a production-grade OpenTelemetry collector installed into a Kubernetes cluster, contact your cluster admin. {{% /alert %}} +#### Kubernetes Cluster + To install Jaeger into a Kubernetes cluster (except OpenShift), run the following commands in a Bash prompt: ```shell @@ -189,6 +186,8 @@ helm install $HELM_RELEASE jaegertracing/jaeger --version='~4.7' \ --set storage.type=memory ``` +#### OpenShift Cluster + To install Jaeger into an OpenShift cluster, run the following commands in a Bash prompt: ```shell @@ -199,6 +198,8 @@ helm install $HELM_RELEASE jaegertracing/jaeger --version='~4.7' \ --set jaeger.podSecurityContext=null ``` +#### Accessing the Jaeger Web UI + To access the Jaeger web UI, run the following command in a Bash prompt: ```shell @@ -206,17 +207,19 @@ HELM_RELEASE=mx-jaeger kubectl port-forward svc/${HELM_RELEASE} 16686:16686 ``` +#### Sending Traces + To send traces to this OpenTelemetry Collector, use the following hostname format (where `${HELM_RELEASE}` is the value of `HELM_RELEASE` used during installation, and `${NAMESPACE}` is the namespace where the Jaeger Helm chart was installed): ``` ${HELM_RELEASE}.${NAMESPACE}.svc.cluster.local ``` -for example, `mx-jaeger.example-namespace.svc.cluster.local`. +For example, `mx-jaeger.example-namespace.svc.cluster.local`. ### OpenTelemetry Collector -To send logs and traces from a Mendix on Kubernetes environment to an OpenTelemetry collector, set the _Custom JVM Options_ to : +To send logs and traces from a Mendix on Kubernetes environment to an OpenTelemetry collector, set the _Custom JVM Options_ to the following: ``` -javaagent:/opt/mendix/runtime/agents/opentelemetry-javaagent.jar -Dotel.javaagent.extensions=/opt/mendix/runtime/agents/mendix-opentelemetry-agent-extension.jar -Dotel.service.name=${APP_NAME} -Dotel.exporter.otlp.traces.endpoint=http://${OTEL_HOST}:4318/v1/traces -Dotel.exporter.otlp.traces.protocol=http/protobuf @@ -228,10 +231,7 @@ Depending on how the OpenTelemetry Collector is configured, the values of `-Dote ## Include Metrics and Logs in OpenTelemetry -You can also collect metrics data (CPU load, memory, etc.) and logs using OpenTelemetry. - -* See the [OpenTelemetry](/refguide/metrics/#opentelemetry) section of *Metrics* for a guide on how to setup metrics with OpenTelemetry. -* See [Request to Create New Log Subscriber in Open Telemetry Format](/refguide/monitoring-mendix-runtime/#new-log-sub-opentelemetry) in *Monitoring Mendix Runtime* for a guide on how to setup logs with OpenTelemetry. +You can also use OpenTelemetry to collect logs and metrics data (CPU load, memory, and others). For more information about setting up metrics with OpenTelemetry, see the [OpenTelemetry](/refguide/metrics/#opentelemetry) section of *Metrics*. For a guide on how to set up logs with OpenTelemetry, see [Request to Create New Log Subscriber in Open Telemetry Format](/refguide/monitoring-mendix-runtime/#new-log-sub-opentelemetry) in *Monitoring Mendix Runtime*. ## Custom Spans in Java Actions