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