做个简单的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

 

posted @ 2017-01-12 22:58  最爱晴天  阅读(11674)  评论(23编辑  收藏  举报