做个容易的Redis监控(源码分享)[转载]

做个简单的Redis监控(源码分享)[转载]

Redis监控

 

Redis 是目前应用广泛的NoSQL,我做的项目中大部分都是与Redis打交道,发现身边的朋友也更多人在用,相对于memcached 来说,它的优势也确实是可圈可点。在随着业务,数据量等不断的扩大后,对Redis的稳定性,性能等也更在的重视,之前就遇到过Redis导致服务器内存不足,做持久化的时候CPU飙高,Redis连接数过多等问题,这时候我们就需要有一个监控工具,能够看到各个指标的变化,方便做跟踪分析,这里先列举下目前接触过几个监控工具。

 

redis-cli 

 

这个工具是Redis本身自带的,当我们下载Redis安装包的时候,就会发现,里面自带了这个工具,使用也非常简单,只需要输入INFO 命令就可以获取Redis服务相关的信息,效果如下:

 

做个容易的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(http://www.*.com/)的开源监控解决方案,个人感觉是一款强大而非常好的监控工具,为什么呢,因为它是用C# 来写的(啊哈哈,开个玩笑~~)。

 

只要是由于它除了可以监控Reidis,还可以监控Sql,Elasticsearch等,而且监控的功能也很强大。

 

不过个人感觉在使用上有点过于重量级,而且关于它的资料和官方的文档都很少。这里也提供下相关的资料:

 

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

 

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

 

RedisMonitor(自己造*)

 

毛爷爷曾经说过“自动动手,丰衣足食”。大概看了下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对象封装

 

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的信息和状态了这里贴上几个监控的效果图

 

监控列表

 

做个容易的Redis监控(源码分享)[转载]

 

详情页面

 

做个容易的Redis监控(源码分享)[转载]

 

简单监控

 

做个容易的Redis监控(源码分享)[转载]

 

详细监控

 

做个容易的Redis监控(源码分享)[转载]

 

监控图表

 

做个容易的Redis监控(源码分享)[转载]

 

连接客户端监控

 

做个容易的Redis监控(源码分享)[转载]

 

源码下载

 

关键的来了,要做一个懂得分享的程序员,源码地址:

https://github.com/qq1206676756/RedisMonitor

 

使用说明

 

下载源码编译后,只需要修改Config文件夹下面的RedisServiceConfig.json文件,修改成自己需要监控的Redis服务器地址就好了,ServerHost的配置可以参考https://github.com/StackExchange/StackExchange.Redis/blob/master/Docs/Configuration.md