Redis检索性能不足,改造rsbeat解决历史慢日志跟踪

刘宇 2019-05-10 11:44:50
作者介绍

刘宇,甜橙金融创新中心基础技术架构师,拥有9年IT从业经验、9年数据库开发运维经验、4次大型营销活动经验。目前关注容器、分布式数据库技术等基础技术。

 

在线上排查redis性能问题时,从redis中找进行优化是一种常规手段。

 

redis slowlog被设计成内存中一个先进先出的队列结构,在慢日志较多的情况下,旧命令就会被刷新出slowlog,从而无法跟踪。

 

为了解决历史慢日志跟踪问题,需要将redis slowlog转储,本文介绍使用改造后的rsbeat将slowlog转储到Elasticsearch,进行分析的设计实现。

 

一、Redis slowlog简介

 

slowlog核心配置参数及命令

 

  • slowlog-log-slower-than:slowlog的阈值,只有query执行时间大于slowlog-log-slower-than的记录慢查询,设置的单位是微秒,默认是10000微秒,也就是10ms。

  • slowlog-max-len:表示慢查询最大的条数,默认值为128。当slowlog超过设定的最大值后,会将最早的slowlog删除。

  • Slowlog get N:用来获取指定的条数可以使用SLOWLOG GET N命令。

 

rsbeat简介

 

rsbeat来源于官方的Beats平台,Beats集合了多种单一用途数据采集器。它们从成百上千或成千上万台机器和系统向Logstash或Elasticsearch发送数据。

 

地址:

https://www.elastic.co/guide/en/beats/libbeat/current/community-beats.html

 

 

本次用到Elasticsearch、kibana和rsbeat三款产品。Elasticsearch用来存储解析后的redis slowlog,kibana用于图形化分析,rsbeat用于收集redis slowlog。

 

rsbeat的收集原理如下:

 

 

二、rsbeat改造

 

因为社区的rsbeat只支持ipPort的方式进行检索。不支持redis sentinel还有redis cluster,为了满足我们的需要,这里对rsbeat进行了部分改造。改造点如下:

 

1、增加支持sentinel及redis cluster

 

rsbeat的关于原始配置如下:

 

 

其中redis参数配置为ipPort形式的redis实例list,我们这个改造成ipPortName的形式:

 

 

对于redis sentinel这里的myredis使用注册到sentinel里的master name来进行检索。

 

对于redis cluster这里的myredis可使用自定义的集群名称,或者是cmdb中的集群名称来进行检索。一般redis cluster节点都比较多,这样可以避免手工需要登陆多个节点来获取慢查询,从而提高效率。

 

改造rsbeat.go的代码如下所示,增加一个ipPortName字符串的处理函数:

 

 

在poolList这个map结构中处理:

 

 

2、记录redis实例的角色信息

 

前面使用到了master name检索,又想对redis的角色进行筛选,需要记录角色信息。则在rebeat中slowlog get、slowlog reset后面增加role命令来获取角色信息。

 

 

在func (bt *rsbeat) redisc(beatname string, init bool, c redis.Conn, ipPort string){...}函数中修改

 

 

以及beats的event中:

 

 

然后在修改poolInit函数,增加slowerLen参数:

 

 

3、Slowlog-max-len可配置

 

修改Slowlog-max-len可配置在config.go 文件中,Config结构中增加SlowerLen属性,以及默认值:

 

 

三、使用Kibana中检索

 

1、通过master name或者是redis cluster的name进行检索:

 

 

2、使用master name以及角色检索:

 

在Add a filter中添加role的过滤:

 

 

然后检索master name:

 

 

3、在DASHBOARD中检索:

 

 

四、总结

 

Elastic Stack有着强大的开源社区支持。通过简单的改造和折腾,即可扩展rsbeat功能,使其更满足redis sentinel、redis cluster等更灵活的查询检索需要。本文通过对改造内容进行说明,希望能给大家提供帮助及思路。

活动预告