Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
e8e1562
feat(opentelemetry): add OpenTelemetry configuration and JMX metrics …
OlegCIB Sep 2, 2025
f99ed98
feat(opentelemetry): update OpenTelemetry version and settings, tests…
Jan 14, 2026
39cacee
fix(docker-compose): rename otel-collector to opentelemetry-collector…
Jan 14, 2026
2ce5001
feat(tests): add OpenTelemetry test scripts for various services
Jan 14, 2026
4ba32ab
chore(tests): update permissions for OpenTelemetry test scripts
Jan 14, 2026
5f99907
refactor(tests): streamline OpenTelemetry test scripts by removing re…
Jan 14, 2026
61621f2
Merge remote-tracking branch 'origin/main' into opentelemetry
Jan 14, 2026
272507c
chore(Dockerfile): add OPENTELEMETRY_AGENT_VERSION argument and envir…
Jan 14, 2026
02d1ef2
fix(cibseven-wildfly.sh): remove duplicate PREPEND_JAVA_OPTS export s…
Jan 14, 2026
94395ea
fix(docker-compose): update image tag syntax for camunda-opentelemetr…
Jan 14, 2026
5a16982
chore(Dockerfile): disable default OpenTelemetry instrumentation for …
Jan 15, 2026
b2c4187
chore(Dockerfile): comment out default OpenTelemetry agent configuration
Jan 15, 2026
cedaa33
chore(Dockerfile): enable OpenTelemetry agent without jmx-instrumenta…
Jan 15, 2026
3c400fc
chore(Dockerfile): add JMX configuration and enable debug for OpenTel…
Jan 15, 2026
15cd57a
fix(cibseven-wildfly.sh): disable OpenTelemetry agent for CLI tool to…
Jan 15, 2026
d5a8431
chore(Dockerfile): disable OpenTelemetry agent debug mode for cleaner…
Jan 15, 2026
573c32b
fix(test_helper.sh): increase wait time from 5 to 10 seconds for impr…
Jan 15, 2026
11a8fd3
chore(scripts): update OpenTelemetry agent configuration for Java opt…
Jan 15, 2026
a3f4048
chore(docker-compose): remove obsolete docker-compose.yml file
Jan 15, 2026
bfbd535
refactor(scripts): reorganize OpenTelemetry agent configuration in ci…
Jan 15, 2026
a21bfc7
fix(cibseven-wildfly.sh, docker-compose): correct OpenTelemetry confi…
Jan 15, 2026
6066eb6
chore(Dockerfile): set OpenTelemetry log level to error
Jan 15, 2026
37fba8c
fix(test-opentelemetry-wildfly.sh): add JAVA_OPTS export for WildFly …
OlegCIB Jan 15, 2026
703b713
fix(test): fix -Djboss.as.management.blocking.timeout flag
fernando-m-g Jan 21, 2026
47f29a7
feat(test-opentelemetry-wildfly.sh): otel use direct console output
fernando-m-g Jan 21, 2026
2244a4c
revert(test-opentelemetry-wildfly.sh): get rid of delay at startup
fernando-m-g Jan 21, 2026
db032ef
chore(test-opentelemetry-wildfly): add JAVA_OPTS env to docker-compose
fernando-m-g Jan 21, 2026
bb91bdb
chore(test-opentelemetry-wildfly): replace JAVA_OPTS by JAVA_TOOLS_OP…
fernando-m-g Jan 26, 2026
4d89237
chore(test-debug): apply JAVA_TOOLS_OPTIONS flag
fernando-m-g Jan 26, 2026
f867c3c
chore(test-debug): warn logging level for otel
fernando-m-g Jan 26, 2026
4a2e74d
revert(test): revert docker-compose
fernando-m-g Jan 28, 2026
6f6a395
chore(test-debug): use negative lookahead to prevent exit on error
fernando-m-g Jan 28, 2026
6132294
docs(README): update JMX metrics section and add custom configuration…
Feb 3, 2026
1bf9d26
docs(README): update environment variable defaults for OpenTelemetry …
Feb 3, 2026
72a0ce4
removed old prometheus-jmx port
Feb 3, 2026
26bfdbd
chore: update OpenTelemetry configuration and fix logging in test scr…
Feb 5, 2026
39b1840
chore(Dockerfile): remove OTEL_LOG_LEVEL environment variable from Op…
Feb 5, 2026
d3adc37
docs(README): enhance OpenTelemetry environment variable section with…
Feb 10, 2026
b10dbaf
chore(docker-compose): update OpenTelemetry Collector image to versio…
Feb 10, 2026
c6c54c0
added metrics check
Mar 4, 2026
30173c0
added polling mechanism for metrics-test
Mar 4, 2026
6d0f428
increased wait-time for jmx-tests
Mar 4, 2026
8a40ec4
Update Dockerfile
MeisterProperMP Mar 4, 2026
563ecad
fix(otel): add new dep via bootstrap classloader
fernando-m-g Mar 5, 2026
3b6d1ef
Merge pull request #20 from cibseven/opentelemetry-smallrye-net
fernando-m-g Mar 10, 2026
f9ace12
removed otel-log-option
MeisterProperMP Mar 23, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 23 additions & 5 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
ARG VERSION=2.2.0
ARG JAVA=17
ARG OPENTELEMETRY_AGENT_VERSION=2.23.0

FROM alpine:3.23 as builder

Expand All @@ -19,7 +20,10 @@ ARG MAVEN_PROXY_PASSWORD
ARG POSTGRESQL_VERSION
ARG MYSQL_VERSION

ARG JMX_PROMETHEUS_VERSION=1.0.1

# --- OpenTelemetry Java Agent version argument ---
# Re-declare to use in this stage (inherits the value from global)
ARG OPENTELEMETRY_AGENT_VERSION

RUN apk add --no-cache \
bash \
Expand All @@ -43,6 +47,8 @@ FROM alpine:3.23
# Re-declare to use in this stage (inherits the value from global)
ARG VERSION
ARG JAVA
ARG OPENTELEMETRY_AGENT_VERSION
ENV OPENTELEMETRY_AGENT_VERSION=${OPENTELEMETRY_AGENT_VERSION}

ENV DB_DRIVER=
ENV DB_URL=
Expand All @@ -59,11 +65,19 @@ ENV WAIT_FOR_TIMEOUT=30
ENV TZ=UTC
ENV DEBUG=false
ENV JAVA_OPTS=""
ENV JMX_PROMETHEUS=false
ENV JMX_PROMETHEUS_CONF=/camunda/javaagent/prometheus-jmx.yml
ENV JMX_PROMETHEUS_PORT=9404

EXPOSE 8080 8000 9404
# OpenTelemetry default exporter settings (all exporters disabled, user must configure)
# Note: The OTEL agent is loaded via server-specific variables (PREPEND_JAVA_OPTS for WildFly,
# CATALINA_OPTS for Tomcat) to avoid affecting CLI tools like jboss-cli.sh
ENV OTEL_SERVICE_NAME=cibseven \
OTEL_JMX_CONFIG=/camunda/javaagent/jmx_config.yaml,/camunda/javaagent/jmx_custom_config.yaml \
OTEL_JAVAAGENT_LOGGING=application \
OTEL_METRICS_EXPORTER=none \
OTEL_LOGS_EXPORTER=none \
OTEL_TRACES_EXPORTER=none \
OTEL_EXPORTER_PROMETHEUS_PORT=9464

EXPOSE 8080 8000 9464

# Downgrading wait-for-it is necessary until this PR is merged
# https://github.com/vishnubob/wait-for-it/pull/68
Expand All @@ -89,3 +103,7 @@ ENTRYPOINT ["/sbin/tini", "--"]
CMD ["./cibseven.sh"]

COPY --chown=camunda:camunda --from=builder /camunda .

# --- Add JMX config files (ensure these are present in your build context) ---
COPY --chown=camunda:camunda opentelemetry/jmx_config.yaml /camunda/javaagent/jmx_config.yaml
COPY --chown=camunda:camunda opentelemetry/jmx_custom_config.yaml /camunda/javaagent/jmx_custom_config.yaml
79 changes: 70 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -107,8 +107,7 @@ when provided:
* `DB_URL`
* `DB_PASSWORD_FILE`

The `JMX_PROMETHEUS` configuration is not supported, and while `DEBUG` can be
used to enable debug output, it doesn't start a debug socket.
While `DEBUG` can be used to enable debug output, it doesn't start a debug socket.

`run` supports different startup options to choose whether or not to enable the
WebApps, the REST API or Swagger UI. By default, all three are enabled.
Expand Down Expand Up @@ -278,14 +277,76 @@ To enable JPDA inside the container, you can set the environment variable
container on port `8000` to debug your application.
This is only supported for `wildfly` and `tomcat` distributions.

### Prometheus JMX Exporter
### OpenTelemetry Agent

To enable Prometheus JMX Exporter inside the container, you can set the
environment variable `JMX_PROMETHEUS=true` on startup of the container.
This will allow you to get metrics in Prometheus format at `<host>:9404/metrics`.
For configuring exporter you need attach your configuration as a container volume
at `/camunda/javaagent/prometheus-jmx.yml`. This is only supported for `wildfly`
and `tomcat` distributions.
The CIB seven Docker images come with OpenTelemetry Java-Agent pre-installed. The agent automatically instruments your application to generate telemetry data (metrics, traces, and logs), but all exporters are disabled by default. You need to configure at least one exporter to provide telemetry data.
Copy link

Copilot AI Feb 11, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The README says the OpenTelemetry agent is “pre-installed” and that exporters are disabled by default, but the entrypoint scripts now always attach -javaagent on startup. Consider explicitly documenting that the agent is loaded by default (with exporters disabled) to avoid surprising users who expect zero instrumentation unless they opt in.

Suggested change
The CIB seven Docker images come with OpenTelemetry Java-Agent pre-installed. The agent automatically instruments your application to generate telemetry data (metrics, traces, and logs), but all exporters are disabled by default. You need to configure at least one exporter to provide telemetry data.
The CIB seven Docker images come with the OpenTelemetry Java Agent pre-installed and **automatically loaded on startup** (the container entrypoint attaches the agent using `-javaagent`). The agent automatically instruments your application to generate telemetry data (metrics, traces, and logs), but all exporters are disabled by default. No telemetry data is sent anywhere until you explicitly configure at least one exporter.

Copilot uses AI. Check for mistakes.

#### Configuration

The OpenTelemetry Agent can be configured using environment variables.

**Pre-configured Environment Variables (from Dockerfile):**

* `OTEL_SERVICE_NAME`: Service name for telemetry data (default: `cibseven`)
* `OTEL_METRICS_EXPORTER`: Configure metrics exporter (default: `none`, examples: `prometheus`, `otlp`)
* `OTEL_TRACES_EXPORTER`: Configure traces exporter (default: `none`, example: `otlp`)
* `OTEL_LOGS_EXPORTER`: Configure logs exporter (default: `none`, example: `otlp`) - **Note:** CIB seven uses a logging framework for application logging, so this is typically not needed
* `OTEL_EXPORTER_PROMETHEUS_PORT`: Port for Prometheus metrics exporter (default: `9464`)
* `OTEL_JAVAAGENT_LOGGING`: OpenTelemetry agent logging mode (default: `application`)
* `OTEL_JMX_CONFIG`: JMX metrics configuration files (default: `/camunda/javaagent/jmx_config.yaml,/camunda/javaagent/jmx_custom_config.yaml`)

**Additional Configuration for Metrics Export:**

* **Prometheus:** Set `OTEL_METRICS_EXPORTER=prometheus` (metrics available at port 9464)
* **OTLP:** Set `OTEL_METRICS_EXPORTER=otlp` and `OTEL_EXPORTER_OTLP_ENDPOINT=http://your-collector:4318`

**Additional Configuration for Trace Export:**

* Set `OTEL_TRACES_EXPORTER=otlp`
* Set `OTEL_EXPORTER_OTLP_ENDPOINT=http://your-collector:4318`

For a complete list of available configuration options, see the [OpenTelemetry Configuration](https://opentelemetry.io/docs/concepts/sdk-configuration/) documentation.


#### JMX Metrics

The OpenTelemetry Agent provides access to JVM metrics through JMX. By default, the image includes extended JVM metrics (CPU, memory, GC, threads, file descriptors).

You can add custom JMX metrics by mounting your own configuration file to `/camunda/javaagent/jmx_custom_config.yaml`. For configuration syntax examples, see the pre-configured `opentelemetry/jmx_config.yaml` in this repository or the [OpenTelemetry JMX Metrics documentation](https://github.com/open-telemetry/opentelemetry-java-instrumentation/tree/main/instrumentation/jmx-metrics).

```bash
docker run -d --name cibseven -p 8080:8080 -p 9464:9464 \
-e OTEL_METRICS_EXPORTER=prometheus \
-e OTEL_EXPORTER_PROMETHEUS_PORT=9464 \
-v $(pwd)/my_custom_jmx_config.yaml:/camunda/javaagent/jmx_custom_config.yaml \
cibseven/cibseven:latest
```

**Note:** Create your own `my_custom_jmx_config.yaml` file before mounting it. The image already contains a default `/camunda/javaagent/jmx_custom_config.yaml` which you can override.

#### Example with Docker Compose

See the `test/docker-compose.yml` file for a complete example. Use the `camunda-opentelemetry` service that includes:
- CIB seven with Prometheus metrics exporter and OTLP traces
- OpenTelemetry Collector for receiving and processing telemetry data

```bash
cd test
docker-compose up camunda-opentelemetry opentelemetry-collector
```

This will start CIB seven with metrics available at `http://localhost:9464/metrics` and an OpenTelemetry Collector that receives telemetry data on port 4318.

#### Custom JMX Configuration

You can create custom JMX metric rules by creating a YAML configuration file. See `opentelemetry/jmx_config.yaml` for an example that collects extended JVM metrics including CPU, memory, and file descriptor usage.

#### Further Reading

* [OpenTelemetry Java Agent Documentation](https://opentelemetry.io/docs/instrumentation/java/automatic/)
* [OpenTelemetry Java Agent GitHub Repository](https://github.com/open-telemetry/opentelemetry-java-instrumentation)
* [OpenTelemetry Configuration](https://opentelemetry.io/docs/concepts/sdk-configuration/)
* [JMX Metrics Collection](https://github.com/open-telemetry/opentelemetry-java-instrumentation/tree/main/instrumentation/jmx-metrics)

### Change timezone

Expand Down
4 changes: 4 additions & 0 deletions cibseven-run.sh
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,10 @@ if [[ -z "${SPRING_DATASOURCE_URL:-}" && -n "${DB_URL:-}" ]]; then
export SPRING_DATASOURCE_URL="${DB_URL}"
fi

# OpenTelemetry Agent configuration
# Load the agent via JAVA_OPTS instead of JAVA_TOOL_OPTIONS
export JAVA_OPTS="${JAVA_OPTS:-} -javaagent:/camunda/javaagent/opentelemetry-javaagent-${OPENTELEMETRY_AGENT_VERSION}.jar"
Comment on lines +33 to +35
Copy link

Copilot AI Feb 11, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

JAVA_OPTS is unconditionally appended with -javaagent:... for the run distro. This changes default runtime behavior for all run users even when exporters are disabled. Consider making javaagent loading opt-in (or conditional on OTEL exporter configuration) to avoid unexpected overhead/side effects.

Copilot uses AI. Check for mistakes.

CMD="/camunda/internal/run.sh start"

wait_for_it
Expand Down
8 changes: 3 additions & 5 deletions cibseven-tomcat.sh
Original file line number Diff line number Diff line change
Expand Up @@ -52,11 +52,9 @@ if [ "${DEBUG}" = "true" ]; then
CMD+=" jpda"
fi

if [ "$JMX_PROMETHEUS" = "true" ] ; then
echo "Enabling Prometheus JMX Exporter on port ${JMX_PROMETHEUS_PORT}"
[ ! -f "$JMX_PROMETHEUS_CONF" ] && touch "$JMX_PROMETHEUS_CONF"
export CATALINA_OPTS="${CATALINA_OPTS:=} -javaagent:/camunda/javaagent/jmx_prometheus_javaagent.jar=${JMX_PROMETHEUS_PORT}:${JMX_PROMETHEUS_CONF}"
fi
# OpenTelemetry Agent configuration
# Load the agent via CATALINA_OPTS (Tomcat-specific) instead of JAVA_TOOL_OPTIONS
export CATALINA_OPTS="${CATALINA_OPTS:-} -javaagent:/camunda/javaagent/opentelemetry-javaagent-${OPENTELEMETRY_AGENT_VERSION}.jar"
Comment on lines +55 to +57
Copy link

Copilot AI Feb 11, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The OpenTelemetry javaagent is now always attached via CATALINA_OPTS. This is a behavioral change compared to the previous opt-in javaagent approach (Prometheus JMX exporter) and can impact users who don’t want any instrumentation overhead by default. Consider making agent attachment conditional (explicit enable flag or based on OTEL exporter settings).

Copilot uses AI. Check for mistakes.

CMD+=" run"

Expand Down
25 changes: 10 additions & 15 deletions cibseven-wildfly.sh
Original file line number Diff line number Diff line change
Expand Up @@ -54,12 +54,8 @@ if [ -z "$SKIP_DB_CONFIG" ]; then
modify_datasource
fi

if [ "$JMX_PROMETHEUS" = "true" ] ; then
# See https://issues.jboss.org/browse/LOGMGR-218
export JBOSS_MODULES_SYSTEM_PKGS=${JBOSS_MODULES_SYSTEM_PKGS:-"org.jboss.byteman,org.jboss.logmanager"}
else
export JBOSS_MODULES_SYSTEM_PKGS=${JBOSS_MODULES_SYSTEM_PKGS:-"org.jboss.byteman"}
fi
# See https://issues.jboss.org/browse/LOGMGR-218
export JBOSS_MODULES_SYSTEM_PKGS=${JBOSS_MODULES_SYSTEM_PKGS:-"org.jboss.byteman,org.jboss.logmanager"}

# Ensure wildfly binds to public interface, preferes IPv4 and runs in the background
export PREPEND_JAVA_OPTS="-Djboss.bind.address=0.0.0.0 -Djboss.bind.address.management=0.0.0.0 -Djava.net.preferIPv4Stack=true -Djava.awt.headless=true -Djboss.modules.system.pkgs=${JBOSS_MODULES_SYSTEM_PKGS}"
Expand All @@ -72,15 +68,14 @@ if [ "${DEBUG}" = "true" ]; then
CMD+=" --debug *:8000"
fi

if [ "$JMX_PROMETHEUS" = "true" ] ; then
echo "Enabling Prometheus JMX Exporter on port ${JMX_PROMETHEUS_PORT}"
[ ! -f "$JMX_PROMETHEUS_CONF" ] && touch "$JMX_PROMETHEUS_CONF"
# See https://github.com/prometheus/jmx_exporter/issues/344
LOG_MANAGER_PATH=$(find /camunda/modules -name "jboss-logmanager*.jar")
COMMON_PATH=$(find /camunda/modules -name "wildfly-common*.jar")
export PREPEND_JAVA_OPTS="${PREPEND_JAVA_OPTS} -Dsun.util.logging.disableCallerCheck=true -Djava.util.logging.manager=org.jboss.logmanager.LogManager -Xbootclasspath/a:$LOG_MANAGER_PATH:$COMMON_PATH"
export PREPEND_JAVA_OPTS="${PREPEND_JAVA_OPTS} -javaagent:/camunda/javaagent/jmx_prometheus_javaagent.jar=${JMX_PROMETHEUS_PORT}:${JMX_PROMETHEUS_CONF}"
fi
# JBoss LogManager configuration for OpenTelemetry
# See https://github.com/prometheus/jmx_exporter/issues/344
LOG_MANAGER_PATH=$(find /camunda/modules -name "jboss-logmanager*.jar")
COMMON_PATH=$(find /camunda/modules -name "wildfly-common*.jar")
SMALLRYE_OS_PATH=$(find /camunda/modules -name "smallrye-common-os*.jar")
SMALLRYE_NET_PATH=$(find /camunda/modules -name "smallrye-common-net*.jar")
export PREPEND_JAVA_OPTS="${PREPEND_JAVA_OPTS} -Dsun.util.logging.disableCallerCheck=true -Djava.util.logging.manager=org.jboss.logmanager.LogManager -Xbootclasspath/a:$LOG_MANAGER_PATH:$COMMON_PATH:$SMALLRYE_OS_PATH:$SMALLRYE_NET_PATH"
export PREPEND_JAVA_OPTS="${PREPEND_JAVA_OPTS} -javaagent:/camunda/javaagent/opentelemetry-javaagent-${OPENTELEMETRY_AGENT_VERSION}.jar"
Comment on lines +72 to +78
Copy link

Copilot AI Feb 11, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The OpenTelemetry javaagent is now always attached on startup. Previously, the extra javaagent/LogManager bootclasspath logic was opt-in (via JMX_PROMETHEUS=true), so this change alters default runtime behavior for existing users (startup time, classloading/instrumentation side effects) even when all exporters are none. Consider gating -javaagent behind an explicit enable flag or only enabling when at least one OTEL exporter is configured.

Copilot uses AI. Check for mistakes.

wait_for_it

Expand Down
16 changes: 8 additions & 8 deletions download.sh
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,12 @@ mvn dependency:copy -B \
-Dartifact="org.postgresql:postgresql:${POSTGRESQL_VERSION}:jar" \
-DoutputDirectory=/tmp/

# download OpenTelemetry Java Agent
mvn dependency:copy -B \
$PROXY \
-Dartifact="io.opentelemetry.javaagent:opentelemetry-javaagent:${OPENTELEMETRY_AGENT_VERSION}:jar" \
-DoutputDirectory=/tmp/

case ${DISTRO} in
wildfly*)
cat <<-EOF > batch.cli
Expand Down Expand Up @@ -120,12 +126,6 @@ EOF
;;
esac

# download Prometheus JMX Exporter.
# Details on https://blog.camunda.com/post/2019/06/camunda-bpm-on-kubernetes/
mvn dependency:copy -B \
$PROXY \
-Dartifact="io.prometheus.jmx:jmx_prometheus_javaagent:${JMX_PROMETHEUS_VERSION}:jar" \
-DoutputDirectory=/tmp/

# Install OpenTelemetry Java Agent for all distributions
mkdir -p /camunda/javaagent
cp /tmp/jmx_prometheus_javaagent-${JMX_PROMETHEUS_VERSION}.jar /camunda/javaagent/jmx_prometheus_javaagent.jar
cp /tmp/opentelemetry-javaagent-${OPENTELEMETRY_AGENT_VERSION}.jar /camunda/javaagent/
80 changes: 80 additions & 0 deletions opentelemetry/jmx_config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
rules:
# Config from: https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/instrumentation/jmx-metrics/library/src/main/resources/jmx/rules/jvm.yaml
# Extended for CIB: MaxFileDescriptorCount, TotalSwapSpaceSize, FreeSwapSpaceSize, TotalPhysicalMemorySize, FreePhysicalMemorySize, CommittedVirtualMemorySize
- bean: java.lang:type=OperatingSystem
prefix: os.
dropNegativeValues: true
mapping:
# os.cpu.count
AvailableProcessors:
metric: cpu.count
type: updowncounter
unit: "{cpu}"
desc: Number of processors available to the Java virtual machine.
# os.cpu.time
ProcessCpuTime:
metric: cpu.time
type: counter
sourceUnit: ns
unit: s
desc: CPU time used by the process as reported by the JVM.
# os.cpu.recent_utilization
ProcessCpuLoad:
metric: cpu.recent_utilization
type: gauge
unit: '1'
desc: Recent CPU utilization for the process as reported by the JVM.
# os.system.cpu.load_1m (experimental)
SystemLoadAverage:
metric: system.cpu.load_1m
type: gauge
unit: "{run_queue_item}"
desc: Average CPU load of the whole system for the last minute as reported by the JVM.
# os.system.cpu.utilization (experimental)
SystemCpuLoad:
metric: system.cpu.utilization
type: gauge
unit: '1'
desc: Recent CPU utilization for the whole system as reported by the JVM.
# os.file_descriptor.open.count (experimental)
OpenFileDescriptorCount:
metric: file_descriptor.open.count
type: updowncounter
unit: "{file_descriptor}"
desc: Number of open file descriptors as reported by the JVM.
# os.file_descriptor.max.count
MaxFileDescriptorCount:
metric: file_descriptor.max.count
type: updowncounter
unit: "{file_descriptor}"
desc: Number of max file descriptors as reported by the JVM.
# virtual_memory.committed.size
CommittedVirtualMemorySize:
metric: virtual_memory.committed.size
type: gauge
unit: 'By'
desc: Size of CommittedVirtualMemorySize.
# os.physical_memory.free.size
FreePhysicalMemorySize:
metric: physical_memory.free.size
type: gauge
unit: 'By'
desc: Size of FreePhysicalMemorySize.
# os.physical_memory.total.size
TotalPhysicalMemorySize:
metric: physical_memory.total.size
type: gauge
unit: 'By'
desc: Size of TotalPhysicalMemorySize.
# os.swap_space.free.size
FreeSwapSpaceSize:
metric: swap_space.free.size
type: gauge
unit: 'By'
desc: Size of FreeSwapSpaceSize.
# os.swap_space.total.size
TotalSwapSpaceSize:
metric: swap_space.total.size
type: gauge
unit: 'By'
desc: Size of TotalSwapSpaceSize.
6 changes: 6 additions & 0 deletions opentelemetry/jmx_custom_config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Custom JMX Metrics Configuration
#
# This file can be overridden by mounting your own configuration:
# -v $(pwd)/my_custom_jmx_config.yaml:/camunda/javaagent/jmx_custom_config.yaml
#
# For configuration syntax and examples, see jmx_config.yaml
37 changes: 25 additions & 12 deletions test/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,18 +46,6 @@ services:
- "8000:8000"
restart: unless-stopped

camunda-prometheus-jmx:
image: cibseven/cibseven:${IMAGE_TAG:-${DISTRO}-${PLATFORM}}
platform: linux/${PLATFORM}
environment:
- JMX_PROMETHEUS=true
ports:
- "8080:8080"
- "9404:9404"
volumes:
- $PWD/prometheus-jmx.yml:/camunda/javaagent/prometheus-jmx.yml
restart: unless-stopped

camunda-password-file:
image: cibseven/cibseven:${IMAGE_TAG:-${DISTRO}-${PLATFORM}}
platform: linux/${PLATFORM}
Expand Down Expand Up @@ -88,3 +76,28 @@ services:
environment:
- POSTGRES_USER=camunda
- POSTGRES_PASSWORD=camunda

camunda-opentelemetry:
image: cibseven/cibseven:${IMAGE_TAG:-${DISTRO}-${PLATFORM}}
platform: linux/${PLATFORM}
environment:
- OTEL_METRICS_EXPORTER=prometheus
- OTEL_LOGS_EXPORTER=none
- OTEL_TRACES_EXPORTER=otlp
- OTEL_EXPORTER_PROMETHEUS_PORT=9464
- OTEL_EXPORTER_OTLP_ENDPOINT=http://opentelemetry-collector:4318
ports:
- "8080:8080"
- "9464:9464"
depends_on:
- opentelemetry-collector
restart: unless-stopped

opentelemetry-collector:
image: otel/opentelemetry-collector:0.145.0
command: ["--config=/etc/otel-collector-config.yml"]
Comment on lines +96 to +98
Copy link

Copilot AI Feb 9, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Using a floating otel/opentelemetry-collector:latest tag makes tests non-reproducible and can break unexpectedly when upstream releases. Pin the collector image to a specific version (or digest) consistent with the repo’s other pinned images (e.g., mysql:8.0, postgres:15).

Copilot uses AI. Check for mistakes.
volumes:
- ./otel-collector-config.yml:/etc/otel-collector-config.yml
ports:
- "4318:4318"
restart: unless-stopped
Loading
Loading