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

     

  • 相关阅读:
    AutoFac (控制反转IOC 与依赖注入DI)
    【干货】利用MVC5+EF6搭建博客系统(一)EF Code frist、实现泛型数据仓储以及业务逻辑
    Log4.Net 在Winfrom、MVC、ashx程序里的使用,ashx程序里使用异步
    触发器
    游标的使用
    sql数据库快照与恢复 规则绑定
    磁盘恢复
    修改sql数据库名称
    MVC学习笔记
    NuGet包和功能
  • 原文地址:https://www.cnblogs.com/qtqq/p/6280183.html
Copyright © 2020-2023  润新知