Acceldata
Pulse

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.

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.

  1. 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
  1. Ensure plugin path exists/

In node.properties, ensure:

plugin.dir=/usr/lib/trino/plugin
  1. 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.

  1. 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
  1. 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)

  1. 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.

  1. 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
  1. 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