Configure Trino and Pulse to Monitor Standalone Trino Deployed on Kubernetes
This page enables you to monitor a standalone Trino deployment on Kubernetes by:
- Enabling JMX export via jmxtrans agent (coordinator + workers)
- Enabling Acceldata Trino event listener for query events streaming to Pulse
- Deploying Trino Connector. For details about deploying Trino Connector on Pulse Kubernetes, see Deploy Pulse Add-on Services.
For details, see the following pages.
- Prerequisites
- ConfigMap Changes Trino Coordinator
- ConfigMap Changes Trino Worker
- PVC for Extra Files (If Not Already Present)
- Deployment Changes (Coordinator + Worker)
Introduced
This is supported in Pulse 4.0.1 and later
Prerequisites
Artifacts Required
- JMX Agent JAR: jmxtrans-agent-x.x.x.jar (from Acceldata License Portal)
- JMX XML config files (shared by Acceldata):
- Coordinator: vm_trino_coordinator.xml
- Worker: vm_trino_worker.xml
- Ensure naming/case matches the file you mount
- Trino Event Listener JAR (from Acceldata):
- Example: ad-trino-event-listener-x.x.jar (actual filename may differ)
- This file must be placed where Trino can load plugins.
Pulse Endpoint
- Pulse event streaming endpoint:
- <Pulse IP>:19009
Storage for extra files
You must make the JAR/XML files available inside both coordinator and worker pods under:
- /opt/trino-extra/ (for jmxtrans jar + XML)
- /usr/lib/trino/plugin/... (for event listener plugin jar)
Preferred approach: PV/PVC + volumeMounts
If you already have a PV/PVC attached to pods, reuse it; otherwise, create one.
ConfigMap Changes Trino Coordinator
Search for the Configmap on the Trino namespace corresponding to Trino Coordinator.
- Update Trino Coordinator jvm.config
Add the javaagent line in the jvm.config block:
-javaagent:/opt/trino-extra/jmxtrans-agent-1.0.0.jar=/opt/trino-extra/vm_trino_coordinator.xml
- Ensure plugin path exists/
In node.properties, ensure:
plugin.dir=/usr/lib/trino/plugin
- Configure event-listener.properties. Update (or add) event-listener.properties:
event-listener.name = ad-trino-event-listener
ad.cluster = adcluster
ad.events.streaming.servers = <Pulse IP>:19009
- event-listener.name: The name of the Trino JAR provided by Acceldata.
- Ad.cluster: The name of the cluster
- Ad.events.streaming.servers: <Pulse IP>:19009
Example JVM.Config (Coordinator):
config.properties: |
coordinator=false
http-server.http.port=8080
query.max-memory=4GB
query.max-memory-per-node=1GB
discovery.uri=http://trino-cluster-1-trino:8080
jvm.config: |
-server
-agentpath:/usr/lib/trino/bin/libjvmkill.so
-Xmx8G
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:+ExitOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow
-XX:ReservedCodeCacheSize=512M
-XX:PerMethodRecompilationCutoff=10000
-XX:PerBytecodeRecompilationCutoff=10000
-Djdk.attach.allowAttachSelf=true
-Djdk.nio.maxCachedBufferSize=2000000
# Allow loading dynamic agent used by JOL
-XX:+EnableDynamicAgentLoading
-javaagent:/opt/trino-extra/jmxtrans-agent-1.0.0.jar=/opt/trino-extra/vm_trino_coordinator.xml
log.properties: |
io.trino=INFO
node.properties: |
node.environment=production
node.data-dir=/data/trino
plugin.dir=/usr/lib/trino/plugin
event-listener.properties: |
event-listener.name = ad-trino-event-listener
ad.cluster = adcluster
ad.events.streaming.servers = <Pulse IP>:19009
ConfigMap Changes Trino Worker
Search for the Configmap on the Trino namespace corresponding to Trino Worker.
- Update the Trino Worker jvm.config
Add the javaagent line in the jvm.config block:
-javaagent:/opt/trino-extra/jmxtrans-agent-1.0.0.jar=/opt/trino-extra/vm_trino_worker.xml
- Ensure plugin path exists
In node.properties ensure:
plugin.dir=/usr/lib/trino/plugin
Example JVM.Config (Worker):
config.properties: |
coordinator=false
http-server.http.port=8080
query.max-memory=4GB
query.max-memory-per-node=1GB
discovery.uri=http://trino-cluster-1-trino:8080
jvm.config: |
-server
-agentpath:/usr/lib/trino/bin/libjvmkill.so
-Xmx8G
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:+ExitOnOutOfMemoryError
-XX:-OmitStackTraceInFastThrow
-XX:ReservedCodeCacheSize=512M
-XX:PerMethodRecompilationCutoff=10000
-XX:PerBytecodeRecompilationCutoff=10000
-Djdk.attach.allowAttachSelf=true
-Djdk.nio.maxCachedBufferSize=2000000
# Allow loading dynamic agent used by JOL
-XX:+EnableDynamicAgentLoading
-javaagent:/opt/trino-extra/jmxtrans-agent-1.0.0.jar=/opt/trino-extra/vm_trino_worker.xml
log.properties: |
io.trino=INFO
node.properties: |
node.environment=production
node.data-dir=/data/trino
plugin.dir=/usr/lib/trino/plugin
PVC for Extra Files (If Not Already Present)
The JMX Agent JAR and XML configuration files must be accessible within the Trino Coordinator and Worker pods.
If an existing PV/PVC is already mounted to these pods, it can be reused to store the required files. Otherwise, create a new PVC and mount it into both the Coordinator and Worker pods to host the JMX agent, XML configuration files, and the Trino event listener JAR.
Example PVC:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"v1","kind":"PersistentVolumeClaim","metadata":{"annotations":{},"name":"trino-extra-files-pvc","namespace":"trino"},"spec":{"accessModes":["ReadWriteOnce"],"resources":{"requests":{"storage":"1Gi"}}}}
pv.kubernetes.io/bind-completed: "yes"
pv.kubernetes.io/bound-by-controller: "yes"
volume.beta.kubernetes.io/storage-provisioner: ebs.csi.aws.com
volume.kubernetes.io/selected-node: ip-10-0-43-150.ap-south-2.compute.internal
volume.kubernetes.io/storage-provisioner: ebs.csi.aws.com
creationTimestamp: "2025-09-09T11:39:12Z"
finalizers:
- kubernetes.io/pvc-protection
name: trino-extra-files-pvc
namespace: trino
resourceVersion: "56712449"
uid: 45e7e95a-86fc-41ee-8678-46f45f27a112
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: gp3-csi
volumeMode: Filesystem
volumeName: pvc-45e7e95a-86fc-41ee-8678-46f45f27a112
status:
accessModes:
- ReadWriteOnce
capacity:
storage: 1Gi
phase: Bound
Deployment Changes (Coordinator + Worker)
- Update Trino Coordinator and Worker Deployments
If you created a new PVC for the JMX agent and configuration files, you must mount it in both the Trino Coordinator and Worker deployment specs.
- Add volumeMounts and volumes
Mount the PVC at /opt/trino-extra and mount the Acceldata event listener JAR into the Trino plugin directory using subPath.
Reference the ConfigMaps and the PVC in the pod spec.
volumeMounts:
- mountPath: /etc/trino
name: config-volume
- mountPath: /etc/trino/catalog
name: catalog-volume
- mountPath: /etc/trino/schemas
name: schemas-volume
# Extra files for JMX agent + XML configuration
- mountPath: /opt/trino-extra
name: extra-files-volume
# Acceldata Trino event listener JAR (mounted into plugin directory)
- mountPath: /usr/lib/trino/plugin/ad-trino-event-listener/ad-trino-event-listener-1.0.jar
name: extra-files-volume
subPath: ad-trino-event-listener-1.0.jar
volumes:
- name: config-volume
configMap:
defaultMode: 420
name: trino-cluster-1-trino-coordinator
- name: catalog-volume
configMap:
defaultMode: 420
name: trino-cluster-1-trino-catalog
- name: schemas-volume
configMap:
defaultMode: 420
name: trino-cluster-1-trino-schemas-volume-coordinator
# PVC containing JMX agent, XMLs, and event listener JAR
- name: extra-files-volume
persistentVolumeClaim:
claimName: trino-extra-files-pvc
- Apply and Restart
Apply the updated deployment manifests for both Coordinator and Worker, then restart pods so the new mounts take effect.
Validation: After a restart, confirm the following paths exist inside the pods:
- /opt/trino-extra/jmxtrans-agent-x.x.x.jar
- /opt/trino-extra/vm_trino_ coordinator.xml (Coordinator)
- /opt/trino-extra/vm_trino_ worker.xml (Worker)
- /usr/lib/trino/plugin/ad-trino-event-listener/ad-trino-event-listener-x.x.jar
