diff --git a/debezium-server-bom/pom.xml b/debezium-server-bom/pom.xml
index 12a9fcca..9661e2d4 100644
--- a/debezium-server-bom/pom.xml
+++ b/debezium-server-bom/pom.xml
@@ -21,6 +21,7 @@
2.16.3
2.2.3
1.2
+ 1.0.1
2.0.1
@@ -28,6 +29,12 @@
+
+
+ io.prometheus.jmx
+ jmx_prometheus_javaagent
+ ${version.jmx.exporter}
+
commons-logging
diff --git a/debezium-server-dist/pom.xml b/debezium-server-dist/pom.xml
index ee6ecea4..1eca9e2c 100644
--- a/debezium-server-dist/pom.xml
+++ b/debezium-server-dist/pom.xml
@@ -54,6 +54,10 @@
false
+
+ io.prometheus.jmx
+ jmx_prometheus_javaagent
+
io.debezium
debezium-connector-mysql
diff --git a/debezium-server-dist/src/main/resources/assemblies/server-distribution.xml b/debezium-server-dist/src/main/resources/assemblies/server-distribution.xml
index c6ac6307..c528e8af 100644
--- a/debezium-server-dist/src/main/resources/assemblies/server-distribution.xml
+++ b/debezium-server-dist/src/main/resources/assemblies/server-distribution.xml
@@ -28,6 +28,7 @@
io.debezium:debezium-connector-cassandra-3
io.debezium:debezium-connector-cassandra-4
io.debezium:debezium-connector-dse
+ io.prometheus.jmx:jmx_prometheus_javaagent:*
@@ -44,6 +45,16 @@
jakarta.validation:*:*
+
+ ${project.parent.artifactId}/lib_metrics
+ false
+ runtime
+ false
+ true
+
+ io.prometheus.jmx:jmx_prometheus_javaagent:*
+
+
${project.parent.artifactId}/lib_opt
false
diff --git a/debezium-server-dist/src/main/resources/distro/conf/metrics.yml b/debezium-server-dist/src/main/resources/distro/conf/metrics.yml
new file mode 100644
index 00000000..30574fdd
--- /dev/null
+++ b/debezium-server-dist/src/main/resources/distro/conf/metrics.yml
@@ -0,0 +1,39 @@
+startDelaySeconds: 0
+ssl: false
+lowercaseOutputName: false
+lowercaseOutputLabelNames: false
+rules:
+- pattern : "kafka.connect([^:]+):"
+ name: "kafka_connect_worker_metrics_$1"
+- pattern : "kafka.connect<>([^:]+)"
+ name: "kafka_connect_metrics_$2"
+ labels:
+ client: "$1"
+- pattern: "debezium.([^:]+)]+)><>RowsScanned"
+ name: "debezium_metrics_RowsScanned"
+ labels:
+ plugin: "$1"
+ name: "$3"
+ context: "$2"
+ table: "$4"
+- pattern: "debezium.([^:]+)]+)>([^:]+)"
+ name: "debezium_metrics_$6"
+ labels:
+ plugin: "$1"
+ name: "$2"
+ task: "$3"
+ context: "$4"
+ database: "$5"
+- pattern: "debezium.([^:]+)]+)>([^:]+)"
+ name: "debezium_metrics_$5"
+ labels:
+ plugin: "$1"
+ name: "$2"
+ task: "$3"
+ context: "$4"
+- pattern: "debezium.([^:]+)]+)>([^:]+)"
+ name: "debezium_metrics_$4"
+ labels:
+ plugin: "$1"
+ name: "$3"
+ context: "$2"
diff --git a/debezium-server-dist/src/main/resources/distro/lib_metrics/enable_exporter.sh b/debezium-server-dist/src/main/resources/distro/lib_metrics/enable_exporter.sh
new file mode 100644
index 00000000..0b39009c
--- /dev/null
+++ b/debezium-server-dist/src/main/resources/distro/lib_metrics/enable_exporter.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+# To enable Prometheus JMX exporter, set JMX_EXPORTER_PORT environment variable
+
+if [ -n "${JMX_EXPORTER_PORT}" ]; then
+ JMX_EXPORTER_CONFIG=${JMX_EXPORTER_CONFIG:-"conf/metrics.yml"}
+ JMX_EXPORTER_AGENT_JAR=$(find lib_metrics -name "jmx_prometheus_javaagent-*.jar")
+ export JAVA_OPTS="-javaagent:${JMX_EXPORTER_AGENT_JAR}=0.0.0.0:${JMX_EXPORTER_PORT}:${JMX_EXPORTER_CONFIG} ${JAVA_OPTS}"
+fi
\ No newline at end of file
diff --git a/debezium-server-dist/src/main/resources/distro/run.sh b/debezium-server-dist/src/main/resources/distro/run.sh
index 837889b1..e3477f29 100755
--- a/debezium-server-dist/src/main/resources/distro/run.sh
+++ b/debezium-server-dist/src/main/resources/distro/run.sh
@@ -46,6 +46,7 @@ if [[ "${ENABLE_DEBEZIUM_SCRIPTING}" == "true" ]]; then
fi
source ./jmx/enable_jmx.sh
+source ./lib_metrics/enable_exporter.sh
exec "$JAVA_BINARY" $DEBEZIUM_OPTS $JAVA_OPTS -cp \
$RUNNER$PATH_SEP"conf"$PATH_SEP$LIB_PATH io.debezium.server.Main
\ No newline at end of file