作者:元格
本篇内容主要包括四部分:Cassandra 概覽介紹、常見關鍵名額解讀、常見告警規則解讀、如何通過 Prometheus 建立相應監控體系。
Cassandra 簡介
Cassandra 是什麼?Apache Cassandra 是一個開源、分布式、去中心化、彈性可伸縮、高可用、容錯、可調一緻性、面向行的資料庫。它的分布式設計基于 Amazon Dynamo,資料模型基于 Google BigTable。Cassandra 由 Facebook 建立,目前在 Facebook、Twitter、Apple、360 等各大 IT 企業成熟落地使用。
Cassandra 特點
- 大規模可擴充存儲
Cassandra 可擴充到數百 TB,以出色的性能運作在商用叢集上。
- 易于管理
Cassandra 群集易于大規模管理,并且可以随需求的變化動态擴容。
- 高可用性
Cassandra 設計為“持續線上”并已支援零停機時間更新等功能,應用于生産環境已有十多年的曆史。
- 寫密集型應用
Cassandra 特别适合寫密集型應用的時序型資料,如時間序列流資料、傳感器日志資料和物聯網應用程式等。
- 統計和分析
Cassandra 支援與 Spark 等大資料計算架構內建,使用者可以利用 Spark 強大的記憶體分析功能進行大資料統計和分析。
- 異地多活
Cassandra 支援異地多資料中心,資料可以跨多個雲和資料中心進行複制備份。
典型适用場景
Cassandra 是一個非常靈活的分布式 NoSQL 資料庫系統,适用于許多不同的場景。以下是 Cassandra 的适用場景的較長的描述:
1.大資料量、高寫入頻率的應用場景
Cassandra 的設計目标之一就是處理大規模資料集和高寫入頻率的應用場景,例如社交媒體、物聯網、實時資料分析等。Cassandra 能夠輕松地水準擴充,使得其能夠處理數百億行資料的工作負載,并支援快速的寫入和讀取操作。
2.高可用性和容錯性的應用場景
Cassandra 具有自動分區、複制和故障轉移功能,是以非常适合需要高可用性和容錯性的應用場景,例如金融交易、線上遊戲等。Cassandra 的分布式體系結構確定了即使在節點故障的情況下,系統也能夠繼續運作,并保持一緻性。
3.跨資料中心和地理位置的資料複制和同步的應用場景
Cassandra 支援多資料中心複制,是以能夠輕松地在不同的資料中心之間進行資料同步和資料備份。這使得 Cassandra 非常适合需要全球擴充的應用場景,例如線上廣告、電子商務等。
4.需要支援分布式事務的應用場景
Cassandra 通過支援輕量級事務來保證資料的一緻性。這些事務能夠跨多個節點和多個資料中心,并且能夠在高吞吐量和低延遲的情況下執行。Cassandra 還支援分布式計數器,這使得它非常适合需要支援分布式事務的應用場景,例如金融交易。
5.需要靈活的資料模型,能夠支援多種查詢方式的應用場景
Cassandra 的靈活的資料模型和支援多種查詢方式的能力,使得它非常适合需要存儲和查詢靈活資料模型的應用場景,例如存儲時序資料、跟蹤訂單狀态等。Cassandra 還支援多種資料結構,例如集合、映射、清單等,這使得它非常适合存儲半結構化和非結構化資料。
雖然 Cassandra 非常适合許多應用場景,但也有一些情況下它可能不适合使用。以下是一些 Cassandra 不适合使用的場景:
- 對于小規模資料集和低寫入頻率的應用場景,Cassandra 可能會顯得過于複雜和備援。在這種情況下,使用傳統的關系型資料庫可能更加合适。
- 對于需要複雜資料模型和複雜查詢的應用場景,Cassandra 可能會限制查詢能力和靈活性,因為它不支援複雜的聯接操作和事務。在這種情況下,使用傳統的關系型資料庫或其他 NoSQL 資料庫可能更加合适。
- 對于需要嚴格的資料一緻性和隔離級别的應用場景,Cassandra 的輕量級事務可能無法滿足要求。在這種情況下,使用傳統的關系型資料庫可能更加合适。
- 對于需要進行複雜分析和聚合的應用場景,Cassandra 可能不是最佳選擇,因為它不支援複雜的分析查詢和聚合操作。在這種情況下,使用專門的分析資料庫可能更加合适。
總之,Cassandra 适合處理大規模資料集和高寫入頻率的應用場景,但對于小規模資料集和複雜查詢、分析等場景可能不适合。是以,在選擇資料庫時,需要根據具體的應用需求進行綜合考慮。
Cassandra 核心概念
1.Cassandra 節點(Cassandra Node)
Cassandra 節點是 Cassandra 叢集中的一個執行個體,它負責存儲一部分資料,處理讀寫請求,并與其他節點進行通信。Cassandra 節點之間通過 Gossip 協定進行通信,以維護節點狀态和拓撲。
2.Memtable(Memory Table)
Memtable 是一種類似于 SkipList 的記憶體結構,用于提高寫入性能。Memtable 是 Cassandra 在寫入過程中使用的臨時資料結構,用于儲存待寫入到磁盤中的資料。當 Memtable 已滿時,Cassandra 會将其中的資料寫入到磁盤中,并在記憶體中繼續寫入新資料。
3.Key Caches
Cassandra 在讀取資料時使用的緩存,用于加速讀取操作。Key Cache 存儲在每個節點的記憶體中,緩存最近使用的資料項,以便快速查找和通路資料。Cassandra 使用哈希表來存儲 key/value 資料,根據 LRU(Least Recently Used)算法來管理 Key Cache 中的資料項。當 Key Cache 已滿時,Cassandra 會将最近最少使用的資料項從 Key Cache 中移除以釋放空間。
4.Row Caches
Row Cache 是一種記憶體緩存,用于存儲 Cassandra 中的行級資料。Row Cache 是 Cassandra 在讀取資料時使用的緩存,用于加速讀取操作。Row Cache 存儲在每個節點的記憶體中,緩存最近使用的行級資料,以便快速查找和通路資料。與 Key Cache 和 Memtable 不同,Row Cache 緩存的是完整的行級資料,而不是其中的 key/value 資料。
5.Commit Logs
Commit Logs 機制實際上就是 Cassandra 中實作 WAL(Write Ahead Log)機制的方式之一,用于在寫入資料時保證資料的持久性和一緻性。當 Cassandra 收到寫入請求時,它首先将資料寫入到記憶體中的 Memtable 中,并将資料追加到 Commit Logs 中。這樣可以保證在系統出現故障時,資料可以從 Commit Logs 中恢複到最後一次送出的狀态。
6.SSTable(Sorted String Table)
SSTable 是 Cassandra 中存儲資料的實體格式。每個 SSTable 是一個已排序的字元串表,包含多個資料分區的資料,并根據分區鍵和列名進行排序。Cassandra 使用多個 SSTable 來存儲資料,并使用 BloomFilter 和索引來快速定位資料。
7.Hints
Hints 是 Cassandra 中一種機制,用于在節點故障時保證資料的一緻性和可靠性。當節點無法響應寫入請求時,Cassandra 會将這些請求儲存在 Hints 中,并在節點恢複後重新嘗試處理這些請求。Hints 機制可以提高系統的可靠性,但可能會對性能産生影響。
8.Tombstone
在 Cassandra 中,删除操作實際上是一種“寫入”操作,Cassandra 會将要删除的資料标記為Tombstone。Tombstone 是一種特殊的資料類型,它包含了要删除資料的資訊(如表名、鍵名、時間戳等),并在磁盤上占據一定的空間。當讀取資料時,Cassandra 會檢查 Tombstone,如果資料被标記為 Tombstone,則視為已删除,不會傳回給用戶端。
9.Bloom filter
在 Cassandra 中,Bloom Filter 主要用于查詢 Memtable 和 SSTable中的資料是否存在,是 Cassandra 中的一種用于快速查詢資料存在性的機制,用于在讀取操作時加速查找資料。當 Cassandra 需要查詢資料時,它會首先查找 Bloom Filter,如果資料不存在于 Bloom Filter中,則可以直接跳過讀取操作,因為資料一定不存在于 Memtable 和 SSTable 中。如果資料可能存在于 SSTable 中,則繼續讀取 SSTable 中的資料進行驗證。
監控關鍵名額
這裡以阿裡雲的 Cassandra 元件為例,介紹監控 Cassandra 服務中常見的關鍵名額。
基礎資訊
1.CPU / 記憶體 / 硬碟使用率
Cassandra 作為一個高吞吐量、低延遲的分布式資料庫,需要充分利用節點的硬體資源來提供高性能的資料存儲和查詢服務,如果節點的資源使用超過了預期或者達到了極限,可能會導緻性能下降或者系統崩潰,影響業務的正常運作。是以我們首先需要關注節點實時的 CPU / 記憶體 / 硬碟使用率,以確定 Cassandra 服務運作的穩定性。
2.用戶端連接配接數
連接配接到目前 Cassandra 服務端的用戶端連接配接數量也是需要監控的名額之一。用戶端連接配接數表示目前正在與 Cassandra 叢集進行通信的用戶端數量,如果連接配接數過高可能會導緻叢集出現資源不足的情況,進而影響系統的性能和可用性。特别是在高并發情況下,用戶端連接配接數的監控和優化顯得尤為重要。如果連接配接數過高,可以通過優化節點配置、增加節點數量等手段來緩解壓力,進而保證系統的高可用和高性能。
3.Cassandra 資料量
Cassandra 作為一個資料庫,其資料量也是需要緊密關注的監控資料之一。Cassandra 支援海量資料的存儲和查詢,是以在實際應用中,其資料量通常會不斷增長。如果資料量過大,可能會導緻節點出現資源不足、查詢性能下降等問題,進而影響業務的正常運作。是以,對 Cassandra 叢集的資料量進行監控和優化,可以幫助我們更好地管理和維護 Cassandra 叢集。監控資料量可以通過監測磁盤使用情況、分布式存儲的資料分布情況等名額來實作。如果資料量過大,可以考慮增加節點數量、更新硬體配置、進行資料遷移等措施來緩解壓力,進而提高系統的可用性和性能。
4.用戶端讀寫分布比例
最後,我們推薦監控的一個名額是用戶端的讀寫分布比例,Cassandra 是一個支援高吞吐量、低延遲的分布式資料庫,通常用于存儲大量的讀寫資料。如果讀寫分布比例不均衡,可能會導緻叢集出現瓶頸,進而影響系統的性能和可用性。通過監控用戶端的讀寫分布比例,我們可以及時發現問題,采取措施來優化叢集的讀寫性能。例如,可以通過增加節點數量、調整分區政策、優化查詢語句等手段來實作優化。
讀寫延遲和吞吐量
Cassandra 作為資料庫服務,其讀寫延遲和吞吐量是我們必須要關注的名額之一。Cassandra 以其高吞吐量、低延遲的特點著稱,是以在實際應用中,讀寫延遲和吞吐量是衡量 Cassandra 叢集性能的重要名額。
1.讀寫延遲
讀寫延遲是 Cassandra 叢集性能的重要名額,如果讀寫延遲較高,則可能會導緻系統響應時間長、節點之間資料同步慢影響資料一緻性、節點出現高負載、系統出現瓶頸等問題。是以,保持讀寫延遲的合理水準是確定 Cassandra 叢集高可用和高性能的重要因素之一。如果發現讀寫延遲較高,運維人員可以通過關注其他監控資料來排查問題。讀寫延遲的增加可能是由多種因素導緻的,例如緩存/布隆過濾器/硬碟占用等。是以,針對不同的問題,可以采取不同的排查和優化措施來提高叢集的性能和可用性。
2.吞吐量
讀寫吞吐量是反映目前 Cassandra 叢集每秒處理的讀寫請求次數的名額,如果吞吐量過高導緻節點出現高負載,可能會影響系統的穩定性和可用性。高負載可能會導緻節點出現瓶頸,進而影響系統的響應時間和可用性。是以,如果吞吐量過高,運維人員需要引起警惕,并采取有效的措施來緩解負載壓力,例如增加節點數量、修改路由政策等。
如果叢集性能較強,可以适當提高吞吐量的監控門檻值,以反映叢集的實際性能水準。這樣可以更好地反映 Cassandra 叢集的性能和可用性,進而更好地支援業務需求。但需要注意的是,吞吐量的門檻值不能過于樂觀,需要綜合考慮叢集的硬體性能、業務需求和系統特點等多個因素,以確定叢集的高可用和高性能。
緩存和布隆過濾器
緩存和布隆過濾器能夠直接顯著影響 Cassandra 資料庫的性能。緩存可以提高查詢的性能和效率,減少對磁盤的讀取次數,進而提高系統的響應速度和吞吐量。如果緩存命中率高,可以顯著提高 Cassandra 叢集的性能和可用性。布隆過濾器可以降低資料庫的查詢負載,通過減少不必要的查詢請求,提高叢集的吞吐量和性能。如果布隆過濾器的誤判率低,可以減少查詢的操作次數,進而提高叢集的性能和可用性。
我們推薦監控 Cassandra 服務中 key cache 命中率以及 Bloom filter 誤判率這兩項名額。
1. Key cache 命中率
Key cache 是 Cassandra 中的一種緩存機制,用于存儲最常用的資料塊和索引資料。當應用程式請求資料時,Cassandra 首先會查找 Key cache,如果資料塊或索引資料已經存在于 Key cache 中,則可以直接傳回結果,避免了對磁盤的通路。是以,Key cache 的命中率直接反映 Cassandra 叢集的性能和效率。如果 Key cache 命中率較低,可能會導緻 Cassandra 叢集響應時間變長,影響系統的性能和可用性。
2. Bloom filter 誤判率
Bloom filter 是 Cassandra 中用于快速查詢資料是否存在的一種資料結構。Bloom filter 雖能快速判斷資料是否存在,但會存在誤判的情況。Bloom filter 的誤判率反映了 Cassandra 叢集查詢資料的準确性和效率。如果 Bloom filter 誤判率較高,可能會導緻 Cassandra 叢集查詢效率下降,進而影響系統的性能和可用性。
異常和錯誤
異常和錯誤是 Cassandra 服務中需要監控的核心名額之一,反映了系統的異常情況,例如節點當機、資料丢失、網絡故障等問題。當異常和錯誤名額非0時,通常意味着系統出現了問題,需要及時排查和解決。例如,如果節點當機,可能需要重新啟動或替換節點,以恢複叢集的正常運作。如果資料丢失,可能需要采取資料恢複措施,以確定資料的完整性和可靠性。
在某些情況下,異常和錯誤名額可能會出現誤報或誤判的情況。例如,某些異常和錯誤可能隻是暫時的,可以自動恢複,不需要進行手動幹預。是以,在分析異常和錯誤名額時,也需要結合其他名額,例如讀寫延遲、吞吐量、CPU 和記憶體使用率等名額,來判斷和排查問題。
我們推薦監控異常請求,錯誤請求、dropped message 三項名額。
1. 異常請求:異常請求指 Cassandra 叢集在處理讀寫請求時出現異常的情況,例如請求逾時、請求被拒絕等等。異常請求的出現通常意味着 Cassandra 叢集出現了問題,需要及時排查和解決。是以,監控異常請求是確定 Cassandra 叢集高可用和高性能的關鍵名額之一。
2. 錯誤請求:錯誤請求指 Cassandra 叢集在處理讀寫請求時出現錯誤的情況,例如請求的資料不存在、資料類型不比對等等。錯誤請求的出現可能會影響 Cassandra 叢集的查詢效率和準确性,進而影響系統的性能和可用性。是以,監控錯誤請求也是 Cassandra 叢集監控的重要名額之一。
3. Dropped message:Dropped message 指在 Cassandra 叢集間節點之間進行通信時出現丢失消息的情況。Dropped message 的出現通常意味着 Cassandra 叢集間通信出現異常,可能會影響叢集的可用性和性能。是以,監控 Dropped message 也是 Cassandra 叢集監控的重要名額之一。
硬體資源占用
在 Cassandra 監控中,監控 CPU、記憶體、硬碟和網絡的使用情況是比較重要的名額。在這個子產品,我們可以深入挖掘這些名額的監控資料,以更好地了解 Cassandra 叢集的性能和可用性。
1. CPU 使用率:CPU 是 Cassandra 叢集的計算資源,CPU 使用率反映了叢集的計算負載情況。高 CPU 使用率可能會導緻叢集響應變慢,影響系統的性能和可用性。是以,監控 CPU 使用率是確定 Cassandra 叢集高性能和高可用的重要名額之一。
2. 記憶體使用率:記憶體是 Cassandra 叢集的重要資源,記憶體使用率反映了叢集的記憶體負載情況。高記憶體使用率可能會導緻叢集出現高負載,影響系統的性能和可用性。是以,監控記憶體使用率也是 Cassandra 叢集監控的重要名額之一。
3. 硬碟使用率:硬碟是 Cassandra 叢集的存儲資源,硬碟使用率反映了叢集存儲的負載情況。高硬碟使用率可能會導緻叢集存儲壓力過大,影響系統性能和可用性。是以,監控硬碟使用率也是 Cassandra 叢集監控的重要名額之一。
4. 網絡使用率:網絡是 Cassandra 叢集的通信資源,網絡使用率反映了叢集節點之間通信的負載情況。高網絡使用率可能會導緻叢集通信異常,影響系統的性能和可用性。是以,監控網絡使用率也是 Cassandra 叢集監控的重要名額之一。
存儲占用
Memtable、SSTable 和 Commit Log 是 Cassandra 服務中存儲資料的三部分,各自承擔着不同的作用,在Cassandra 讀寫操作中起到了重要作用,我們推薦對這三部分資料的存儲占用情況進行監控。
1. Memtable 存儲占用:對 Memtable 存儲占用情況進行監控,可以及時發現叢集中寫入性能和效率的問題。如果Memtable 存儲占用過大,可能會導緻寫入性能下降,影響系統的性能和可用性。是以,監控 Memtable 存儲占用情況能夠幫助運維人員及時采取措施,優化叢集的寫入性能和效率。
2. SSTable 存儲占用:對 SSTable 存儲占用情況進行監控,可以及時發現叢集中存儲容量不足的問題。如果 SSTable 存儲占用過大,可能會導緻存儲容量不足,進而影響系統的性能和可用性。是以,監控 SSTable 存儲占用情況能夠幫助運維人員及時采取措施,增加叢集的存儲容量,確定叢集的高可用性和高性能。
3. Commit Log 存儲占用:對 Commit Log 存儲占用情況進行監控,能夠及時發現叢集中故障恢複問題。如果 Commit Log 存儲占用過大,可能會導緻故障恢複時間變長,影響系統的可靠性和穩定性。是以,監控 Commit Log存儲占用情況能夠幫助運維人員及時采取措施,優化叢集的故障恢複能力,確定叢集的高可靠性和高可用性。
線程池狀态
我們推薦對 Cassandra 的線程池進行監控,分别統計 active task、blocked task 和 pending task 數量進行實時監控。
1. Active task:Active task 指正在執行中的任務數量。如果 Active task 數量過高,可能會導緻線程池過載,影響系統的性能和可用性。
2. Blocked task:Blocked task 指正在等待擷取鎖的任務數量。如果 Blocked task 數量過高,可能會導緻線程池阻塞,影響系統的性能和可用性。
3. Pending task:Pending task 指正在等待執行的任務數量。如果 Pending task 數量過高,可能會導緻任務積壓,影響系統的性能和可用性。
通過監控這三項名額,可以及時發現線程池中的性能問題,進而采取相應的措施,優化線程池的性能和效率。同時,監控線程池也可以幫助運維人員及時發現線程池過載、阻塞和任務積壓等問題,進而確定 Cassandra 叢集的高可用和高性能。
JVM 監控
Cassandra 作為一個基于 Java 編寫的應用,在監控中也需要監控 JVM 相關的三項名額,分别是 JVM 應用吞吐率、JVM 垃圾回收時間和 JVM 記憶體使用情況。這些名額對于保障 Cassandra 的高可用和高性能非常重要。
1. JVM 應用吞吐率:JVM 的應用吞吐率是指 JVM 在機關時間内完成的任務數量,也就是吞吐量。高吞吐率表示 JVM 性能較好,反之則表JVM 性能較差。是以,監控 JVM 應用吞吐率可以在J VM 性能下降時及時發現問題,進而采取措施進行優化。
2. JVM 垃圾回收時間:JVM 垃圾回收時間是指 JVM 在進行垃圾回收時所需要的時間,高垃圾回收時間會導緻JVM 性能下降。是以,監控 JVM 垃圾回收時間可以幫助運維人員及時發現垃圾回收過程中的性能問題,進而優化 JVM 性能。
3. JVM 記憶體使用情況:JVM 的記憶體使用情況是指 JVM 在運作過程中所占用的記憶體大小。如果 JVM 記憶體使用過高,可能會導緻記憶體溢出,影響系統的性能和可用性。是以,監控JVM的記憶體使用情況能夠幫助運維人員及時發現記憶體問題,進而采取措施進行優化。
關鍵告警規則
在對 Cassandra 進行告警規則配置時,我們推薦基于以上采集得到的名額,從以下幾個方面進行告警規則的配置,分别是叢集健康狀态、資源使用情況、讀寫延遲和吞吐量、異常和錯誤及 JVM,以下是一些推薦的告警規則。
叢集健康狀态
我們推薦對叢集中 Cassandra 當機節點的比例進行監控,并根據需要靈活設定門檻值。
在設定門檻值時,需要考慮到 Cassandra 叢集的規模、硬體配置、資料負載以及業務需求等因素。一般來說,如果叢集中有多個節點,建議将當機節點的比例控制在 5% 以下,如果叢集規模較小,則可以設定更嚴格的門檻值。但是,需要注意的是,過于嚴格的門檻值可能會導緻誤報,過于寬松的門檻值則可能會導緻漏報。是以,在設定門檻值時,需要根據實際情況進行調整和優化。
資源使用情況
在資源使用情況中,我們推薦對 Cassandra 叢集中各個節點的 CPU、記憶體以及硬碟使用率配置告警規則:
1. CPU使用率:建議設定 CPU 使用率的告警門檻值,當節點的 CPU 使用率超過門檻值時,可以發出告警通知相關人員及時處理,以防止 Cassandra 叢集進入不穩定狀态甚至出現當機等問題,以保障 Cassandra 叢集的高可用和高性能。
2. 記憶體使用率:建議設定記憶體使用率的告警門檻值,當節點的記憶體使用率超過門檻值時,可以發出告警通知相關人員及時處理,防止因記憶體不足導緻系統崩潰。
3. 硬碟使用率:建議設定硬碟使用率的告警門檻值,當節點的硬碟使用率超過門檻值時,可以發出告警通知相關人員及時處理,防止因磁盤空間不足導緻資料丢失等問題。
讀寫延遲和吞吐量
Cassandra 作為一個資料庫服務,其讀寫延遲和吞吐量是極為重要的性能名額,是以都需要配置告警規則。
1. 讀寫延遲:建議當讀寫延遲超過一定門檻值時觸發告警規則。在 Cassandra 叢集中,讀寫延遲是一個非常重要的性能名額,當讀寫延遲超過一定門檻值時,往往會導緻應用程式響應變慢,甚至造成資料丢失,是以需要對其進行監控和告警。在設定讀寫延遲的告警規則時,需要根據實際情況進行調整和優化。一般來說,可以設定較短的門檻值,例如1秒或更短的時間。當讀寫延遲超過設定的門檻值時,就會觸發告警,通知相關人員及時處理問題。此外,也可以根據業務需求和資料負載進行調整,以便盡可能地滿足應用程式的需求。
2. 吞吐量:吞吐量反映了 Cassandra 服務目前機關時間内處理的請求數量,過高的吞吐量可能會導緻系統進入不穩定狀态,甚至出現當機的情況。當 Cassandra 叢集的吞吐量過高時,會導緻系統資源的緊張,例如 CPU、記憶體和磁盤等資源可能會達到瓶頸,進而影響系統的穩定性和可用性。此外,過高的吞吐量還可能會導緻資料的一緻性問題,例如因寫入沖突而産生的資料丢失等問題。是以,我們建議對 Cassandra 叢集的吞吐量設定相應的告警規則,以便及時發現和處理過高的吞吐量問題。在設定告警規則時,需要根據實際情況進行調整和優化,例如根據業務需求和資料負載進行調整,以盡可能地滿足應用程式的需求。
異常和錯誤
當 Cassandra 服務中出現異常和錯誤時,需要引起警惕。Cassandra 是一個分布式的資料庫系統,異常和錯誤可能會對資料的一緻性和可用性造成很大影響,是以需要對其進行監控和處理。
我們推薦對逾時請求、失敗請求以及 Dropped Message 三種異常和錯誤情況配置告警規則。這些異常和錯誤可能會影響 Cassandra 叢集的可用性和性能,是以需要對其進行監控和處理。
1. 逾時請求:當 Cassandra 服務無法在指定的時間内響應請求時,就會出現逾時請求的情況。逾時請求可能會導緻用戶端無法擷取所需的資料,影響系統的可用性和性能。是以,我們建議對逾時請求進行監控,并設定相應的告警規則,以便及時發現和處理問題。
2. 失敗請求:當 Cassandra 服務無法成功完成請求時,就會出現失敗請求的情況。失敗請求可能會導緻資料的不一緻性,影響系統的可用性和性能。是以,我們建議對失敗請求進行監控,并設定相應的告警規則,以便及時發現和處理問題。
3. Dropped Message:Cassandra 叢集中的消息可能會丢失,例如由于網絡問題或節點故障等原因。這些丢失的消息可能會導緻資料的不一緻性,影響系統的可用性和性能。是以,我們建議對 Dropped Message 進行監控,并設定相應的告警規則,以便及時發現和處理問題。
JVM 相關
我們推薦對 Cassandra 服務中 GC 的時間占比配置告警規則。頻繁的 GC 操作可能會對應用程式的性能産生很大影響,是以需要對其進行監控和處理。
在 Cassandra中,GC(Garbage Collection)是一項重要的操作,用于回收無用的記憶體。當 GC 操作頻繁出現時,可能會占用大量的 CPU 時間,影響系統的性能和可用性。是以,我們建議對 Cassandra 服務中 GC 的時間占比進行監控,并設定相應的告警規則,以便及時發現和處理問題。
在設定告警規則時,需要根據實際情況進行調整和優化。一般來說,可以設定較短的 GC 時間占比門檻值,例如10%或更短的時間。當 GC 時間占比超過設定的門檻值時,就會觸發告警,通知相關人員及時處理問題。
監控體系搭建
自建 Prometheus 監控
目前廣泛采用的 Cassandra 監控方案主要是基于 JMX 的監控方案。使用者可以選擇自行編寫或者從開源社群選擇合适的 Agent,然後在 Cassandra 服務啟動時挂載對應的 Agent,實作對 Cassandra 叢集的監控。
在挂載了對應的 agent 之後,使用者需要在自建的 Prometheus 中注冊服務,然後基于 Grafana 等工具定制 Cassandra監控大盤。
上在自建 Cassandra 監控方案中,可能會遇到一些問題和挑戰。以下是一些可能會出現的問題和挑戰:
1. 社群的 Agent 品質良莠不齊:在開源社群中,有很多 Cassandra 監控 Agent 可供選擇。但這些 Agent 品質和性能可能不盡相同。有些 Agent 可能存在 Bug 或性能問題,可能會影響 Cassandra 叢集的性能和可用性。
2. 名額缺乏解釋:在監控 Cassandra 時,需要監控很多名額。但是,這些名額的含義和解釋可能并不清晰,需要運維人員對其進行解釋和了解。如果缺乏名額的解釋,可能會導緻運維人員對 Cassandra 叢集的狀态和性能了解不全面,無法及時發現問題。
3. 自建的大盤不夠專業:在自建 Cassandra 監控大盤時,需要對資料進行處理和可視化。但是,如果缺乏專業的技術和工具,可能會導緻自建的大盤不夠專業,無法滿足運維人員的需求。
為了避免這些問題和挑戰,我們推薦使用阿裡雲可觀測監控 Prometheus 版去監控 Cassandra 資料庫,真正做到開箱即用,一鍵內建。
可觀測監控 Prometheus 版
目前僅 Prometheus 執行個體 for ECS 類型執行個體支援該元件接入,使用者需要将 VPC 執行個體接入可觀測監控 Prometheus 版。具體操作,請參見 Prometheus執行個體 for ECS。
Prometheus執行個體 for ECS:
登入 Prometheus 控制台。在頁面左上角選擇目标地域,選擇 VPC 的 Prometheus 監控執行個體,在內建中心點選 Cassandra 元件的安裝。
根據提示完成元件的安裝步驟,在安裝過程中需要使用者自行下載下傳和部署 JMX Agent(已提供 Agent 的下載下傳連結)。
阿裡雲提供的 Cassandra 監控中采集了大量的名額,使用者點選 Cassandra 卡片之後可以檢視。
此外,提供了專業的大盤和内置的告警規則,來達到開箱即用的目的。
參考連結:
[1]
[2]
[3]
[4]
[5]
[6]
[7]
點選此處,了解更多産品詳情