Zookeeper 介紹
ZooKeeper 是一個開源的分佈式協調服務,用於管理和協調分佈式系統中的節點。它提供了一種高效、可靠的方式來解決分佈式系統中的常見問題,如數據同步、配置管理、命名服務和集羣管理等。本文介紹通過 DataKit 採集 Zookeeper 指標,幫助監控 Zookeeper 運行情況。
主要功能:
- 配置管理:集中管理分佈式系統的配置信息,便於動態更新和同步。
- 命名服務:為分佈式系統中的節點提供統一的命名和查找機制,類似於 DNS。
- 分佈式鎖:通過鎖機制解決分佈式系統中的資源競爭問題。
- 隊列管理:實現分佈式隊列,支持順序隊列和優先隊列。
- 集羣管理:監控集羣成員的健康狀態,實現故障檢測和自動恢復。
Zookeeper 可觀測的必要性:
- 保障系統穩定性:ZooKeeper 是分佈式系統的核心組件,負責協調多個節點的行為,確保數據一致性和服務可用性。監控 ZooKeeper 的健康狀態可以及時發現潛在問題,如節點故障、網絡異常或性能瓶頸,從而快速採取措施,避免系統整體故障。
- 優化系統性能:監控可以幫助開發者和運維人員瞭解 ZooKeeper 集羣的性能狀況,例如操作延遲、事務處理速度等。通過分析這些數據,可以優化配置,提升系統性能。
- 預防故障:監控系統可以提前預警潛在問題,例如磁盤 I/O 等資源瓶頸,從而在問題惡化之前進行干預,預防故障的發生。
- 支持故障排查:當 ZooKeeper 集羣出現問題時,監控數據可以提供關鍵線索,幫助快速定位問題根源。例如,通過分析日誌和性能指標,可以確定是網絡問題、配置錯誤還是硬件故障。
- 提升運維效率:運維人員可以直觀地查看 ZooKeeper 集羣的狀態,減少手動排查問題的時間,提高運維效率。
- 確保集羣一致性:ZooKeeper 的核心功能之一是保證分佈式系統中數據的一致性。監控可以確保集羣中的所有節點狀態一致,及時發現和修復不一致的情況。
- 支持動態調整:分佈式系統的環境和需求可能會動態變化,監控 ZooKeeper 可以幫助運維人員根據實時數據動態調整集羣配置,例如增加節點或優化資源分配。
觀測雲
觀測雲是一款功能強大的統一可觀測平台,提供對多雲環境、雲原生應用、中間件以及各類應用程序的實時監控和分析能力。在 ZooKeeper 的監控場景中,觀測雲通過其核心數據採集器 DataKit,結合 ZooKeeper 的監控指標,實現對 ZooKeeper 集羣的實時監控和數據可視化展示。觀測雲通過其強大的數據可視化功能,將 ZooKeeper 的監控指標以直觀的儀表盤形式展示出來,幫助用户快速定位問題並優化系統性能。
暴露 Zookeeper 指標
從 3.6.0 版本開始,ZooKeeper 原生支持 Prometheus 格式的指標暴露。只需在 zoo.cfg 配置文件中添加以下配置:
metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
metricsProvider.httpPort=7000
metricsProvider.exportJvmInfo=true
然後重啓 Zookeeper 服務。
執行完畢後,可通過 http://主機ip:7000/metrics 查看當前主機獲取到的所有監控數據。
採集器配置
進入 DataKit 安裝目錄下的 conf.d/prom 目錄,複製 prom.conf.sample 並命名為 zookeeper.conf。
[[inputs.prom]]
urls = ["http://192.168.0.19:7000/metrics"]
## 採 集 器 別 名
source = "zookeeper"
## 採 集 間 隔 "ns", "us" (or "µs"), "ms", "s", "m", "h"
interval = "10s"
measurement_name = "zookeeper"
metric_types = []
## TLS 配 置
tls_open = false
[inputs.prom.tags]
service = "zookeeper"
# ·················
[inputs.prom.as_logging]
enable = false
service = "service_name"
## Customize tags.
# [inputs.prom.tags]
# some_tag = "some_value"
# more_tag = "some_other_value"
## (Optional) Collect interval: (defaults to "30s").
# interval = "30s"
## (Optional) Timeout: (defaults to "30s").
# timeout = "30s"
主要修改 urls,配置好後保存,重啓 DataKit 即可。
關鍵指標
登錄觀測雲控制枱,點擊「指標」 -「指標管理」,輸入“zookeeper”,就能查詢採集到的指標。
ZooKeeper 是一個分佈式協調服務,用於管理分佈式系統中的配置信息、命名服務、分佈式同步等。以下是對 ZooKeeper 指標的解釋:
- 系統性能與延遲:通過 ZooKeeper 的四字命令(如 stat、srvr 等)可以獲取服務的運行狀態,包括是否處於領導者或追隨者角色、服務的延遲等
- 會話數:監控會話數可以幫助瞭解 ZooKeeper 的使用情況,及時發現異常的會話增長。
- 請求延遲:監控 ZooKeeper 的請求延遲可以幫助評估服務的響應性能。高延遲可能表明存在性能問題,需要進一步調查。
以下是關於 Zookeeper 關鍵指標的介紹:
| 指標 | 描述 | 單位 |
|---|---|---|
| avg_latency | 平均延遲 | ms |
| readlatency_count | 讀操作延遲的計數 | count |
| propagation_latency_count | 數據傳播延遲的計數 | count |
| commit_count | 提交操作的次數 | count |
| requests_in_session_queue_count | 會話隊列中的請求數量 | count |
| requests_not_forwarded_to_commit_processor | 未轉發到提交處理器的請求數量 | count |
| prep_processor_queue_size | 預處理隊列的大小 | Bytes |
| connection_request_count | 當前存活的連接數 | count |
| num_alive_connections | 用於緩存文件系統的內存量 | Bytes |
| session_queues_drained_count | 會話隊列被清空的次數 | count |
| auth_failed_count | 認證失敗的次數 | count |
| ensemble_auth_fail | 集羣認證失敗的次數 | count |
| bytes_received_count | 接收的字節數 | Bytes |
| open_file_descriptor_count | 當前打開的文件描述符數量 | count |
| process_open_fds | 進程打開的文件描述符數量 | count |
| uptime | 系統或進程的運行時間 | s |
| approximate_data_size | 近似數據大小 | Bytes |
| znode_count | 節點數量 | count |
| watch_count | 監控數量 | count |
場景視圖
登錄觀測雲控制枱,點擊「場景」 -「新建儀表板」,輸入 “Zookeeper”, 選擇 “ Zookeeper”,點擊 “確定” 即可添加視圖。
監控器(告警)
Zookeeper 服務器發送宕機異常
Zookeeper 平均響應延遲過高異常
Zookeeper 堆積請求數過大異常
總結
通過使用觀測雲平台對 ZooKeeper 進行統一監控,我們能夠實時追蹤關鍵性能指標,如會話連接數、節點讀寫操作次數、以及會話超時情況。這些指標對於優化 ZooKeeper 集羣性能、識別性能瓶頸、及時排查故障至關重要。它們幫助我們優化會話管理策略,確保集羣狀態一致性,進行有效的資源規劃,併為分佈式協調任務提供支持。這樣的監控不僅增強了用户體驗,也顯著提高了系統的可靠性和穩定性。