目录
1.2.7 system.asynchronous_metrics表
1.3.3 system.query_thread_log表
2.2 集成第三方监控平台(如Grafana、Zabbix等)
2.2.10 Zabbix能监控ClickHouse哪些指标
2.2.12 如何使用Datadog监控ClickHouse
1. 系统表和监控指标
ClickHouse提供了一些系统表,可以用来查看服务器的状态、进程以及环境,以及服务器的内部进程。这些系统表存储在`system`数据库中,仅提供数据读取功能。大多数系统表将其数据存储在RAM中,而系统日志表(如`metric_log`, `query_log`, `query_thread_log`, `trace_log`, `part_log`, `crash_log`和`text_log`)默认采用MergeTree引擎并将其数据存储在文件系统中。
1.1 如何查看服务状态
可以通过多种方式查看ClickHouse服务器的状态。例如,可以通过观察服务器日志来跟踪服务器事件。此外,ClickHouse服务本身具有用于自我状态监视的指标,可以在`system.metrics`,`system.events`以及`system.asynchronous_metrics`等系统表中查看所有的指标项。
还可以通过HTTP API监视服务器可用性,例如将HTTP GET请求发送到/ping。如果服务器可用,它将以200 OK响应。
要查看ClickHouse服务器的状态,您可以使用以下命令:`sudo systemctl status clickhouse-server`。这将显示有关ClickHouse服务器进程的信息,包括其运行状态和最近的日志条目。
此外,您还可以通过查询系统表`system.processes`来查看后台进程。要执行此操作,您可以使用ClickHouse客户端或任何支持SQL查询的工具连接到ClickHouse服务器,并运行以下查询:`SELECT * FROM system.processes`。这将返回有关当前正在运行的查询的信息,包括它们的用户、查询ID、查询文本、持续时间和内存使用情况。
1.2 ClickHouse系统表
ClickHouse有许多有用的系统表,它们提供有关服务器状态、进程和环境以及服务器内部进程的信息。这些系统表位于system数据库中,仅可用于读取数据,不能删除或更改,但可以分离。
- system.tables:包含服务器知道的每个表的元数据。
- system.columns:包含每个表中每个列的元数据。
- system.databases:包含每个数据库的元数据。
此外,还有一些系统日志表,如metric_log、query_log、query_thread_log、trace_log、part_log、crash_log和text_log。它们由MergeTree表引擎提供服务,并默认将其数据存储在文件系统中。
1.2.1 system.tables表
ClickHouse的system.tables表包含服务器知道的每个表的元数据。它包含以下列:
- database (String) - 表所在的数据库名称。
- name (String) - 表名。
- engine (String) - 表引擎名称(不带参数)。
- is_temporary (UInt8) - 指示表是否为临时表的标志。
- data_paths (Array(String)) - 文件系统中表数据的路径。
- metadata_path (String) - 文件系统中表元数据的路径。
- metadata_modification_time (DateTime) - 表元数据最近修改时间。
- create_table_query (String) - 用于创建表的查询。
- engine_full (String) - 表引擎的参数。
1.2.2 system.columns表
ClickHouse的system.columns表包含所有表中列的信息。你可以使用这个表来获得类似于DESCRIBE TABLE查询的信息,但是可以同时获得多个表的信息。临时表中的列只在创建它们的会话中的system.columns中才可见,并且它们的database字段显示为空。
system.columns表包含以下列:
- database (String) - 数据库名称。
- table (String) - 表名。
- name (String) - 列名。
- type (String) - 列类型。
- position (UInt64) - 表中列的序号,从1开始。
- default_kind (String) - 默认值的表达式类型(DEFAULT、MATERIALIZED、ALIAS),如果未定义,则为空字符串。
- default_expression (String) - 默认值的表达式,如果未定义,则为空字符串。
例如,你可以使用以下查询来查看system.numbers表中所有列的名称和类型:
SELECT name, type FROM system.columns WHERE table = 'numbers'
这将返回以下结果:
┌─name────┬─type───┐
│ number │ UInt64 │
└─────────┴────────┘
1.2.3 system.databases表
ClickHouse的system.databases表包含当前用户可用的数据库的信息。它包含以下列:
- name (String) - 数据库名称。
- engine (String) - 数据库引擎。
- data_path (String) - 数据路径。
- metadata_path (String) - 元数据路径。
例如,你可以使用以下查询来查看当前用户可用的所有数据库:
SELECT * FROM system.databases
这将返回类似于以下的结果:
┌─name────────────┬─engine───┬─data_path────────────────────┬─metadata_path──────────────────────────────┐
│ default │ Ordinary │ /var/lib/clickhouse/data/ │ /var/lib/clickhouse/metadata/default.sql │
│ system │ Ordinary │ /var/lib/clickhouse/data/ │ /var/lib/clickhouse/metadata/system.sql │
│ _temporary_and_external_tables│ Ordinary │ /var/lib/clickhouse/data/ │ │
└─────────────────┴──────────┴─────────────────────────────┴
1.2.4 system.metrics表
`system.metrics`表包含可以即时计算或具有当前值的指标。例如,同时处理的查询数量或当前的复制延迟。它的列包括:
- `metric` (String) - 指标名称。
- `value` (Int64) - 指标的值。
- `description` (String) - 指标的描述。
查看指标名称:
SELECT metric FROM system.metrics
查看同时处理的查询数量:
`SELECT value FROM system.metrics WHERE metric = 'Query'`
这将返回一个值,表示当前正在处理的查询数量。
1.2.5 system.events表
`system.events`表包含有关系统中发生的事件数量的信息。它的列包括:
- `event` (String) - 事件名称。
- `value` (UInt64) - 发生的事件数量。
- `description` (String) - 事件描述。
仅查看SELECT查询事件的数量:
SELECT value FROM system.events WHERE event = 'SelectQuery'
1.2.6 system.processes表
ClickHouse的system.processes表用于实现SHOW PROCESSLIST查询¹。它包含以下列:
- user (String) - 发出查询的用户。请注意,对于分布式处理,查询在默认用户下发送到远程服务器。该字段包含特定查询的用户名,而不是该查询启动的查询的用户名。
- address (String) - 请求发出的IP地址。对于分布式处理也是如此。要跟踪分布式查询最初从哪里发出,请在查询请求服务器上查看system.processes。
- elapsed (Float64) - 自请求执行开始以来经过的时间(以秒为单位)。
- rows_read (UInt64) - 从表中读取的行数。对于分布式处理,在请求服务器上,这是所有远程服务器的总和。
- bytes_read (UInt64) - 从表中读取的未压缩字节数。对于分布式处理,在请求服务器上,这是所有远程服务器的总和。
- total_rows_approx (UInt64) - 应读取的行总数的近似值。对于分布式处理,在请求服务器上,这是所有远程服务器的总和。在请求处理期间,当新的要处理的源变得已知时,它可以更新。
- memory_usage (UInt64) - 请求使用的RAM量。它可能不包括某些类型的专用内存。请参阅max_memory_usage设置。
- query (String) - 查询文本。对于INSERT,它不包括要插入的数据。
- query_id (String) - 查询ID(如果定义)。
- is_cancelled (Int8) - 查询是否已取消。
- is_all_data_sent (Int8) - 是否将所有数据发送给客户端(换句话说,查询已在服务器上完成)。
1.2.7 system.asynchronous_metrics表
ClickHouse的system.asynchronous_metrics表包含在后台定期计算的指标,例如正在使用的RAM数量。
system.asynchronous_metrics表包含以下列:
- metric (String) - 指标名称。
- value (Float64) - 指标值。
例如,你可以使用以下查询来查看当前使用的RAM数量:
SELECT value FROM system.asynchronous_metrics WHERE metric = 'MemoryTracking'
这将返回类似于以下的结果:
┌──────value─┐
│ 1234567890 │
└────────────┘
1.3 ClickHouse系统日志表
1.3.1 metric_log表
`system.metric_log`表包含了

本文详细介绍了ClickHouse的系统表,包括tables、columns、databases、metrics、events、processes、asynchronous_metrics等,以及日志表如metric_log、query_log等。此外,还讨论了如何使用Grafana和Zabbix等监控工具集成ClickHouse,监控服务器状态、性能指标和日志。

4205

被折叠的 条评论
为什么被折叠?



