<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export><version>5.0</version><date>2021-11-21T21:55:48Z</date><groups><group><name>Templates</name></group></groups><templates><template><template>Clickhouse</template><name>Clickhouse</name><description>## Overview

Template to monitor main Clickhouse parameters *without using additional scripts*


It uses HTTP interface to read metrics from *system* database using Zabbix Agent's HTTP client


Gathered metrics:


* MaxPartCountForPartition
* ReplicasMaxQueueSize
* Uptime
* InsertedBytes
* InsertedRows
* Query
* InsertQuery
* SelectQuery
* Merge
* Inactive parts count
* HTTPConnection
* TCPConnection
* InterserverConnection
* LeaderReplica
* ReadonlyReplica
* Used memory (this is roughly calculated from metrics and is not accurate)
* Ping (`/ping` HTTP endpoint)


&lt;p style=&quot;box-sizing: border-box; margin-top: 0px; margin-bottom: 16px; color: #24292e; font-family: -apple-system, system-ui, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji',

## Author

Igor Novgorodov

</description><groups><group><name>Templates</name></group></groups><applications><application><name>Clickhouse</name></application></applications><items><item><name>Clickhouse Events - InsertedBytes</name><type>DEPENDENT</type><key>events.InsertedBytes</key><delay>0</delay><history>31d</history><units>B</units><applications><application><name>Clickhouse</name></application></applications><preprocessing><step><type>JSONPATH</type><params>$.InsertedBytes</params></step><step><type>CHANGE_PER_SECOND</type><params/></step></preprocessing><master_item><key>web.page.get[{$CH_URL}/?query=SELECT%20event%2C%20value%20FROM%20system.events%20FORMAT%20JSON]</key></master_item></item><item><name>Clickhouse Events - InsertedRows</name><type>DEPENDENT</type><key>events.InsertedRows</key><delay>0</delay><history>31d</history><applications><application><name>Clickhouse</name></application></applications><preprocessing><step><type>JSONPATH</type><params>$.InsertedRows</params></step><step><type>CHANGE_PER_SECOND</type><params/></step></preprocessing><master_item><key>web.page.get[{$CH_URL}/?query=SELECT%20event%2C%20value%20FROM%20system.events%20FORMAT%20JSON]</key></master_item></item><item><name>Clickhouse Events - InsertQuery</name><type>DEPENDENT</type><key>events.InsertQuery</key><delay>0</delay><history>31d</history><applications><application><name>Clickhouse</name></application></applications><preprocessing><step><type>JSONPATH</type><params>$.InsertQuery</params></step><step><type>CHANGE_PER_SECOND</type><params/></step></preprocessing><master_item><key>web.page.get[{$CH_URL}/?query=SELECT%20event%2C%20value%20FROM%20system.events%20FORMAT%20JSON]</key></master_item></item><item><name>Clickhouse Events - Merge</name><type>DEPENDENT</type><key>events.Merge</key><delay>0</delay><history>31d</history><applications><application><name>Clickhouse</name></application></applications><preprocessing><step><type>JSONPATH</type><params>$.Merge</params></step><step><type>CHANGE_PER_SECOND</type><params/></step></preprocessing><master_item><key>web.page.get[{$CH_URL}/?query=SELECT%20event%2C%20value%20FROM%20system.events%20FORMAT%20JSON]</key></master_item></item><item><name>Clickhouse Events - Query</name><type>DEPENDENT</type><key>events.Query</key><delay>0</delay><history>31d</history><applications><application><name>Clickhouse</name></application></applications><preprocessing><step><type>JSONPATH</type><params>$.Query</params></step><step><type>CHANGE_PER_SECOND</type><params/></step></preprocessing><master_item><key>web.page.get[{$CH_URL}/?query=SELECT%20event%2C%20value%20FROM%20system.events%20FORMAT%20JSON]</key></master_item></item><item><name>Clickhouse Events - SelectQuery</name><type>DEPENDENT</type><key>events.SelectQuery</key><delay>0</delay><history>31d</history><applications><application><name>Clickhouse</name></application></applications><preprocessing><step><type>JSONPATH</type><params>$.SelectQuery</params></step><step><type>CHANGE_PER_SECOND</type><params/></step></preprocessing><master_item><key>web.page.get[{$CH_URL}/?query=SELECT%20event%2C%20value%20FROM%20system.events%20FORMAT%20JSON]</key></master_item></item><item><name>Clickhouse AsyncMetrics - MaxPartCountForPartition</name><type>DEPENDENT</type><key>metrics.async.MaxPartCountForPartition</key><delay>0</delay><history>31d</history><applications><application><name>Clickhouse</name></application></applications><preprocessing><step><type>JSONPATH</type><params>$.MaxPartCountForPartition</params></step></preprocessing><master_item><key>web.page.get[{$CH_URL}/?query=SELECT%20metric%2C%20value%20FROM%20system.asynchronous_metrics%20FORMAT%20JSON]</key></master_item><triggers><trigger><expression>{min(600)}&gt;={$CH_MAX_PARTS}</expression><name>Clickhouse: Too many parts in a partition (&gt;{$MAX_REPLICA_QUEUE})</name><priority>AVERAGE</priority><description>Some partition has too many unmerged parts</description></trigger></triggers></item><item><name>Clickhouse AsyncMetrics - Memory</name><type>DEPENDENT</type><key>metrics.async.Memory</key><delay>0</delay><history>31d</history><units>B</units><applications><application><name>Clickhouse</name></application></applications><preprocessing><step><type>JAVASCRIPT</type><params>var d = JSON.parse(value)
return d['jemalloc.retained'] + d['jemalloc.mapped'] + d['UncompressedCacheBytes'] + d['MarkCacheBytes']</params></step></preprocessing><master_item><key>web.page.get[{$CH_URL}/?query=SELECT%20metric%2C%20value%20FROM%20system.asynchronous_metrics%20FORMAT%20JSON]</key></master_item></item><item><name>Clickhouse AsyncMetrics - ReplicasMaxQueueSize</name><type>DEPENDENT</type><key>metrics.async.ReplicasMaxQueueSize</key><delay>0</delay><history>31d</history><applications><application><name>Clickhouse</name></application></applications><preprocessing><step><type>JSONPATH</type><params>$.ReplicasMaxQueueSize</params></step></preprocessing><master_item><key>web.page.get[{$CH_URL}/?query=SELECT%20metric%2C%20value%20FROM%20system.asynchronous_metrics%20FORMAT%20JSON]</key></master_item><triggers><trigger><expression>{min(600)}&gt;={$CH_MAX_REPLICA_QUEUE}</expression><name>Clickhouse: Too large replcation queue (&gt;{$MAX_REPLICA_QUEUE})</name><priority>AVERAGE</priority><description>Replication queue of some tables is too large</description></trigger></triggers></item><item><name>Clickhouse AsyncMetrics - Uptime</name><type>DEPENDENT</type><key>metrics.async.Uptime</key><delay>0</delay><history>31d</history><applications><application><name>Clickhouse</name></application></applications><preprocessing><step><type>JSONPATH</type><params>$.Uptime</params></step></preprocessing><master_item><key>web.page.get[{$CH_URL}/?query=SELECT%20metric%2C%20value%20FROM%20system.asynchronous_metrics%20FORMAT%20JSON]</key></master_item><triggers><trigger><expression>{last()}&lt;600</expression><name>Clickhouse: Service was restarted</name><priority>INFO</priority></trigger></triggers></item><item><name>Clickhouse Metrics - HTTPConnection</name><type>DEPENDENT</type><key>metrics.HTTPConnection</key><delay>0</delay><history>31d</history><applications><application><name>Clickhouse</name></application></applications><preprocessing><step><type>JSONPATH</type><params>$.HTTPConnection</params></step></preprocessing><master_item><key>web.page.get[{$CH_URL}/?query=SELECT%20metric%2C%20value%20FROM%20system.metrics%20FORMAT%20JSON]</key></master_item></item><item><name>Clickhouse Metrics - InterserverConnection</name><type>DEPENDENT</type><key>metrics.InterserverConnection</key><delay>0</delay><history>31d</history><applications><application><name>Clickhouse</name></application></applications><preprocessing><step><type>JSONPATH</type><params>$.InterserverConnection</params></step></preprocessing><master_item><key>web.page.get[{$CH_URL}/?query=SELECT%20metric%2C%20value%20FROM%20system.metrics%20FORMAT%20JSON]</key></master_item></item><item><name>Clickhouse Metrics - LeaderReplica</name><type>DEPENDENT</type><key>metrics.LeaderReplica</key><delay>0</delay><history>31d</history><applications><application><name>Clickhouse</name></application></applications><preprocessing><step><type>JSONPATH</type><params>$.LeaderReplica</params></step></preprocessing><master_item><key>web.page.get[{$CH_URL}/?query=SELECT%20metric%2C%20value%20FROM%20system.metrics%20FORMAT%20JSON]</key></master_item></item><item><name>Clickhouse Metrics - Merge</name><type>DEPENDENT</type><key>metrics.Merge</key><delay>0</delay><history>31d</history><applications><application><name>Clickhouse</name></application></applications><preprocessing><step><type>JSONPATH</type><params>$.Merge</params></step></preprocessing><master_item><key>web.page.get[{$CH_URL}/?query=SELECT%20metric%2C%20value%20FROM%20system.metrics%20FORMAT%20JSON]</key></master_item></item><item><name>Clickhouse Metrics - Query</name><type>DEPENDENT</type><key>metrics.Query</key><delay>0</delay><history>31d</history><applications><application><name>Clickhouse</name></application></applications><preprocessing><step><type>JSONPATH</type><params>$.Query</params></step></preprocessing><master_item><key>web.page.get[{$CH_URL}/?query=SELECT%20metric%2C%20value%20FROM%20system.metrics%20FORMAT%20JSON]</key></master_item></item><item><name>Clickhouse Metrics - ReadonlyReplica</name><type>DEPENDENT</type><key>metrics.ReadonlyReplica</key><delay>0</delay><history>31d</history><applications><application><name>Clickhouse</name></application></applications><preprocessing><step><type>JSONPATH</type><params>$.ReadonlyReplica</params></step></preprocessing><master_item><key>web.page.get[{$CH_URL}/?query=SELECT%20metric%2C%20value%20FROM%20system.metrics%20FORMAT%20JSON]</key></master_item><triggers><trigger><expression>{min(600)}&gt;0</expression><name>Clickhouse: Read only replicas detected</name><priority>AVERAGE</priority></trigger></triggers></item><item><name>Clickhouse Metrics - TCPConnection</name><type>DEPENDENT</type><key>metrics.TCPConnection</key><delay>0</delay><history>31d</history><applications><application><name>Clickhouse</name></application></applications><preprocessing><step><type>JSONPATH</type><params>$.TCPConnection</params></step></preprocessing><master_item><key>web.page.get[{$CH_URL}/?query=SELECT%20metric%2C%20value%20FROM%20system.metrics%20FORMAT%20JSON]</key></master_item></item><item><name>Clickhouse Inactive Parts</name><key>web.page.get[{$CH_URL}/?query=SELECT%20COUNT%28%2A%29%20AS%20c%20FROM%20system.parts%20WHERE%20active%20%3D%200%20FORMAT%20JSON]</key><history>31d</history><description>Number of inactive parts&#13;
&#13;
SELECT COUNT(*) AS c FROM system.parts WHERE active = 0 FORMAT JSON</description><applications><application><name>Clickhouse</name></application></applications><preprocessing><step><type>JAVASCRIPT</type><params>return JSON.parse(value.substring(value.indexOf(&quot;{\n&quot;)).trim()).data[0].c;</params></step></preprocessing><triggers><trigger><expression>{min(600)}&gt;={$CH_MAX_INACTIVE_PARTS}</expression><name>Clickhouse: Too many inactive parts (&gt;{$MAX_INACTIVE_PARTS})</name><priority>HIGH</priority><description>Too many inactive parts which take up disk space</description></trigger></triggers></item><item><name>Clickhouse Events</name><key>web.page.get[{$CH_URL}/?query=SELECT%20event%2C%20value%20FROM%20system.events%20FORMAT%20JSON]</key><history>0</history><trends>0</trends><value_type>TEXT</value_type><description>SELECT event, value FROM system.events FORMAT JSON</description><applications><application><name>Clickhouse</name></application></applications><preprocessing><step><type>JAVASCRIPT</type><params>var d = JSON.parse(value.substring(value.indexOf(&quot;{\n&quot;)).trim()).data;
var r = {};

d.forEach(function(v) {
 r[v.event] = parseInt(v.value)
})

return JSON.stringify(r);</params></step></preprocessing></item><item><name>Clickhouse AsyncMetrics</name><key>web.page.get[{$CH_URL}/?query=SELECT%20metric%2C%20value%20FROM%20system.asynchronous_metrics%20FORMAT%20JSON]</key><history>0</history><trends>0</trends><value_type>TEXT</value_type><description>SELECT metric, value FROM system.asynchronous_metrics FORMAT JSON</description><applications><application><name>Clickhouse</name></application></applications><preprocessing><step><type>JAVASCRIPT</type><params>var d = JSON.parse(value.substring(value.indexOf(&quot;{\n&quot;)).trim()).data;
var r = {};

d.forEach(function(v) {
 r[v.metric] = parseInt(v.value)
})

return JSON.stringify(r);</params></step></preprocessing></item><item><name>Clickhouse Metrics</name><key>web.page.get[{$CH_URL}/?query=SELECT%20metric%2C%20value%20FROM%20system.metrics%20FORMAT%20JSON]</key><history>0</history><trends>0</trends><value_type>TEXT</value_type><description>SELECT metric, value FROM system.metrics FORMAT JSON</description><applications><application><name>Clickhouse</name></application></applications><preprocessing><step><type>JAVASCRIPT</type><params>var d = JSON.parse(value.substring(value.indexOf(&quot;{\n&quot;)).trim()).data;
var r = {};

d.forEach(function(v) {
 r[v.metric] = parseInt(v.value)
})

return JSON.stringify(r);
</params></step></preprocessing></item><item><name>Clickhouse Ping</name><key>web.page.regexp[{$CH_URL}/ping,,,HTTP/1.1 (\d+),,\1]</key><history>1d</history><trends>7d</trends><applications><application><name>Clickhouse</name></application></applications><triggers><trigger><expression>{nodata(600)}=1 or {last()}&lt;&gt;200</expression><name>Clickhouse: Ping failed</name><priority>HIGH</priority></trigger></triggers></item></items><macros><macro><macro>{$CH_MAX_INACTIVE_PARTS}</macro><value>2000</value></macro><macro><macro>{$CH_MAX_PARTS}</macro><value>50</value></macro><macro><macro>{$CH_MAX_REPLICA_QUEUE}</macro><value>5</value></macro><macro><macro>{$CH_URL}</macro><value>http://127.0.0.1:8123</value></macro></macros></template></templates></zabbix_export>
