不像其他的数据库产品由外部工具来提供监控功能,秉持“万物皆表”设计理念的Clickhouse自己内嵌了监控自己状态的工具,而且是以表的形式提供的,涉及system.metrics, system.events, system.asynchronous_metrics三张系统表。本文将首先来对这三张表来做一个说明,不管最终的监控是通过Prometheus还是Grafana来呈现,这三张表都是最终监控数据的来源。
system.metrics该表记录的是一些即时计算出来的指标,显示的总是当前值,包括了三个字段:metric(指标名称)、value(当前值)、description(描述)。
关键的一些指标说明如下:
| 指标名称 | 说明 |
|---|---|
| Query | 当前执行的查询数量 |
| Merge | 当前正在执行后台合并的数量 |
| PartMutation | 当前执行修改操作(ALTER/DELETE/UPDATE)的数量 |
| BackgroundPoolTask | 后台线程池(BackgroundProcessingPool)中活跃的任务数 |
| DiskSpaceReservedForMerge | 预留给当前后台运行合并任务的存储空间 |
| QueryPreempted | 由于优先级的设置导致停掉和等待的查询数目 |
| TcpConnection | 连接到tcp server的连接数,一般指通过cli命令行方式连接的数目 |
| HTTPConnection | 连接到HTTP server的连接数 |
| OpenFileForRead | 当前正在读取的文件数目 |
| OpenFileForWrite | 当前正在写入的文件数目 |
| Read | 执行read系统调用函数的数量 |
| Write | 执行write系统调用函数的数量 |
| QueryThread | 执行查询请求的线程数 |
| MemoryTracking | 服务端分配的内存大小,单位字节 |
| EphemeralNode | zookeeper中临时节点的数量 |
| ZooKeeperSession | 连接zookeeper的会话数,不应该大于1,否则会出现bug |
| ZooKeeperWatch | zookeeper监听事件的数量 |
| ZooKeeperRequest | 当前向zookeeper发起请求的数量 |
| DelayedInserts | 由于大量的往MergeTree引擎的表里写数据导致阻塞的Insert请求数量 |
| GlobalThread | global thread pool的线程数 |
| LocalThread | local thread pool的线程数 |
| RWLockWaitingReaders | 等待释放读写锁来进行读操作的线程数 |
| RWLockWaitingWriters | 等待释放读写锁来进行写操作的线程数 |
| RWLockActiveReaders | 占有读锁的线程数 |
| RWLockActiveWriters | 占有写锁的线程数 |
该表记录的是一些后台周期性计算出来的指标,包括两个字段:metric(指标名称)、value(计算出的值)。下面罗列一些常用的指标:
| 指标名称 | 说明 |
|---|---|
| CPUFrequencyMHz_* | CPU各个核实际工作的主频 |
| MemoryResident | 驻留内存大小(物理内存),单位字节 |
| MemoryShared | 共享内存大小,单位字节 |
| MemoryVirtual | 虚拟内存大小,单位字节 |
| NumberOfDatabases | 数据库数量 |
| NumberOfTables | 库表数量 |
| Uptime | 系统运行时长 |
还有很多和jemalloc内存分配器相关的指标,感兴趣的同学可以自行查阅。
system.events该表记录的是系统中发生的事件统计数据(累加值),包括event(事件)、value(统计值)、description(描述信息)三个字段。
| 事件名称 | 说明 |
|---|---|
| Query | 所有查询的数目,包括查询成功和失败的数目,但不包括子查询 |
| SelectQuery | 和Query类似,但是只包括select请求 |
| InsertQuery | 和Query类似,但是只包括insert请求 |
| FailedQuery | 失败的Query数目 |
| FailedInsertQuery | 失败的insert请求数目 |
| ReadCompressedBytes | 从磁盘或网络上读取的压缩数据大小,单位字节 |
| CompressedReadBufferBlocks | 从磁盘或网络上读取的压缩的block数目 |
| CompressedReadBufferBytes | 读取的解压之后的字节数 |
| FunctionExecute | 执行的函数调用数量 |
| DiskReadElapsedMicroseconds | 读文件等待的时长,单位是微妙 |
| DiskWriteElapsedMicroseconds | 写文件等待时长,单位微妙 |
| InsertedRows | 所有表中 累计插入的行数 |
| InsertedBytes | 所有表中累计插入的字节数,非压缩 |
| Zookeeper[xxx] | 调用zookeeper各种方法的次数 |
| Merge | 后台启动的merge操作的数目 |
| MergesTimeMilliseconds | 后台merge操作消耗的总时长,单位毫秒 |
上面只是粗略列了一些比较常用的指标,后续实际工作中如有使用其它的指标会不断更新~~



