Redis 是目前應用廣泛的NoSQL,我做的項目中大部分都是與Redis打交道,發現身邊的朋友也更多人在用,相對於memcached 來說,它的優勢也確實是可圈可點。在隨著業務,數據量等不斷的擴大後,對Redis的穩定性,性能等也更在的重視,之前就遇到過Redis導致服務器內存不足,做持久化的時候CPU飙高,Redis連接數過多等問題,這時候我們就需要有一個監控工具,能夠看到各個指標的變化,方便做跟蹤分析,這裡先列舉下目前接觸過幾個監控工具。
這個工具是Redis本身自帶的,當我們下載Redis安裝包的時候,就會發現,裡面自帶了這個工具,使用也非常簡單,只需要輸入INFO 命令就可以獲取Redis服務相關的信息,效果如下:
當然,輸入Info的話只能監控一次,如果想連續監控,可以使用命令
-r 10 -i 1 INFO
其中-r 是執行的次數,-i是每次執行的間隔時間(秒)
關於INFO 命令的使用和參數說明,可以參考這個地址:http://www.runoob.com/redis/server-info.html
這是一款 使用python編寫 的監控工具,所以運行依賴於python 環境和幾個三方庫,不過監控的指標有點少,而且在windows上有時候覺得卡卡的,這裡提供下相關的資料
官網地址:https://github.com/nkrode/RedisLive
Linux下安裝使用: http://www.cnblogs.com/madyina/p/4060556.html
Windows下安裝使用:http://www.cnblogs.com/mahatmasmile/p/5039084.html
這個是由Stack Overflow的開源監控解決方案,個人感覺是一款強大而非常好的監控工具,為什麼呢,因為它是用C# 來寫的(啊哈哈,開個玩笑~~)。只要是由於它除了可以監控Reidis,還可以監控Sql,Elasticsearch等,而且監控的功能也很強大。不過個人感覺在使用上有點過於重量級,而且關於它的資料和官方的文檔都很少。這裡也提供下相關的資料:
官方地址:https://github.com/opserver/Opserver
Windows 下的使用說明:http://www.cnblogs.com/mushroom/p/4609365.html
毛爺爺曾經說過“自動動手,豐衣足食”。大概看了下Opserver的源碼,看到Opserver也是使用StackExchange.Redis 調用了Redis的INFO來做監控的,之前剛好也看過StackExchange.Redis 的使用,而且StackExchange.Redis 對於獲Server信息這塊,都已經封裝好了,幾乎可以直接調用,於是就想干脆自己動手做一個簡單的監控。
對於StackExchange.Redis 的使用和通用類的封裝,可以參考我之前寫的一篇文章:
http://www.cnblogs.com/qtqq/p/5951201.html
而StackExchange.Redis 如何獲取Server信息和使用命令操作,可以參看官網的:
https://github.com/StackExchange/StackExchange.Redis/blob/master/Docs/Configuration.md
ConnectionMultiplexer對象StackExchange.Redis最中樞的對象,幾乎所有的操作都是依靠它來使用,代碼如下:
public static class RedisConnectionHelp { private static readonly ConcurrentDictionary<string, ConnectionMultiplexer> ConnectionCache = new ConcurrentDictionary<string, ConnectionMultiplexer>(); /// <summary> /// 緩存獲取 /// </summary> /// <param name="connectionString"></param> /// <returns></returns> public static ConnectionMultiplexer GetConnectionMultiplexer(string connectionString) { if (!ConnectionCache.ContainsKey(connectionString)) { ConnectionCache[connectionString] = GetManager(connectionString); } return ConnectionCache[connectionString]; } private static ConnectionMultiplexer GetManager(string connectionString) { if (string.IsNullOrWhiteSpace(connectionString)) { throw new Exception("Redis 連接地址不能為空"); } var connect = ConnectionMultiplexer.Connect(connectionString); return connect; } }
獲取服務器信息用到的幾個方法如下
var server = RedisConnectionHelp.GetConnectionMultiplexer(readWriteHosts).GetServer(hostAndPort)
這裡獲取IServer對象,所有服務器相關的方法和信息都封裝在這個對象中。
server.Ping();
用來測試獲取服務器的響應時間
server.InfoRaw()
獲取服務器原始內容信息,輸出的內容就是我們直接使用info命令看到的一樣。
server.Info()
在一開始介紹的監控工具1的時候,截圖中可以看到,info 命令輸出的內容中包括了Server,Clients,Memory,Persistence等信息,Info()方法幫我們GroupBy了這些信息,做好了分組,並且所有的指標都封裝成了Dictionary的類型,使用起來非常方便。
server.ClientList()
獲取當前連接的所有客戶端信息
只需要使用這幾個方法,然後定時的刷新,將結果顯示到頁面,就能監控到Redis的信息和狀態了這裡貼上幾個監控的效果圖
關鍵的來了,要做一個懂得分享的程序員,源碼地址:
https://github.com/qq1206676756/RedisMonitor
下載源碼編譯後,只需要修改Config文件夾下面的RedisServiceConfig.json文件,修改成自己需要監控的Redis服務器地址就好了,ServerHost的配置可以參考
https://github.com/StackExchange/StackExchange.Redis/blob/master/Docs/Configuration.md