天天看点

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

作者介绍

刘宇,甜橙金融创新中心基础技术架构师,拥有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​​

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

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

rsbeat的收集原理如下:

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

二、rsbeat改造

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

1、增加支持sentinel及redis cluster

rsbeat的关于原始配置如下:

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

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

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

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

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

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

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

在poolList这个map结构中处理:

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

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

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

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

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

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

以及beats的event中:

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

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

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

3、Slowlog-max-len可配置

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

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

三、使用Kibana中检索

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

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

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

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

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

然后检索master name:

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

3、在DASHBOARD中检索:

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

四、总结

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

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

掌握数据库运维新思维,获得更优操作启发

不妨来DAMS看看技术大牛们都有哪些大招

继续阅读