Redis是一個開源(BSD 許可)、記憶體儲存的資料結構伺服器,可用作資料庫,快取記憶體和訊息佇列代理。它支援字串、雜湊表、列表、集合、有序集合等資料型別。內建複製、Lua 指令碼、LRU收回、事務以及不同級別磁碟持久化功能,同時通過 Redis Sentinel 提供高可用,通過Redis Cluster提供自動分割區。
Redis本身提供的INFO命令會返回豐富的範例執行監控資訊,這個命令是Redis監控工具的基礎。總體INFO命令的返回資訊分成以下5大類。
INFO命令在使用時,可以帶一個引數section,這個引數的取值有好幾種,相應的,INFO 命令也會返回不同型別的監控資訊。如下圖所示:
在監控Redis 執行狀態時,INFO命令返回的結果非常有用。如果你想了解 INFO 命令的所有引數返回結果的詳細含義。可以根據Redis中文官方檔案-Info質量以及Redis官方檔案進行介紹說明。這裡,我給你提幾個運維時需要重點關注的引數以及它們的重要返回結果。
無論你是執行單範例或是叢集,我建議你重點關注一下stat 、commandstat 、cpu 和 memory 這四個引數的返回結果,這裡麵包含了命令的執行情況(比如命令的執行次數和執行時間、命令使用的 CPU資源),記憶體資源的使用情況(比如記憶體已使用量、記憶體碎片率),CPU 資源使用情況等,這可以幫助我們判斷範例的執行狀態和資源消耗情況。
當執行info stats
指令的時候所出現的效果:
分析的大多數結果
total_connections_received:1083173900
total_commands_processed:8313824390
instantaneous_ops_per_sec:271
total_net_input_bytes:1356487222784
total_net_output2bytes:2360788536838
instantaneous_input_kbps:13.49
instantaneous_output_kbps:1.84
rejected_connections: 0
當你啟用RDB或AOF功能時,你就需要重點關注下 persistence 引數的返回結果,你可以通過它檢視到 RDB 或者 AOF 的執行情況。總體介紹一下持久化相關的監控資訊,如下圖所示:
檔案狀態監控相關的引數
主要標識已連線使用者端的資訊,它包含以下域:
connected_clients:406
client_recent_max_input_buffer:4
client_recent_max_output_buffer:0
blocked_clients:40
針對於使用者端的相關的結果資訊介紹說明:
主要用於統計相關的命令指令的執行速度以及相關的指令執行頻率。
部分記錄了各種不同型別的命令的執行統計資訊,比如命令執行的次數、命令耗費的 CPU 時間、執行每個命令耗費的平均 CPU 時間等等。對於每種型別的命令,這個部分都會新增一行以下格式的資訊:
cmdstat_multi:calls=2792,usec=188,usec_per_call=0.07
cpu 部分記錄了 CPU 的計算量統計資訊,它包含以下域:
user_cpu_sys是Redis主程序消耗,user_cpu_sys_children是後臺程序消耗(後臺包括RDB檔案的消耗,master,slave同步產生的消耗等等)
發現這4個CPU指標是一個統計指標,比如used_cpu_sys是將所有Redis主程序在核心態所佔用的CPU時間求和累計起來,所以它會隨著Redis啟動的時間長度不斷累計上升,並在你重啟Redis服務後清0。
memory 部分記錄了伺服器的記憶體資訊,它包含以下域
在理想情況下, used_memory_rss 的值應該只比 used_memory 稍微高一點兒。
當 rss > used ,且兩者的值相差較大時,表示存在(內部或外部的)記憶體碎片。
記憶體碎片的比率可以通過 mem_fragmentation_ratio 的值看出。
當 used > rss 時,表示Redis的部分記憶體被作業系統換出到交換空間了,在這種情況下,操作可能會產生明顯的延遲。
當 Redis 釋放記憶體時,分配器可能會,也可能不會,將記憶體返還給作業系統。如果 Redis 釋放了記憶體,卻沒有將記憶體返還給作業系統,那麼 used_memory 的值可能和作業系統顯示的 Redis 記憶體佔用並不一致。
如果你在使用主從叢集,就要重點關注下 replication 引數的返回結果,這裡麵包含了主從同步的實時狀態。
role : 如果當前伺服器沒有在複製任何其他伺服器,那麼這個域的值就是 master ;否則的話,這個域的值就是 slave 。注意,在建立複製鏈的時候,一個從伺服器也可能是另一個伺服器的主伺服器。
如果當前伺服器是一個從伺服器的話,那麼這個部分還會加上以下域:
如果同步操作正在進行,那麼這個部分還會加上以下域:
如果主從伺服器之間的連線處於斷線狀態,那麼這個部分還會加上以下域:
INFO 命令只是提供了文字形式的監控結果,並沒有視覺化,所以,在實際應用中,我們還可以使用一些第三方開源工具,將 INFO 命令的返回結果視覺化。接下來,我要講的 Prometheus ,就可以通過外掛將 Redis 的統計結果視覺化。
Prometheus是一套開源的系統監控報警框架。它的核心功能是從被監控系統中拉取監控資料,結合Grafana 工具,進行視覺化展示。
監控資料可以儲存到時序資料庫中,以便運維人員進行歷史查詢。同時,Prometheus 會檢測系統的監控指標是否超過了預設的閾值,一旦超過閾值,Prometheus 就會觸發報警。
對於系統的日常運維管理來說,這些功能是非常重要的。而Prometheus已經實現了使用這些功能的工具框架。我們只要能從被監控系統中獲取到監控資料,就可以用 Prometheus 來實現運維監控。
Prometheus 正好提供了外掛功能來實現對一個系統的監控,我們把外掛稱為 exporter ,每一個 exporter實際是一個採集監控資料的元件。exporter採集的資料格式符合 Prometheus 的要求,Prometheus 獲取這些資料後,就可以進行展示和儲存了。
Redis-exporter就是用來監控 Redis的,它將 INFO 命令監控到的執行狀態和各種統計資訊提供給 Prometheus,從而進行視覺化展示和報警設定。目前,Redis-exporter 可以支援 Redis 2.0 至 6.0 版本,適用範圍比較廣。
除了獲取 Redis 範例的執行狀態,Redis-exporter 還可以監控鍵值對的大小和集合型別資料的元素個數,這個可以在執行 Redis-exporter 時,使用 check-keys 的命令列選項來實現。
此外,我們可以開發一 Lua 指令碼,客製化化採集所需監控的資料。然後,我們使用 scripts 命令列選項,讓 Redis-exporter 執行這個特定的指令碼,從而可以滿足業務層的多樣化監控需求。
Redis-exporter 相比,這兩個都是輕量級的監控工具。它們分別是用 Ruby 和 Python 開發的,也是將 INFO 命令提供的範例執行狀態資訊視覺化展示。雖然這兩個工具目前已經很少更新了,不過,如果你想自行開發 Redis 監控工具,它們都是不錯的參考。
本文來自部落格園,作者:洛神灬殤,轉載請註明原文連結:https://www.cnblogs.com/liboware/p/17051960.html,任何足夠先進的科技,都與魔法無異。