一般来说,当咱们的 ClickHouse 要在生产环境上线的时候,关于对 CH 的运行监控工作就必须提到议程上来了。
ClickHouse 在工作的过程中,会将一些个自身的运行状态记录到众多系统表中( sysytem.*)。所以我们对于 CH 自身的一些运行指标的监控数据,也主要来自这些系统表。
但是直接查询这些系统表会有一些不足之处:
首先,这种方式太过底层,不够直观,我们还需要在此之上加入一些可视化的直观表达;
其次,系统表只记录了CH自己的运行指标,有些时候我们需要外部系统的指标进行关联分析,例如 ZooKeeper、服务器 CPU、IO 等等。
现在比较主流的监控组合拳是 Prometheus Grafana, 其中 Prometheus 负责收集各类系统的运行指标; Grafana 负责可视化的部分。
ClickHouse 从 v20.1.2.4 开始,内置了对接 Prometheus 的功能,可以将其作为 Prometheus 的 Endpoint 服务,从而自动的将 metrics、events 和 asynchronous_metrics 三张系统的表的数据发送给 Prometheus。
而配置的方式也很简单,接下来我们用一个简单示例说明:
首先,我们需要在 CH 的 config.xml 中增加 prometheus 配置:
代码语言:javascript复制 <prometheus>
<endpoint>/metrics</endpoint>
<port>9363</port>
<metrics>true</metrics>
<events>true</events>
<asynchronous_metrics>true</asynchronous_metrics>
<status_info>true</status_info>
</prometheus>
之后,我们就可以访问到 CH 实例的 /metrics 服务,例如:
代码语言:javascript复制nauu@Boness-MBP ~ % curl http://10.37.129.9:9363/metrics
# HELP ClickHouseProfileEvents_Query Number of queries to be interpreted and potentially executed. Does not include queries that failed to parse or were rejected due to AST size limits, quota limits or limits on the number of simultaneously running queries. May include internal queries initiated by ClickHouse itself. Does not count subqueries.
# TYPE ClickHouseProfileEvents_Query counter
ClickHouseProfileEvents_Query 218
# HELP ClickHouseProfileEvents_SelectQuery Same as Query, but only for SELECT queries.
# TYPE ClickHouseProfileEvents_SelectQuery counter
ClickHouseProfileEvents_SelectQuery 186
# HELP ClickHouseProfileEvents_InsertQuery Same as Query, but only for INSERT queries.
# TYPE ClickHouseProfileEvents_InsertQuery counter
ClickHouseProfileEvents_InsertQuery 0
# HELP ClickHouseProfileEvents_FailedQuery Number of failed queries.
# TYPE ClickHouseProfileEvents_FailedQuery counter
ClickHouseProfileEvents_FailedQuery 46
# HELP ClickHouseProfileEvents_FailedSelectQuery Same as FailedQuery, but only for SELECT queries.
# TYPE ClickHouseProfileEvents_FailedSelectQuery counter
ClickHouseProfileEvents_FailedSelectQuery 36
# HELP ClickHouseProfileEvents_FailedInsertQuery Same as FailedQuery, but only for INSERT queries.
# TYPE ClickHouseProfileEvents_FailedInsertQuery counter
ClickHouseProfileEvents_FailedInsertQuery 0
Prometheus 就是通过这个服务收集 CH 系统的相关指标。
接着,我们安装 Prometheus:
代码语言:javascript复制docker pull prom/prometheus
在 prometheus.yml 中增加 CH 的 Endpoint 地址:
代码语言:javascript复制 - job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
- job_name: clickhouse-1
static_configs:
- targets: ['10.37.129.9:9363']
启动 Prometheus:
代码语言:javascript复制docker run --name prometheus -d -p 127.0.0.1:9090:9090 -v /Users/nauu/clickhouse/storage4docker/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
启动之后,我们在 Targets 菜单里面就能看到 CH 的 Endpoint 了。
现在我们进行最后一步,安装 Grafana :
代码语言:javascript复制docker pull grafana/grafana
docker run -d
-p 3000:3000
--name=grafana
-v /Users/nauu/clickhouse/storage4docker/grafana:/var/lib/grafana
grafana/grafana
登入 Grafana 后,在 Data Sources 中 添加 Prometheus 数据源:
之后新建 dashboard, 我们就能够通过 Prometheus 的数据源选取到 ClickHouse 的运行指标了:
至此,通过 ClickHouse 内置 Endpoint Prometheus Grafana 的监控组合拳就成型了。至于我们常见的一些监控指标,今后我再专门用一篇文章来聊一聊吧。