Redis及其监控工具简介

上一篇 / 下一篇  2019-02-11 15:40:00 / 个人分类:Redis

作为现在web应用开发的黄金搭档,Redis正被广泛应用存储session信息、权限信息、交易作业等热数据。但是Redis的数据可视化不便、数据查看维护困难、Redis状态监控、运维不易等问题也是我们经常会遇到的问题。作为一名性能测试人员,工作当中不可避免会碰到系统使用Redis数据Redis功能性能非常出色,考虑篇幅问题,本文将会对Redis常见的监控工具进行简单的介绍,后面有机会再分享Redis特性及性能相关的内容。


简要介绍

Redishttp://Redis.io)是一款开源的、高性能的键-值存储(key-value store),它是用ANSIC来编写。Redis的项目名是Remote Dictionary Server的缩写,但它常被称作是一款数据结构服务器(data structureserver)。Redis的键-值可以包括字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)和有序集合(sorted sets)等数据类型。对这些数据类型可以执行原子操作例如:对字符串进行附加操作(append递增哈希中的值向列表中增加元素计算集合的交集、并集与差集等。


为了获得优异的性能,Redis采用了内存中(in-memory)数据集(dataset)的方式。根据使用场景的不同,可以每隔一段时间将数据集转存到磁盘上来持久化数据,或者在日志尾部追加每一条操作命令。


Redis同样支持主-从复制(master-slave replication),并且具有非常快速的非阻塞首次同步(non-blockingfirst synchronization)、网络断开自动重连等功能。同时Redis还具有其它一些特性,其中包括简单的check-and-set机制、pub/sub和配置设置等,以便使得Redis能够表现得更像缓存(cache。此外,Redis还提供了丰富的客户端,以便支持现阶段流行的大多数编程语言。 Redis内部结构图如下所示:



 


功能模块说明如下:

File Event:处理文件事件(在多个客户端中实现多路复用,接受它们发来的命令请求(读事件),并将命令的执行结果返回给客户端(写事件);


Time Event:时间事件(更新统计信息,清理过期数据,附属节点同步,定期持久化等)


AOF:命令日志的数据持久化;


RDB:实际的数据持久化;


Lua EnvironmentLua脚本的运行环境为了让Lua环境符合Redis脚本功能的需求,RedisLua环境进行了一系列的修改,包括添加函数库、更换随机函数、保护全局变量等等;


Command table(命令表):在执行命令时,根据字符来查找相应命令的实现函数;


Share Objects(对象共享):主要存储常见的值:a.各种命令常见的返回值,例如返回值OKERRORWRONGTYPE等字符;

b.小于redis.h/REDIS_SHARED_INTEGERS(默认1000)的所有整数。通过预分配的一些常见的值对象,并在多个数据结构之间共享对象,程序避免了重复分配的麻烦。也就是说,这些常见的值在内存中只有一份;


DatabasesRedis数据库是真正存储数据的地方。当然,数据库本身也是存储在内存中的。一个数据库,在内存中的数据结构如下图所示:



 

Redis对于Linux是官方支持,普通使用按照官方指导即可安装成功,这里对于Redis安装本文不再详述。下面介绍一下Redis监控方面的内容。


二、Reids监控

性能测试当中,尤是针对Redis性能测试如和做好Redis监控至关重要的,redis自带有命令行的监控工具,也有一些基于这些命令行而还发的工具,其中一些是具有图形界面的,这里主要介绍以下四个监控工具


1. redis-faina

redis-faina是由Instagram开发并开源的一个Redis查询分析小工具。Instagram团队曾经使用PGFouine来作为其PostgreSQL的查询分析工具,他们觉得Redis也需要一个类似的工具来进行query分析工作,于是开发了redis-faina。   redis-faina是通过RedisMONITOR命令来实现的,通过对在Redis上执行的query进行监控,统计出一段时间的query特性。下面就是其使用方法简介:


下载使用:



 

测试结果如下:



 

统计的内容有Overall Stats总体统计数据)、Top Prefixekey前缀统计)Top Keys操作频繁keyTop Command执行最多的命令)Command Timemicrosecs(命令执行时长)Heaviest Commandsmicrosecs(耗时最多的命令)Slowest Calls最慢的命令)


图中展示一些实时的数据,从上面结果我们可以看到对Redis的操作规律,比如针对哪些key在进行操作,进行了什么操作,这些操作的效率如何等相关有用信息。


由于RedisMONITOR也对性能有所影响,所以建议在使用时不要一直开启MONITOR来分析。可以采用定时抽样一段时间来做样本分析推荐使用,redis版本必须大于2.4


2. redisLive 

RedisLive是一款用Python编写的Redis图形监控工具安装Redis图形监控工具既然RedisLivePython编写,那么Python环境是必不可少的,一般Linux默认都安装了Python,如需安装或者更新网上提供很多教程。RedisLive的原理很简单,就是通过监控脚本来利用Redis提供的MONITOR命令从被监控Redis实例中获取数据并存储到Redis的监控实例中来做数据分析。RedisLive以可视化的方式展示了Redis实例中的数据,分析查询模式和峰值。


下载安装使用:



 

浏览器中输入http://10.20.111.188:8888/index.html 即可看到下图。



 

上图中监控数据不多,下面给出一张官网的效果图。



 

一个web界面,可以同时监控多个redis实例,做集中监控比较好。


3. redis-stat 

Redis-statRuby写成的监控Redis程序,本身基于Redisinfo命令封装而成。通常来说,不会像基于MONITOR命令的监控工具一样,对Redis本身有性能上的影响。redis-stat可以监控Redis的实例,一方面可以像vmstat一样,把状态信息从终端输出,另一方面也可以通过基于嵌入式的web server使用dashboard页面查看状态信息。


运行环境安装:



 

redis-stat安装



 

redis-stat的具体用法:


 

redis-stat命令行模式



 

redis-statweb模式



 

效果图如下



 

运行web模式:



 

浏览器中输入 http://10.20.111.188:8080/  结果如下:



 

工具既有命令行又有web界面,可以放到后台运行,ruby开发的,数据比redis-live感觉直观 ,唯一的缺点是如果同时监控多个redis实例,不能单独显示每一个实例的数据信息,貌似是总和。


4. redis-monitor

monitor是一个调试命令,用JAVA编写的,返回服务器处理的每一个命令,它有助于我们了解在数据库上发生了什么操作,可以通过redis-clitelnet命令使用。使用sigint (Ctrl-C)来停止通过redis-cli使用monitor命令返回的输出,使用quit命令来停止通过telnet使用monitor返回的输出。


由于MONITOR命令返回 服务器处理的所有的命令,所以在性能上会有一些消耗。做集中监控使用redis-live、命令行使用redis-stat,可能会比较合适,另外也可根据自己的情况自行编写,总之就是根据infomonitor命令来获取并展示信息。


相对于命令行工具来说,图形化监控Redis结果更加美观、直接,但是同时图形化的工具安装起来也比较麻烦。有些甚至会对Redis性能造成一定的影响,是实际的项目中,根据自己想要的监控结果选择合适监控工具。


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2019-02-15  
     12
3456789
10111213141516
17181920212223
2425262728  

数据统计

  • 访问量: 18265
  • 日志数: 48
  • 建立时间: 2016-04-19
  • 更新时间: 2019-02-11

RSS订阅

Open Toolbar