統一觀測丨藉助 Prometheus 監控 ClickHouse 數據庫

引言

ClickHouse 作爲用於聯機分析(OLAP)的列式數據庫管理系統(DBMS),最核心的特點是極致壓縮率和極速查詢性能。同時,ClickHouse 支持 SQL 查詢,在基於大寬表的聚合分析查詢場景下展現出優異的性能。因此,獲得了廣泛的應用。本文旨在分享阿里雲可觀測監控 Prometheus 版對開源 ClickHouse 的監控實踐。

01 ClickHouse 簡介

(一)技術特點

  • 列式存儲與數據壓縮:

在執行數據查詢時,列式存儲可以減少數據掃描範圍和數據傳輸大小,提高數據查詢的效率。

  • 完備的 DBMS 功能
    • DDL (數據定義語言):可以動態地創建、修改或刪除數據庫、表和視圖,而無須重啓服務;
    • DML(數據操作語言):可以動態查詢、插入、修改或刪除數據。
  • 權限控制:

可按照用戶粒度設置數據庫或表的操作權限,保障數據安全性。

  • 數據備份與恢復

提供數據備份導出與導入恢復機制,滿足生產環境要求。

  • 分佈式管理

提供集羣模式,自動管理多個數據庫節點。

(二)ClickHouse 典型適用場景

  • 複雜查詢聚合的 OLAP 場景;
  • 需要支持穩定大量數據寫入;
  • 不需要高頻查詢;
  • 不需要高級 DBMS 功能,如事務性;不需要經常很複雜的表間操作,比如 join 操作。

(三)ClickHouse 核心概念

  • ClickHouse 集羣(Cluster)

在物理構成上,ClickHouse 集羣是由多個 ClickHouse Server 實例組成的分佈式數據庫。這些 ClickHouse Server 根據規格的不同可以包含 1 個或多個副本(Replica)、1 個或多個分片(Shard)。在邏輯構成上,一個 ClickHouse 集羣可以包含多個數據庫(Database)對象。

  • 分片(Shard)

在超大規模海量數據處理場景下,單臺服務器的存儲、計算資源會成爲瓶頸。爲了進一步提高效率,ClickHouse 將海量數據分散存儲到多臺服務器上,每臺服務器只存儲和處理海量數據的一部分,在這種架構下,每臺服務器被稱爲一個分片(Shard)。

  • 副本(Replica)

爲了在異常情況下保證數據的安全性和服務的高可用性,ClickHouse 提供副本機制,將單臺服務器的數據冗餘存儲在 2 臺或多臺服務器上。

  • 數據庫(Database)

數據庫是雲數據庫 ClickHouse 集羣中的最高級別對象,內部包含表(Table)、列(Column)、視圖(View)、函數、數據類型等。

  • 表(Table)

表是數據的組織形式,由多行、多列構成。

02 ClickHouse Metrics 監控參考模型

我們從 Metrics 採集、監控大盤、告警規則等三個方面定義 ClickHouse Metrics 監控的參考模型,以便實現監控閉環。

(一)Metrics 採集

  • 主機節點監控即硬件資源(Node-Exporter)
    • 處理器、內存負載;
    • 磁盤存儲;
  • ClickHouse 服務指標監控(集成進ClickHouse-Exporter)
    • 系統指標(metrics):system.metrics 表用於統計 ClickHouse 服務在運行時,當前正在執行的高層次的概要信息,包括了正在執行的查詢總次數、正在發生的合併操作總次數等。具體指標通過執行 select * from system.metrics;
    • 系統事件(events):system.events 用於統計 ClickHouse 服務在運行過程中已經執行過的高層次的 累積概要信息,包括查詢總次數、 SELECT 查詢總次數等,具體指標通過執行查詢 select * from system.events--> 64 個指標;
    • 系統異步指標(asynchronous_ metrics):asynchronous_metrics 用於統計 ClickHouse 服務運行過程時,當前正在後臺異步運行的高層次的概要信息,包括當前分配的內存、執行隊列中的任務數量等。具體指標通過執行查詢 select * from system.asynchronous_metrics --> 500 個指標;
    • 查詢日誌:查詢日誌目前主要有 6 種類型,所有查詢日誌在默認配置下都是關閉狀態,需要在 config.xml 文件配置,開啓日誌後可以到對應的日誌表進行日誌查詢 system.query_log。

(1)主機節點監控

需要事先安裝該部分指標主要來源於 Node-Exporter,提供集羣/ ECS 節點 CPU、內存、磁盤、inode 等監控指標。

(2)ClikcHouse 服務指標

ClikckHouse 內置 Metrics、events 和 asynchronous_metrics 三張系統表用於存放其監控指標,通過預先安裝 clickhouse-exporter 將這三張系統表中的數據轉化、發送給阿里雲可觀測監控 Prometheus 版。

⚠️注意: 以上列出的爲關鍵指標,更多詳細指標詳見: prometheus 實例詳情頁-集成中心-ClickHouse

(二)ClickHouse 監控大盤

我們默認提供了 arms-clickhouse-ecs 和 arms-clickhouse-k8s 兩個大盤,分別針對 Clickhouse 安裝在 ACK 集羣/ ECS 中兩個場景,這兩個大盤中圖標均來自於上述 Metrics 指標。

⚠️注意: 主機節點監控需提前安裝 Node-Exporter,以下大盤圖示數值僅爲展示作用,不具備參考價值,實際數值依 ClickHouse 環境而定

(1)主機節點指標

(2)ClickHouse Server指標

(3)MergeTree 指標

(4)消息隊列指標

(三)告警規則

參考前面對各項主要指標介紹,針對 ClickHouse 可以重點配置以下告警項,這些告警項已內置到 arms-clickhouse 告警規則中,可依據自身業務情況及經驗調整告警閾值:

  • 【L0】CPU 超過 90%
  • 【L0】Mem 超過 90%
  • 【L0】Disk 超過 90%
  • 【L0】Inode 使用率超過 90%
  • 【L0】寫入失敗率超過 5%
  • 【L1】運行 Query 個數超過 95
  • 【L1】連接數超過 4k
  • 【L1】失敗 Query 個數超過 10

(四)相關實踐示例

(1)CPU 過高

  • 確認 CPU 佔用過高是由 ClickHouse 引起的。可以通過 top 命令 top -H -p xxx查看系統的 CPU 佔用率,找出佔用 CPU 比較高的進程。如果發現 ClickHouse 進程佔用了大量 CPU 資源,那麼就需要進一步排查。
  • 使用 ClickHouse 內置查詢來查看系統的狀態。可以使用以下查詢:
SHOW PROCESSLIST query WHERE query NOT LIKE '%SYSTEM%' ORDER BY elapsed DESC LIMIT 10

這個查詢可以列出最耗時的查詢,找到可能引起 CPU 佔用過高的查詢語句。

  • 檢查 ClickHouse 配置。一些配置參數可能導致 ClickHouse 佔用大量 CPU 資源。可以查看 ClickHouse 配置文件,確認配置是否合理,是否需要調整。
  • 檢查 ClickHouse 日誌。ClickHouse 日誌中可能包含錯誤信息或警告信息,可以幫助找出問題所在。
  • 檢查硬件資源是否充足。如果系統 CPU、內存等硬件資源不足,那麼 ClickHouse 可能會出現 CPU 佔用過高的情況。可以檢查系統的硬件資源使用情況,確認是否需要升級硬件。
  • 升級 ClickHouse 版本。如果是 ClickHouse 版本的問題,可以考慮升級到更穩定的版本。

(2)內存過高

  • 使用內置查詢查看內存佔用情況。可以使用以下查詢來查看 ClickHouse 系統的內存佔用情況:
SELECT * FROM system.metrics WHERE metric LIKE '%memory%';

這個查詢會列出 ClickHouse 的各個內存指標,包括總內存、已用內存、緩存內存等。可以根據這些指標來判斷內存佔用是否過高。

  • 檢查 ClickHouse 的配置。一些配置參數可能會導致 ClickHouse 佔用大量的內存資源。可以查看 ClickHouse 的配置文件,確認配置是否合理,是否需要調整。
  • 檢查系統的內存資源使用情況。如果系統的內存資源不足,那麼 ClickHouse 可能會出現內存佔用過高的情況。可以使用命令 free -m 查看系統的內存使用情況。
  • 檢查 ClickHouse 的日誌。ClickHouse 的日誌中可能包含錯誤信息或警告信息,可以幫助找出問題所在。
  • 升級 ClickHouse 版本。如果是 ClickHouse 版本的問題,可以考慮升級到更穩定的版本。
  • 減少查詢語句的數據量和計算量。如果查詢語句的數據量和計算量過大,那麼 ClickHouse 可能會佔用大量的內存資源。可以考慮優化查詢語句,減少數據量和計算量。

(3)Disk 佔用過高

  • 使用系統工具查看磁盤佔用情況。可以使用命令 df -h 來查看系統的磁盤使用情況,查看是否有磁盤空間不足的情況。
  • 檢查 ClickHouse 的配置。一些配置參數可能會導致 ClickHouse 佔用大量的磁盤資源。可以查看 ClickHouse 的配置文件,確認配置是否合理,是否需要調整。
  • 使用 ClickHouse 內置的查詢來查看磁盤佔用情況。可以使用以下查詢來查看 ClickHouse 的磁盤佔用情況:
SELECT database, table, sum(bytes) AS total_size FROM system.parts WHERE active GROUP BY database, table ORDER BY total_size DESC

這個查詢會列出 ClickHouse 的各個表的佔用磁盤空間情況,可以根據這個查詢來判斷磁盤佔用是否過高。

  • 檢查 ClickHouse 的日誌。ClickHouse 的日誌中可能包含錯誤信息或警告信息,可以幫助找出問題所在。
  • 清理不必要的數據。如果 ClickHouse 中存在不必要的數據,可以考慮進行清理,釋放磁盤空間。

03 如何使用阿里雲可觀測監控 Prometheus 版監控 ClickHouse 服務

(一)安裝

根據 ClickHouse 安裝方式:

  • 如果 ClickHouse 部署在 ACK 中,請參考 Prometheus for 容器服務;
  • 如果 ClickHouse 部署在 ECS 中,參考 Prometheus for ECS。

(1)安裝方式一:Prometheus for 容器服務

在 Prometheus for 容器服務實例中,ClickHouse 已經默認在集成中心中展示,用戶可以在 arms 控制檯-實例詳情頁-集成中心中找到入口,點擊 ClickHouse 圖標,可以看到常見的指標列表和大盤縮略圖。點擊+安裝可以接入 ClickHouse 監控,配置如下圖:

  • Exporter 名稱: 自定義 Exporter 名稱;
  • ClickHouse scrape 地址: ip+port,Exporter 能夠訪問的 Clickhouse 地址 ;
  • ClickHouse 用戶名: 登陸用戶名;
  • ClickHouse 密碼: 登陸密碼;
  • Metrics 採集間隔(秒): 默認 30s 採集一次, 一般不需要更改。

點擊確定後,clickhouse-exporter-填入的名稱的 Exporter 會被安裝到 arms-prom 命名空間下,並自動完成採集 job 的配置。

可以在實例詳情頁-集成中心-已安裝-ClikckHouse 中快速瀏覽相關的 Target/指標/大盤/告警/服務發現/ Exporter 等信息。

(2)安裝方式二:Prometheus for ECS

安裝 ClickHouse 相同 VPC 的Prometheus for ECS 實例,由於Prometheus for ECS實例中 ClickHouse 的主機節點監控來自於Node-Exportor,所以先安裝 Node-Exportor。用戶可以在 arms 控制檯-實例詳情頁-集成中心中找到入口,點擊Node-Exporter 圖標,點擊+安裝可以接入 Node-Exporter 監控,然後選擇對應 ECS 實例安裝即可。

用戶可以在 arms 控制檯-實例詳情頁-集成中心中找到入口,點擊 ClickHouse 圖標,點擊+安裝可以接入 ClickHouse 監控,配置與上述 Prometheus for 容器服務相同。

(3)指標未採集的排查方法

⚠️注意: 下面是 prometheus for 容器實例的排查方法,prometheus for ecs 實例請聯繫 prometheus 值班-美娜

ClickHouse-Exporter 本身的主要工作是指標映射,需要填入正確 ClickHouse 抓取 URL 及登陸用戶名、密碼。如果出現指標採集不到的問題,可以參考如下的排查思路。

1. 檢查 Prometheus Target 狀態,如果 Target 顯示爲 Unhealthy 狀態,請排查 clickhouse-exporter Pod 運行狀態;如果 Target 狀態正常,繼續下一步。

2. 若 Target 狀態正常,但抓取指標量很少且指標全爲 go_ 相關查看 clickhouse-exporter Pod 日誌,確認日誌中是否有報錯信息。

 

3. 查看 clickhouse-exporter Pod 日誌,確定 Exporter 抓取目標 URL 是否正常。

(二)查看大盤

如需要查看 ClickHouse 相關大盤,可以從實例詳情頁-集成中心-已安裝-ClikckHouse 中點選大盤,列出兩類大盤 arms-clickhouse-ecs 和 arms-clickhouse-k8s,根據環境選擇對應的大盤模板。以下是 arms-clickhouse-k8sVariables 參數說明:

  • datasource : 數據源,選擇對應的實例名稱;
  • job: 新建 clickhouse-exporter 對應 job 名稱,與 clickhouse-exporter 名稱一致,用於展示 ClickHouseServer 指標、MergeTree 指標、消息隊列指標;
  • namespace: Clickhouse Pod 所在的命名空間,用於主機節點指標篩選;
  • pod: 可根據需要選擇對應的 Clickhouse Pod,用於主機節點指標篩選。

以下是 arms-clickhouse-ecsVariables 參數說明:

  • datasource: 數據源,選擇對應的實例名稱;
  • job: 新建的 Clickhouse-exporter 對應 job 名稱,與 Clickhouse-exporter 名稱一致,用於展示 ClickHouseServer 指標、MergeTree 指標、消息隊列指標;
  • instance: ecs 實例 IP,用於主機節點篩選。

(三)配置告警

在集成中心安裝 ClickHouse 監控時,已經默認增加了 arms-clickhouse 告警分組的相關規則,但未啓用,您只需要簡單修改參數並確認啓用即可。可以從實例詳情頁-集成中心-已安裝-ClikckHouse 中選擇告警-創建告警規則進入規則新增頁面,在其中告警分組選擇 arms-clickhouse 告警分組並根據環境選擇您需要啓用的告警指標,確認參數閾值並保存,即可完成告警規則的創建。

04 自建 Prometheus 與阿里雲可觀測監控 Prometheus 版監控 ClickHouse 優劣對比

Prometheus 作爲目前最主流的可觀測開源項目之一,已經被衆多企業所廣泛應用。然而在監控開源雲產品方面,還是會遇到不少的困難與挑戰:

  • 每套完整的自建觀測系統都需要安裝並配置 Prometheus、Grafana、AlertManager 等組件,部署過程複雜、實施週期長,並且每次升級都需要對每個組件進行維護;
  • 開源分享的相關大盤不夠專業,更新速度慢,缺少開箱即用的豐富指標;
  • 由於安全、組織管理等因素,用戶業務通常部署在多個相互隔離的 VPC,需要在多個 VPC 內都重複、獨立部署 Prometheus,導致部署和運維成本高。

針對以上問題,阿里雲可觀測監控 Proemtheus 版進行了以下優化:

結束語

阿里雲可觀測監控 Prometheus 版與阿里雲容器服務無縫集成,提供了開源 ClickHouse 的指標採集、用戶大盤、告警規則等項目的一鍵集成,用戶免運維,開箱即用,目前 ClickHouse 指標採集功能仍在不斷演進中,歡迎大家試用和提出改進意見。

相關鏈接:

[1] 開源 exporter

https://github.com/ClickHouse/clickhouse_exporter

[2] 開源 Grafana ClickHouse 大盤

https://grafana.com/grafana/dashboards/882-clickhouse/

作者:榑桑

點擊立即免費試用雲產品 開啓雲上實踐之旅!

原文鏈接

本文爲阿里雲原創內容,未經允許不得轉載。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章