引言
ClickHouse 作為用于聯(lián)機(jī)分析(OLAP)的列式數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS), 最核心的特點(diǎn)是極致壓縮率和極速查詢性能。同時(shí),ClickHouse 支持 SQL 查詢,在基于大寬表的聚合分析查詢場(chǎng)景下展現(xiàn)出優(yōu)異的性能。因此,獲得了廣泛的應(yīng)用。本文旨在分享阿里云可觀測(cè)監(jiān)控 Prometheus 版對(duì)開(kāi)源 ClickHouse 的監(jiān)控實(shí)踐。
一、ClickHouse 簡(jiǎn)介
(一)技術(shù)特點(diǎn)
- 列式存儲(chǔ)與數(shù)據(jù)壓縮:
在執(zhí)行數(shù)據(jù)查詢時(shí),列式存儲(chǔ)可以減少數(shù)據(jù)掃描范圍和數(shù)據(jù)傳輸大小,提高數(shù)據(jù)查詢的效率。
(資料圖片僅供參考)
- 完備的 DBMS 功能
- DDL (數(shù)據(jù)定義語(yǔ)言):可以動(dòng)態(tài)地創(chuàng)建、修改或刪除數(shù)據(jù)庫(kù)、表和視圖,而無(wú)須重啟服務(wù);
- DML(數(shù)據(jù)操作語(yǔ)言):可以動(dòng)態(tài)查詢、插入、修改或刪除數(shù)據(jù)。
- 權(quán)限控制:
可按照用戶粒度設(shè)置數(shù)據(jù)庫(kù)或表的操作權(quán)限,保障數(shù)據(jù)安全性。
- 數(shù)據(jù)備份與恢復(fù)
提供數(shù)據(jù)備份導(dǎo)出與導(dǎo)入恢復(fù)機(jī)制,滿足生產(chǎn)環(huán)境要求。
- 分布式管理
提供集群模式,自動(dòng)管理多個(gè)數(shù)據(jù)庫(kù)節(jié)點(diǎn)。
(二)ClickHouse 典型適用場(chǎng)景
- 復(fù)雜查詢聚合的 OLAP 場(chǎng)景;
- 需要支持穩(wěn)定大量數(shù)據(jù)寫(xiě)入;
- 不需要高頻查詢;
- 不需要高級(jí) DBMS 功能,如事務(wù)性;不需要經(jīng)常很復(fù)雜的表間操作,比如 join 操作。
(三)ClickHouse 核心概念
- ClickHouse 集群(Cluster)
在物理構(gòu)成上,ClickHouse 集群是由多個(gè) ClickHouse Server 實(shí)例組成的分布式數(shù)據(jù)庫(kù)。這些 ClickHouse Server 根據(jù)規(guī)格的不同可以包含 1 個(gè)或多個(gè)副本(Replica)、1 個(gè)或多個(gè)分片(Shard)。在邏輯構(gòu)成上,一個(gè)ClickHouse 集群可以包含多個(gè)數(shù)據(jù)庫(kù)(Database)對(duì)象。
- 分片(Shard)
在超大規(guī)模海量數(shù)據(jù)處理場(chǎng)景下,單臺(tái)服務(wù)器的存儲(chǔ)、計(jì)算資源會(huì)成為瓶頸。為了進(jìn)一步提高效率,ClickHouse 將海量數(shù)據(jù)分散存儲(chǔ)到多臺(tái)服務(wù)器上,每臺(tái)服務(wù)器只存儲(chǔ)和處理海量數(shù)據(jù)的一部分,在這種架構(gòu)下,每臺(tái)服務(wù)器被稱(chēng)為一個(gè)分片(Shard)。
- 副本(Replica)
為了在異常情況下保證數(shù)據(jù)的安全性和服務(wù)的高可用性,ClickHouse 提供副本機(jī)制,將單臺(tái)服務(wù)器的數(shù)據(jù)冗余存儲(chǔ)在2臺(tái)或多臺(tái)服務(wù)器上。
- 數(shù)據(jù)庫(kù)(Database)
數(shù)據(jù)庫(kù)是云數(shù)據(jù)庫(kù) ClickHouse 集群中的最高級(jí)別對(duì)象,內(nèi)部包含表(Table)、列(Column)、視圖(View)、函數(shù)、數(shù)據(jù)類(lèi)型等。
- 表(Table)
表是數(shù)據(jù)的組織形式,由多行、多列構(gòu)成。
二、ClickHouse Metrics 監(jiān)控參考模型
我們從 Metrics 采集、監(jiān)控大盤(pán)、告警規(guī)則等三個(gè)方面定義 ClickHouse Metrics 監(jiān)控的參考模型,以便實(shí)現(xiàn)監(jiān)控閉環(huán)。
(一)Metrics 采集
- 主機(jī)節(jié)點(diǎn)監(jiān)控即硬件資源(Node-Exporter)
- 處理器、內(nèi)存負(fù)載;
- 磁盤(pán)存儲(chǔ);
- ClickHouse 服務(wù)指標(biāo)監(jiān)控(集成進(jìn) ClickHouse-Exporter)
- 系統(tǒng)指標(biāo)(metrics): system.metrics 表用于統(tǒng)計(jì) ClickHouse 服務(wù)在運(yùn)行時(shí),當(dāng)前正在執(zhí)行的高層次的概要信息,包括了正在執(zhí)行的查詢總次數(shù)、正在發(fā)生的合并操作總次數(shù)等。具體指標(biāo)通過(guò)執(zhí)行
select * from system.metrics; - 系統(tǒng)事件(events):system.events 用于統(tǒng)計(jì) ClickHouse 服務(wù)在運(yùn)行過(guò)程中已經(jīng)執(zhí)行過(guò)的高層次的 累積概要信息,包括查詢總次數(shù)、 SELECT 查詢總次數(shù)等,具體指標(biāo)通過(guò)執(zhí)行查詢
select * from system.events--> 64個(gè)指標(biāo); - 系統(tǒng)異步指標(biāo)(asynchronous_ metrics):asynchronous_metrics 用于統(tǒng)計(jì) ClickHouse 服務(wù)運(yùn)行過(guò)程時(shí),當(dāng)前正在后臺(tái) 異步運(yùn)行的高層次的概要信息,包括當(dāng)前分配的內(nèi)存、執(zhí)行隊(duì)列中的任務(wù)數(shù)量等。 具體指標(biāo)通過(guò)執(zhí)行查詢
select * from system.asynchronous_metrics--> 500個(gè)指標(biāo); - 查詢?nèi)罩荆翰樵內(nèi)罩灸壳爸饕?種類(lèi)型,所有查詢?nèi)罩驹谀J(rèn)配置下都是關(guān)閉狀態(tài),需要在 config.xml文件配置,開(kāi)啟日志后可以到對(duì)應(yīng)的日志表進(jìn)行日志查詢
system.query_log。
- 系統(tǒng)指標(biāo)(metrics): system.metrics 表用于統(tǒng)計(jì) ClickHouse 服務(wù)在運(yùn)行時(shí),當(dāng)前正在執(zhí)行的高層次的概要信息,包括了正在執(zhí)行的查詢總次數(shù)、正在發(fā)生的合并操作總次數(shù)等。具體指標(biāo)通過(guò)執(zhí)行
(1)主機(jī)節(jié)點(diǎn)監(jiān)控
該部分指標(biāo)主要來(lái)源于 Node-Exporter , 提供集群/ ECS 節(jié)點(diǎn) CPU、內(nèi)存、磁盤(pán)、inode 等監(jiān)控指標(biāo)。
(2)ClikcHouse 服務(wù)指標(biāo)
ClikckHouse 內(nèi)置 Metrics、events 和 asynchronous_metrics 三張系統(tǒng)表用于存放其監(jiān)控指標(biāo),通過(guò)預(yù)先安裝 clickhouse-exporter 將這三張系統(tǒng)表中的數(shù)據(jù)轉(zhuǎn)化、發(fā)送給阿里云可觀測(cè)監(jiān)控 Prometheus 版。
??注意: 以上列出的為關(guān)鍵指標(biāo),更多詳細(xì)指標(biāo)詳見(jiàn): 應(yīng)用實(shí)時(shí)監(jiān)控服務(wù)ARMS控制臺(tái)-Prometheus監(jiān)控-Prometheus實(shí)例列表-選擇實(shí)例-集成中心-ClickHouse
(二)ClickHouse 監(jiān)控大盤(pán)
我們默認(rèn)提供了arms-clickhouse-ecs和arms-clickhouse-k8s兩個(gè)大盤(pán),分別針對(duì) ClickHouse 安裝在ACK 集群/ ECS 中兩個(gè)場(chǎng)景,這兩個(gè)大盤(pán)中圖標(biāo)均來(lái)自于上述 Metrics 指標(biāo)。
??注意: 主機(jī)節(jié)點(diǎn)監(jiān)控需提前安裝 Node-Exporter,以下大盤(pán)圖示數(shù)值僅為展示作用,不具備參考價(jià)值,實(shí)際數(shù)值依 ClickHouse 環(huán)境而定
(1)主機(jī)節(jié)點(diǎn)指標(biāo)
(2)ClickHouse Server指標(biāo)
(3)MergeTree 指標(biāo)
(4)消息隊(duì)列指標(biāo)
(三)告警規(guī)則
參考前面對(duì)各項(xiàng)主要指標(biāo)介紹,針對(duì) ClickHouse 可以重點(diǎn)配置以下告警項(xiàng),這些告警項(xiàng)已內(nèi)置到arms-clickhouse告警規(guī)則中,可依據(jù)自身業(yè)務(wù)情況及經(jīng)驗(yàn)調(diào)整告警閾值:
- 【L0】CPU 超過(guò) 90%
- 【L0】Mem 超過(guò) 90%
- 【L0】Disk 超過(guò) 90%
- 【L0】Inode 使用率超過(guò) 90%
- 【L0】寫(xiě)入失敗率超過(guò) 5%
- 【L1】運(yùn)行 Query 個(gè)數(shù)超過(guò) 95
- 【L1】連接數(shù)超過(guò) 4k
- 【L1】失敗 Query 個(gè)數(shù)超過(guò) 10
(四)相關(guān)實(shí)踐示例
(1)CPU 過(guò)高
- 確認(rèn) CPU 占用過(guò)高是由 ClickHouse 引起的??梢酝ㄟ^(guò) top 命令
top -H -p xxx查看系統(tǒng)的 CPU 占用率,找出占用 CPU 比較高的進(jìn)程。如果發(fā)現(xiàn) ClickHouse 進(jìn)程占用了大量 CPU 資源,那么就需要進(jìn)一步排查。 - 使用 ClickHouse 內(nèi)置查詢來(lái)查看系統(tǒng)的狀態(tài)。可以使用以下查詢:
SHOW PROCESSLIST query WHERE query NOT LIKE "%SYSTEM%" ORDER BY elapsed DESC LIMIT 10這個(gè)查詢可以列出最耗時(shí)的查詢,找到可能引起 CPU 占用過(guò)高的查詢語(yǔ)句。
- 檢查 ClickHouse 配置。一些配置參數(shù)可能導(dǎo)致 ClickHouse 占用大量 CPU 資源??梢圆榭?ClickHouse 配置文件,確認(rèn)配置是否合理,是否需要調(diào)整。
- 檢查 ClickHouse 日志。ClickHouse 日志中可能包含錯(cuò)誤信息或警告信息,可以幫助找出問(wèn)題所在。
- 檢查硬件資源是否充足。如果系統(tǒng) CPU、內(nèi)存等硬件資源不足,那么 ClickHouse 可能會(huì)出現(xiàn) CPU 占用過(guò)高的情況??梢詸z查系統(tǒng)的硬件資源使用情況,確認(rèn)是否需要升級(jí)硬件。
- 升級(jí) ClickHouse 版本。如果是 ClickHouse 版本的問(wèn)題,可以考慮升級(jí)到更穩(wěn)定的版本。
(2)內(nèi)存過(guò)高
- 使用內(nèi)置查詢查看內(nèi)存占用情況??梢允褂靡韵虏樵儊?lái)查看 ClickHouse 系統(tǒng)的內(nèi)存占用情況:
SELECT * FROM system.metrics WHERE metric LIKE "%memory%";這個(gè)查詢會(huì)列出 ClickHouse 的各個(gè)內(nèi)存指標(biāo),包括總內(nèi)存、已用內(nèi)存、緩存內(nèi)存等??梢愿鶕?jù)這些指標(biāo)來(lái)判斷內(nèi)存占用是否過(guò)高。
- 檢查 ClickHouse 的配置。一些配置參數(shù)可能會(huì)導(dǎo)致 ClickHouse 占用大量的內(nèi)存資源??梢圆榭?ClickHouse 的配置文件,確認(rèn)配置是否合理,是否需要調(diào)整。
- 檢查系統(tǒng)的內(nèi)存資源使用情況。如果系統(tǒng)的內(nèi)存資源不足,那么 ClickHouse 可能會(huì)出現(xiàn)內(nèi)存占用過(guò)高的情況。可以使用命令
free -m查看系統(tǒng)的內(nèi)存使用情況。 - 檢查 ClickHouse 的日志。ClickHouse 的日志中可能包含錯(cuò)誤信息或警告信息,可以幫助找出問(wèn)題所在。
- 升級(jí) ClickHouse 版本。如果是 ClickHouse 版本的問(wèn)題,可以考慮升級(jí)到更穩(wěn)定的版本。
- 減少查詢語(yǔ)句的數(shù)據(jù)量和計(jì)算量。如果查詢語(yǔ)句的數(shù)據(jù)量和計(jì)算量過(guò)大,那么 ClickHouse 可能會(huì)占用大量的內(nèi)存資源??梢钥紤]優(yōu)化查詢語(yǔ)句,減少數(shù)據(jù)量和計(jì)算量。
(3)Disk 占用過(guò)高
- 使用系統(tǒng)工具查看磁盤(pán)占用情況??梢允褂妹?
df -h來(lái)查看系統(tǒng)的磁盤(pán)使用情況,查看是否有磁盤(pán)空間不足的情況。 - 檢查 ClickHouse 的配置。一些配置參數(shù)可能會(huì)導(dǎo)致 ClickHouse 占用大量的磁盤(pán)資源??梢圆榭?ClickHouse 的配置文件,確認(rèn)配置是否合理,是否需要調(diào)整。
- 使用 ClickHouse 內(nèi)置的查詢來(lái)查看磁盤(pán)占用情況??梢允褂靡韵虏樵儊?lái)查看 ClickHouse 的磁盤(pán)占用情況:
SELECT database, table, sum(bytes) AS total_size FROM system.parts WHERE active GROUP BY database, table ORDER BY total_size DESC這個(gè)查詢會(huì)列出 ClickHouse 的各個(gè)表的占用磁盤(pán)空間情況,可以根據(jù)這個(gè)查詢來(lái)判斷磁盤(pán)占用是否過(guò)高。
- 檢查 ClickHouse 的日志。ClickHouse 的日志中可能包含錯(cuò)誤信息或警告信息,可以幫助找出問(wèn)題所在。
- 清理不必要的數(shù)據(jù)。如果 ClickHouse 中存在不必要的數(shù)據(jù),可以考慮進(jìn)行清理,釋放磁盤(pán)空間。
三、如何使用阿里云可觀測(cè)監(jiān)控 Prometheus 版監(jiān)控ClickHouse 服務(wù)
(一)安裝 Prometheus 監(jiān)控
(1)前序條件:已根據(jù)安裝ClickHouse 安裝環(huán)境,創(chuàng)建對(duì)應(yīng)Prometheus 實(shí)例。
根據(jù) ClickHouse 安裝方式:
- 如果 ClickHouse 部署在 ACK 中, 并創(chuàng)建了Prometheus for 容器實(shí)例,創(chuàng)建請(qǐng)參考
Prometheus for 容器服務(wù); - 如果 ClickHouse 部署在 ECS 中, 并創(chuàng)建了Prometheus for ECS 實(shí)例,創(chuàng)建請(qǐng)參考
Prometheus for ECS。
(2)安裝方式一:Prometheus for 容器服務(wù)
在Prometheus for 容器服務(wù)實(shí)例中,ClickHouse 已經(jīng)默認(rèn)在集成中心中展示,用戶可以在應(yīng)用實(shí)時(shí)監(jiān)控服務(wù)ARMS控制臺(tái)-Prometheus監(jiān)控-Prometheus實(shí)例列表-選擇Prometheus for 容器服務(wù)實(shí)例-集成中心中找到入口,點(diǎn)擊 ClickHouse 圖標(biāo),可以看到常見(jiàn)的指標(biāo)列表和大盤(pán)縮略圖。點(diǎn)擊+安裝可以接入 ClickHouse 監(jiān)控,配置如下圖:
- Exporter 名稱(chēng): 自定義 Exporter 名稱(chēng);
- ClickHouse Scrape 地址: IP + Port, Exporter 能夠訪問(wèn)的 ClickHouse 地址 ;
- ClickHouse 用戶名: 登陸用戶名;
- ClickHouse 密碼: 登陸密碼;
- Metrics 采集間隔(秒): 默認(rèn) 30s 采集一次, 一般不需要更改。
點(diǎn)擊確定后, clickhouse-exporter-填入的名稱(chēng)的 Exporter 會(huì)被安裝到 arms-prom 命名空間下,并自動(dòng)完成采集 job 的配置。
可以在應(yīng)用實(shí)時(shí)監(jiān)控服務(wù)ARMS控制臺(tái)-Prometheus監(jiān)控-Prometheus實(shí)例列表-選擇Prometheus for 容器服務(wù)實(shí)例-集成中心-已安裝-ClikckHouse中快速瀏覽相關(guān)的 Target/指標(biāo)/大盤(pán)/告警/服務(wù)發(fā)現(xiàn)/ Exporter 等信息。
(3)安裝方式二:Prometheus for ECS
安裝 ClickHouse 相同 VPC 的Prometheus for ECS實(shí)例,由于Prometheus for ECS實(shí)例中 ClickHouse 的主機(jī)節(jié)點(diǎn)監(jiān)控來(lái)自于Node-Exportor,所以先安裝 Node-Exportor。用戶可以在
應(yīng)用實(shí)時(shí)監(jiān)控服務(wù)ARMS控制臺(tái)-Prometheus監(jiān)控-Prometheus實(shí)例列表-選擇Prometheus for ECS實(shí)例-集成中心中找到入口,點(diǎn)擊Node-Exporter圖標(biāo),點(diǎn)擊+安裝可以接入 Node-Exporter 監(jiān)控,然后選擇對(duì)應(yīng) ECS 實(shí)例安裝即可。
用戶可以在應(yīng)用實(shí)時(shí)監(jiān)控服務(wù)ARMS控制臺(tái)-Prometheus監(jiān)控-Prometheus實(shí)例列表-選擇Prometheus for ECS實(shí)例-集成中心中找到入口,點(diǎn)擊 ClickHouse 圖標(biāo),點(diǎn)擊+安裝可以接入 ClickHouse 監(jiān)控,配置與上述Prometheus for 容器服務(wù)相同。
(4)指標(biāo)未采集的排查方法
??注意: 下面是Prometheus for 容器實(shí)例的排查方法,Prometheus for ECS實(shí)例請(qǐng)聯(lián)系Prometheus值班-美娜
ClickHouse-Exporter 本身的主要工作是指標(biāo)映射,需要填入正確 ClickHouse 抓取 URL及登陸用戶名、密碼。如果出現(xiàn)指標(biāo)采集不到的問(wèn)題,可以參考如下的排查思路。
- 檢查 Prometheus Target 狀態(tài),如果 Target 顯示為
Unhealthy狀態(tài),請(qǐng)排查clickhouse-exporterPod 運(yùn)行狀態(tài);如果 Target 狀態(tài)正常,繼續(xù)下一步。
- 若 Target 狀態(tài)正常,但抓取指標(biāo)量很少且指標(biāo)全為
go_相關(guān)查看clickhouse-exporterPod 日志,確認(rèn)日志中是否有報(bào)錯(cuò)信息。
- 查看
clickhouse-exporterPod 日志,確定 Exporter 抓取目標(biāo) URL 是否正常。
(二)查看大盤(pán)
如需要查看 ClickHouse 相關(guān)大盤(pán),可以從應(yīng)用實(shí)時(shí)監(jiān)控服務(wù)ARMS控制臺(tái)-Prometheus監(jiān)控-Prometheus實(shí)例列表-實(shí)例詳情頁(yè)-集成中心-已安裝-ClikckHouse中點(diǎn)選大盤(pán),列出兩類(lèi)大盤(pán)arms-clickhouse-ecs和arms-clickhouse-k8s,根據(jù)環(huán)境選擇對(duì)應(yīng)的大盤(pán)模板。
以下是arms-clickhouse-k8sVariables 參數(shù)說(shuō)明:
- datasource : 數(shù)據(jù)源,選擇對(duì)應(yīng)的實(shí)例名稱(chēng);
- job: 新建 clickhouse-exporter 對(duì)應(yīng) job 名稱(chēng),與 clickhouse-exporter 名稱(chēng)一致,用于展示ClickHouseServer 指標(biāo)、MergeTree 指標(biāo)、消息隊(duì)列指標(biāo);
- namespace: ClickHouse Pod 所在的命名空間,用于主機(jī)節(jié)點(diǎn)指標(biāo)篩選;
- Pod: 可根據(jù)需要選擇對(duì)應(yīng)的 ClickHouse Pod,用于主機(jī)節(jié)點(diǎn)指標(biāo)篩選。
以下是arms-clickhouse-ecsVariables參數(shù)說(shuō)明:
- datasource: 數(shù)據(jù)源,選擇對(duì)應(yīng)的實(shí)例名稱(chēng);
- job: 新建的 clickhouse-exporter 對(duì)應(yīng) job 名稱(chēng),與clickhouse-exporter 名稱(chēng)一致,用于展示ClickHouseServer 指標(biāo)、MergeTree 指標(biāo)、消息隊(duì)列指標(biāo);
- instance: ecs 實(shí)例 IP,用于主機(jī)節(jié)點(diǎn)篩選。
(三)配置告警
在集成中心安裝 ClickHouse 監(jiān)控時(shí),已經(jīng)默認(rèn)增加了arms-clickhouse告警分組的相關(guān)規(guī)則,但未啟用,您只需要簡(jiǎn)單修改參數(shù)并確認(rèn)啟用即可。
可以從應(yīng)用實(shí)時(shí)監(jiān)控服務(wù)ARMS控制臺(tái)-Prometheus監(jiān)控-Prometheus實(shí)例列表-實(shí)例詳情頁(yè)-集成中心-已安裝-ClikckHouse中選擇告警-創(chuàng)建告警規(guī)則進(jìn)入規(guī)則新增頁(yè)面,在其中告警分組選擇arms-clickhouse告警分組并根據(jù)環(huán)境選擇您需要啟用的告警指標(biāo),確認(rèn)參數(shù)閾值并保存,即可完成告警規(guī)則的創(chuàng)建。
四、自建 Prometheus 與阿里云可觀測(cè)監(jiān)控 Prometheus 版監(jiān)控 ClickHouse 優(yōu)劣對(duì)比
Prometheus 作為目前主流可觀測(cè)開(kāi)源項(xiàng)目之一,已被眾多企業(yè)所廣泛應(yīng)用,但還會(huì)遇到不少困難與挑戰(zhàn):
- 每套完整的自建觀測(cè)系統(tǒng)都需要安裝并配置 Prometheus、Grafana、AlertManager 等組件,部署過(guò)程復(fù)雜、實(shí)施周期長(zhǎng),并且每次升級(jí)都需要對(duì)每個(gè)組件進(jìn)行維護(hù);
- 開(kāi)源分享的相關(guān)大盤(pán)不夠?qū)I(yè),更新速度慢,缺少開(kāi)箱即用的豐富指標(biāo);
- 由于安全、組織管理等因素,用戶業(yè)務(wù)通常部署在多個(gè)相互隔離的 VPC,需要在多個(gè) VPC 內(nèi)都重復(fù)、獨(dú)立部署 Prometheus,導(dǎo)致部署和運(yùn)維成本高。
針對(duì)以上問(wèn)題,阿里云可觀測(cè)監(jiān)控 Prometheus 版進(jìn)行了以下優(yōu)化:
結(jié)束語(yǔ)
阿里云可觀測(cè)監(jiān)控 Prometheus 版與阿里云容器服務(wù)無(wú)縫集成,提供了開(kāi)源 ClickHouse 的指標(biāo)采集、用戶大盤(pán)、告警規(guī)則等項(xiàng)目的一鍵集成,用戶免運(yùn)維,開(kāi)箱即用,目前 ClickHouse 指標(biāo)采集功能仍在不斷演進(jìn)中,歡迎大家試用和提出改進(jìn)意見(jiàn)。
關(guān)鍵詞:

營(yíng)業(yè)執(zhí)照公示信息