做個簡單的Redis監控(源碼分享)


Redis監控

  Redis 是目前應用廣泛的NoSQL,我做的項目中大部分都是與Redis打交道,發現身邊的朋友也更多人在用,相對於memcached 來說,它的優勢也確實是可圈可點。在隨着業務,數據量等不斷的擴大后,對Redis的穩定性,性能等也更在的重視,之前就遇到過Redis導致服務器內存不足,做持久化的時候CPU飆高,Redis連接數過多等問題,這時候我們就需要有一個監控工具,能夠看到各個指標的變化,方便做跟蹤分析,這里先列舉下目前接觸過幾個監控工具。

redis-cli 

  這個工具是Redis本身自帶的,當我們下載Redis安裝包的時候,就會發現,里面自帶了這個工具,使用也非常簡單,只需要輸入INFO 命令就可以獲取Redis服務相關的信息,效果如下:

          

當然,輸入Info的話只能監控一次,如果想連續監控,可以使用命令

-r 10 -i 1 INFO

其中-r 執行的次數,-i每次執行的間隔時間(秒)

關於INFO 命令的使用和參數說明,可以參考這個地址:http://www.runoob.com/redis/server-info.html

redis-live

這是一款 使用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

Opserver

  這個是由Stack Overflow的開源監控解決方案,個人感覺是一款強大而非常好的監控工具,為什么呢,因為它是用C# 來寫的(啊哈哈,開個玩笑~~)。只要是由於它除了可以監控Reidis,還可以監控SqlElasticsearch等,而且監控的功能也很強大。不過個人感覺在使用上有點過於重量級,而且關於它的資料和官方的文檔都很少。這里也提供下相關的資料:

  官方地址:https://github.com/opserver/Opserver

  Windows 下的使用說明:http://www.cnblogs.com/mushroom/p/4609365.html

RedisMonitor(自己造輪子)

   毛爺爺曾經說過“自動動手,豐衣足食”。大概看了下Opserver的源碼,看到Opserver也是使用StackExchange.Redis 調用了RedisINFO來做監控的,之前剛好也看過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對象封裝

  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;
        }
    }

獲取服務器信息用到的幾個方法如下

GetServer(hostAndPort)

var server = RedisConnectionHelp.GetConnectionMultiplexer(readWriteHosts).GetServer(hostAndPort)

  這里獲取IServer對象,所有服務器相關的方法和信息都封裝在這個對象中。

Ping()

server.Ping();

  用來測試獲取服務器的響應時間

InfoRaw()

server.InfoRaw()

  獲取服務器原始內容信息,輸出的內容就是我們直接使用info命令看到的一樣。

Info()

server.Info()

  在一開始介紹的監控工具1的時候,截圖中可以看到,info 命令輸出的內容中包括了Server,Clients,Memory,Persistence等信息,Info()方法幫我們GroupBy了這些信息,做好了分組,並且所有的指標都封裝成了Dictionary的類型,使用起來非常方便。

ClientList()

server.ClientList()

  獲取當前連接的所有客戶端信息

  只需要使用這幾個方法,然后定時的刷新,將結果顯示到頁面,就能監控到Redis的信息和狀態了這里貼上幾個監控的效果圖

監控列表

詳情頁面

簡單監控

詳細監控

監控圖表

 

連接客戶端監控

源碼下載

關鍵的來了,要做一個懂得分享的程序員,源碼地址:

https://github.com/qq1206676756/RedisMonitor

使用說明

下載源碼編譯后,只需要修改Config文件夾下面的RedisServiceConfig.json文件,修改成自己需要監控的Redis服務器地址就好了,ServerHost的配置可以參考

https://github.com/StackExchange/StackExchange.Redis/blob/master/Docs/Configuration.md

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM