zoukankan      html  css  js  c++  java
  • 做个简单的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(http://www.stackoverflow.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的信息和状态了这里贴上几个监控的效果图

    监控列表

    详情页面

    简单监控

    详细监控

    监控图表

    连接客户端监控

    源码下载

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

    https://github.com/qq1206676756/RedisMonitor

    使用说明

    下载源码编译后,只需要修改Config文件夹下面的RedisServiceConfig.json文件,修改成自己需要监控的Redis服务器地址就好了,ServerHost的配置可以参考https://github.com/StackExchange/StackExchange.Redis/blob/master/Docs/Configuration.md
     
     
  • 相关阅读:
    my first blog
    CentOS启动报错:Centos kernel panic-not syncing:VFS:Unable to mount root fs on unknown block
    J2EE在Web容器中启动报错:com.sun.jdi.InvocationException occurred invoking method.
    SVN报错:can't open file db/txn-current-lock:permission denied 解决方法
    Linux(CentOS6.4、CentOS6.3)下安装、配置PostgreSQL9.2
    [模板] 线性代数:矩阵/高斯消元/矩阵求逆/行列式
    [模板] 杂项:二分/离散化/随机数/其他
    [模板] 图论:存储/拓扑排序
    Luogu1137 旅行计划(拓扑排序)
    C++模板、.vimrc和一些Linux配置
  • 原文地址:https://www.cnblogs.com/newnj/p/6546908.html
Copyright © 2011-2022 走看看