Trino QueryLog is a Trino (formerly Presto SQL) plugin for logging query events into separate log file.
Its main purpose is to gather queries metadata and statistics as one event per line, so it can be easily collected by external software (e.g. Elastic FileBeat which will send data to Logstash/ElasticSearch/Kibana for storage/analysis).
mvn clean package dependency:copy-dependencies -DincludeScope=runtime
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
Copy the following artifacts (after successful build) to the Trino plugin folder (<path_to_trino>/plugin/trino-querylog/
)
target/dependency/*.jar
target/trino-querylog-*.jar
Create <path_to_trino>/etc/event-listener.properties
with the following required parameters, e.g.:
event-listener.name=trino-querylog
trino.querylog.log4j2.configLocation=<path_to_trino>/etc/querylog-log4j2.xml
Configuration | Default | Description |
---|---|---|
trino.querylog.log.queryCreatedEvent |
true | Log Query Create event. |
trino.querylog.log.queryCompletedEvent |
true | Log Query Completed event. |
trino.querylog.log.splitCompletedEvent |
true | Log Split Completed event. |
trino.querylog.log.queryCompletedEvent
can be used for post-hoc analysis of completed queries, as it contains all of the statistics of the query.trino.querylog.log.splitCompletedEvent
can be used to track query progress.trino.querylog.log.queryCreatedEvent
can be used to track long-running queries that are stuck without progress.
Prepare configuration file for logging query events, e.g. <path_to_trino>/etc/querylog-log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="TrinoQueryLog" packages="">
<Appenders>
<RollingFile name="JsonRollingFile">
<FileName>/var/log/trino/trino-querylog.log</FileName>
<FilePattern>/var/log/trino/%d{yyyy-MM-dd-hh}-%i.log</FilePattern>
<JsonLayout charset="UTF-8" includeStacktrace="false"
compact="true" eventEol="true" objectMessageAsJsonObject="true"/>
<Policies>
<SizeBasedTriggeringPolicy size="10 MB"/>
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingFile>
</Appenders>
<Loggers>
<Root level="INFO">
<AppenderRef ref="JsonRollingFile"/>
</Root>
</Loggers>
</Configuration>
Most of the configuration can be safely changed, but for easier consumption by FileBeat it is advised to leave at least JsonLayout and its parameters.