5.02021-11-21T21:55:48ZTemplatesClickhouseClickhouse## 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)
<p style="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
TemplatesClickhouse- Clickhouse Events - InsertedBytesDEPENDENTevents.InsertedBytes031dBClickhouseJSONPATH$.InsertedBytesCHANGE_PER_SECONDweb.page.get[{$CH_URL}/?query=SELECT%20event%2C%20value%20FROM%20system.events%20FORMAT%20JSON]
- Clickhouse Events - InsertedRowsDEPENDENTevents.InsertedRows031dClickhouseJSONPATH$.InsertedRowsCHANGE_PER_SECONDweb.page.get[{$CH_URL}/?query=SELECT%20event%2C%20value%20FROM%20system.events%20FORMAT%20JSON]
- Clickhouse Events - InsertQueryDEPENDENTevents.InsertQuery031dClickhouseJSONPATH$.InsertQueryCHANGE_PER_SECONDweb.page.get[{$CH_URL}/?query=SELECT%20event%2C%20value%20FROM%20system.events%20FORMAT%20JSON]
- Clickhouse Events - MergeDEPENDENTevents.Merge031dClickhouseJSONPATH$.MergeCHANGE_PER_SECONDweb.page.get[{$CH_URL}/?query=SELECT%20event%2C%20value%20FROM%20system.events%20FORMAT%20JSON]
- Clickhouse Events - QueryDEPENDENTevents.Query031dClickhouseJSONPATH$.QueryCHANGE_PER_SECONDweb.page.get[{$CH_URL}/?query=SELECT%20event%2C%20value%20FROM%20system.events%20FORMAT%20JSON]
- Clickhouse Events - SelectQueryDEPENDENTevents.SelectQuery031dClickhouseJSONPATH$.SelectQueryCHANGE_PER_SECONDweb.page.get[{$CH_URL}/?query=SELECT%20event%2C%20value%20FROM%20system.events%20FORMAT%20JSON]
- Clickhouse AsyncMetrics - MaxPartCountForPartitionDEPENDENTmetrics.async.MaxPartCountForPartition031dClickhouseJSONPATH$.MaxPartCountForPartitionweb.page.get[{$CH_URL}/?query=SELECT%20metric%2C%20value%20FROM%20system.asynchronous_metrics%20FORMAT%20JSON]{min(600)}>={$CH_MAX_PARTS}Clickhouse: Too many parts in a partition (>{$MAX_REPLICA_QUEUE})AVERAGESome partition has too many unmerged parts
- Clickhouse AsyncMetrics - MemoryDEPENDENTmetrics.async.Memory031dBClickhouseJAVASCRIPTvar d = JSON.parse(value)
return d['jemalloc.retained'] + d['jemalloc.mapped'] + d['UncompressedCacheBytes'] + d['MarkCacheBytes']web.page.get[{$CH_URL}/?query=SELECT%20metric%2C%20value%20FROM%20system.asynchronous_metrics%20FORMAT%20JSON]
- Clickhouse AsyncMetrics - ReplicasMaxQueueSizeDEPENDENTmetrics.async.ReplicasMaxQueueSize031dClickhouseJSONPATH$.ReplicasMaxQueueSizeweb.page.get[{$CH_URL}/?query=SELECT%20metric%2C%20value%20FROM%20system.asynchronous_metrics%20FORMAT%20JSON]{min(600)}>={$CH_MAX_REPLICA_QUEUE}Clickhouse: Too large replcation queue (>{$MAX_REPLICA_QUEUE})AVERAGEReplication queue of some tables is too large
- Clickhouse AsyncMetrics - UptimeDEPENDENTmetrics.async.Uptime031dClickhouseJSONPATH$.Uptimeweb.page.get[{$CH_URL}/?query=SELECT%20metric%2C%20value%20FROM%20system.asynchronous_metrics%20FORMAT%20JSON]{last()}<600Clickhouse: Service was restartedINFO
- Clickhouse Metrics - HTTPConnectionDEPENDENTmetrics.HTTPConnection031dClickhouseJSONPATH$.HTTPConnectionweb.page.get[{$CH_URL}/?query=SELECT%20metric%2C%20value%20FROM%20system.metrics%20FORMAT%20JSON]
- Clickhouse Metrics - InterserverConnectionDEPENDENTmetrics.InterserverConnection031dClickhouseJSONPATH$.InterserverConnectionweb.page.get[{$CH_URL}/?query=SELECT%20metric%2C%20value%20FROM%20system.metrics%20FORMAT%20JSON]
- Clickhouse Metrics - LeaderReplicaDEPENDENTmetrics.LeaderReplica031dClickhouseJSONPATH$.LeaderReplicaweb.page.get[{$CH_URL}/?query=SELECT%20metric%2C%20value%20FROM%20system.metrics%20FORMAT%20JSON]
- Clickhouse Metrics - MergeDEPENDENTmetrics.Merge031dClickhouseJSONPATH$.Mergeweb.page.get[{$CH_URL}/?query=SELECT%20metric%2C%20value%20FROM%20system.metrics%20FORMAT%20JSON]
- Clickhouse Metrics - QueryDEPENDENTmetrics.Query031dClickhouseJSONPATH$.Queryweb.page.get[{$CH_URL}/?query=SELECT%20metric%2C%20value%20FROM%20system.metrics%20FORMAT%20JSON]
- Clickhouse Metrics - ReadonlyReplicaDEPENDENTmetrics.ReadonlyReplica031dClickhouseJSONPATH$.ReadonlyReplicaweb.page.get[{$CH_URL}/?query=SELECT%20metric%2C%20value%20FROM%20system.metrics%20FORMAT%20JSON]{min(600)}>0Clickhouse: Read only replicas detectedAVERAGE
- Clickhouse Metrics - TCPConnectionDEPENDENTmetrics.TCPConnection031dClickhouseJSONPATH$.TCPConnectionweb.page.get[{$CH_URL}/?query=SELECT%20metric%2C%20value%20FROM%20system.metrics%20FORMAT%20JSON]
- Clickhouse Inactive Partsweb.page.get[{$CH_URL}/?query=SELECT%20COUNT%28%2A%29%20AS%20c%20FROM%20system.parts%20WHERE%20active%20%3D%200%20FORMAT%20JSON]31dNumber of inactive parts
SELECT COUNT(*) AS c FROM system.parts WHERE active = 0 FORMAT JSONClickhouseJAVASCRIPTreturn JSON.parse(value.substring(value.indexOf("{\n")).trim()).data[0].c;{min(600)}>={$CH_MAX_INACTIVE_PARTS}Clickhouse: Too many inactive parts (>{$MAX_INACTIVE_PARTS})HIGHToo many inactive parts which take up disk space
- Clickhouse Eventsweb.page.get[{$CH_URL}/?query=SELECT%20event%2C%20value%20FROM%20system.events%20FORMAT%20JSON]00TEXTSELECT event, value FROM system.events FORMAT JSONClickhouseJAVASCRIPTvar d = JSON.parse(value.substring(value.indexOf("{\n")).trim()).data;
var r = {};
d.forEach(function(v) {
r[v.event] = parseInt(v.value)
})
return JSON.stringify(r);
- Clickhouse AsyncMetricsweb.page.get[{$CH_URL}/?query=SELECT%20metric%2C%20value%20FROM%20system.asynchronous_metrics%20FORMAT%20JSON]00TEXTSELECT metric, value FROM system.asynchronous_metrics FORMAT JSONClickhouseJAVASCRIPTvar d = JSON.parse(value.substring(value.indexOf("{\n")).trim()).data;
var r = {};
d.forEach(function(v) {
r[v.metric] = parseInt(v.value)
})
return JSON.stringify(r);
- Clickhouse Metricsweb.page.get[{$CH_URL}/?query=SELECT%20metric%2C%20value%20FROM%20system.metrics%20FORMAT%20JSON]00TEXTSELECT metric, value FROM system.metrics FORMAT JSONClickhouseJAVASCRIPTvar d = JSON.parse(value.substring(value.indexOf("{\n")).trim()).data;
var r = {};
d.forEach(function(v) {
r[v.metric] = parseInt(v.value)
})
return JSON.stringify(r);
- Clickhouse Pingweb.page.regexp[{$CH_URL}/ping,,,HTTP/1.1 (\d+),,\1]1d7dClickhouse{nodata(600)}=1 or {last()}<>200Clickhouse: Ping failedHIGH
{$CH_MAX_INACTIVE_PARTS}2000{$CH_MAX_PARTS}50{$CH_MAX_REPLICA_QUEUE}5{$CH_URL}http://127.0.0.1:8123