【最佳实践】通过Elasticsearch和rsbeat实时分析Redis slowlog

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: Redis是目前流行的高性能key-value数据库,但如果使用不当,很容易出现慢查询。慢查询过多或者一个时间较长(例如20s)的慢查询会导致操作队列(Redis是单进程)堵塞,可能会导致服务不可用。因此您需要实时收集并分析Redis slowlog,在出现问题时快速定位解决。本文介绍如何通过Elasticsearch和rsbeat实时分析Redis slowlog。

背景信息

通过Elasticsearch和rsbeat实时分析Redis slowlog的原理为:使用rsbeat将Redis slowlog采集到Elasticsearch中,然后在Kibana中进行图形化分析。 相关概念说明如下:

  • Elasticsearch:是一个基于Lucene的实时分布式的搜索与分析引擎,是遵从Apache开源条款的一款开源产品,是当前主流的企业级搜索引擎。它提供了一个分布式服务,可以使您快速的近乎于准实时的存储、查询和分析超大数据集,通常被用来作为构建复杂查询特性和需求强大应用的基础引擎或技术。 阿里云Elasticsearch兼容开源Elasticsearch的功能,以及Security、Machine Learning、Graph、APM等商业功能,致力于数据分析、数据搜索等场景服务。支持5.5.3、6.3.2、6.7.0、6.8.0和7.4.0等版本,并提供了商业插件X-Pack服务。在开源Elasticsearch的基础上提供企业级权限管控、安全监控告警、自动报表生成等功能。本文使用阿里云Elasticsearch进行演示,单击即可免费试用
  • rsbeat:用来收集和分析Redis慢日志的采集器,详情请参见rsbeat官方文档
  • Redis:是一个开源的、基于内存的数据结构存储器,可以用作数据库、缓存和消息中间件,详情请参见Redis官方说明

云数据库Redis版(ApsaraDB for Redis)是兼容开源Redis协议标准、提供内存加硬盘的混合存储方式的数据库服务,基于高可靠双机热备架构及可平滑扩展的集群架构,满足高读写性能场景及弹性变配的业务需求。本文使用云数据库Redis版进行演示,更多详情请参见什么是云数据库Redis版

操作流程

  1. 准备工作

创建阿里云Elasticsearch实例、云数据库Redis版实例(以下简称Redis实例)和ECS实例,三者在同一专有网络VPC(Virtual Private Cloud)下。

  1. 步骤一:配置Redis慢查询参数

根据需求设置Redis slowlog生成的条件,以及可记录的slowlog的最大条数。

  1. 步骤二:安装并配置rsbeat

在ECS中安装rsbeat,并在其配置文件中指定Redis和Elasticsearch服务。

  1. 步骤三:通过Kibana图形化分析slowlog

通过Kibana查看日志详细信息,并根据需求进行统计分析。

准备工作

  1. 创建阿里云Elasticsearch实例,并开启自动创建索引功能。

具体操作步骤请参见创建阿里云Elasticsearch实例开启自动创建索引。本文使用的实例版本为通用商业版6.7。

  1. 创建Redis实例。

具体操作步骤请参见步骤1:创建实例。本文使用的实例版本为Redis 5.0社区版,并且与阿里云Elasticsearch实例在同一VPC下,便于内网访问。

  1. 创建ECS实例。

具体操作步骤请参见使用向导创建实例。本文使用的实例镜像为CentOS 7.6 64位,并且与Redis和Elasticsearch实例在同一VPC下。

  1. 配置Redis实例的访问白名单。

将ECS实例的内网IP地址添加到Redis实例的白名单中,具体操作步骤请参见设置IP白名单

步骤一:配置Redis慢查询参数

  1. 登录Redis管理控制台
  2. 在顶部菜单栏处,选择地域。
  3. 实例列表 页,单击目标实例ID或者其右侧 操作 栏的 管理
  4. 在左侧导航栏,单击 参数设置
  5. 在参数设置列表中,找到 slowlog-log-slower-thanslowlog-max-len 参数,将其修改为您期望的值。

| 参数 | 说明 | 示例 |
|-----------------------------|----------------------------------------------------------------------------------------------------------|---------------------------------------------|
| slowlog-log-slower-than | 当命令执行时间(不包括排队时间)超过该参数值时,该命令会被定义为慢查询,并记录到slowlog中。单位为微秒,默认为10000,即10毫秒。 注意 负数表示关闭慢查询日志功能,0表示记录所有命令操作。 | 本文将该参数值设置为20000。表示在slowlog中记录执行时长超过20ms的命令。 |
| slowlog-max-len | slowlog中可以记录的最大慢查询命令的条数。当slowlog中的记录数超过最大值后,Redis会将最早的slowlog删除。 | 本文将该参数值设置为100。表示在slowlog中记录最近100条慢查询命令。 |

步骤二:安装并配置rsbeat

  1. 连接ECS实例。

具体操作步骤请参见连接实例

  1. 安装rsbeat。

本文使用5.3.2版本。

   wget https://github.com/Yourdream/rsbeat/archive/master.zip
   unzip master.zip
  1. 修改rsbeat配置。

    1. 执行以下命令打开rsbeat.yml文件。

      cd rsbeat-master
      vim rsbeat.yml

    2. 按照以下说明修改rsbeat和output.elasticsearch参数配置,并保存。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BPE6XYej-1597031007598)(../images/p131929.png)]

  rebeat配置   

  |     参数     |                                                                                                                说明                                                                                                                |
  |------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
  | period     | 每隔多久将slowlog输出到Elasticsearch。                                                                                                                                                                                                    |
  | redis      | Redis实例的连接地址,获取方式请参见[查看连接地址](https://help.aliyun.com/document_detail/107717.html?spm=a2c4g.11186623.2.33.3b4c96e9lemsfi#concept-apt-fkl-5gb)。 **注意** 由于配置文件中没有定义Redis实例的密码,因此在获取连接地址后,您还需要开启免密访问,才能确保rsbeat能够访问Redis实例,开启方法请参见[开启免密访问](https://help.aliyun.com/document_detail/85168.html?spm=a2c4g.11186623.2.34.3b4c96e9lemsfi#concept-ttq-dst-j2b)。 |
  | slowerThan | 定义将`config set slowlog-log-slower-than`命令发送到Redis服务器的时间。单位为微秒。                                                                                                                                              |
  output.elasticsearch配置

  |         参数         |                                                        说明                                                        |
  |--------------------|------------------------------------------------------------------------------------------------------------------|
  | hosts              | 阿里云Elasticsearch实例的连接地址,可在实例的基本信息页面获取,详情请参见[查看实例的基本信息](https://help.aliyun.com/document_detail/67804.html?spm=a2c4g.11186623.2.35.3b4c96e9lemsfi#task-2449896)。            |
  | username           | 阿里云Elasticsearch实例的访问用户名,默认为elastic。                                                                             |
  | password           | 对应用户的密码。elastic用户的密码在创建实例时设定,如果忘记可重置,重置密码的注意事项和操作步骤请参见[重置实例访问密码](https://help.aliyun.com/document_detail/159883.html?spm=a2c4g.11186623.2.36.3b4c96e9lemsfi#task-2458093)。 |
  | template.overwrite | 是否覆盖已存在的同名模板,默认为true。                                                                                            |
  1. 启动rsbeat服务。

       ./rsbeat.linux.amd64 -c rsbeat.yml -e -d "*"
    

步骤三:通过Kibana图形化分析slowlog

  1. 登录目标阿里云Elasticsearch实例的Kibana控制台。

具体操作步骤请参见登录Kibana控制台

  1. 创建索引模式。

    1. 在左侧导航栏,单击 Management
    2. Kibana 区域,单击 Index Patterns
    3. 单击 Create index pattern
    4. 输入 Index pattern 名称,单击 Next step

    ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Aknn8zZ5-1597031007638)(../images/p132004.png)] {#substep-itn-drq-4lu}
    {#substep-itn-drq-4lu}](https://ucc.alicdn.com/images/user-upload-01/20200810120441327.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ2Mzk2NTYz,size_16,color_FFFFFF,t_70)

    1. Time Filter field name 中,选择时间过滤器字段名(本文选择 @timestamp )。
    2. 单击 Create index pattern
  2. 查看slowlog的详细信息。

    1. 在左侧导航栏,单击 Discover
    2. Discover 页面左侧,选择目标索引模式rsbeat-*。
    3. 在页面右上角,选择一段时间,查看该时间段内的slowlog信息。

    ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-23WUpcRG-1597031007646)(../images/p132012.png)] {#substep-zhe-81c-3wu}
    {#substep-zhe-81c-3wu}](https://ucc.alicdn.com/images/user-upload-01/20200810120529291.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ2Mzk2NTYz,size_16,color_FFFFFF,t_70)

  3. 统计slowlog数量最多的前10个key,并以降序排列展示。

    1. 在左侧导航栏,单击 Visualize
    2. Visualize 页面,单击+图标。
    3. New Visualization 对话框中,单击 Pie

    ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ec0YpMUX-1597031007669)(../images/p132052.png)] {#substep-wto-vkb-ldr}
    {#substep-wto-vkb-ldr}](https://ucc.alicdn.com/images/user-upload-01/20200810120611317.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ2Mzk2NTYz,size_16,color_FFFFFF,t_70)

    1. 选择索引模式rsbeat-*。

    ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ViBUg24X-1597031007673)(../images/p132051.png)] {#substep-5o7-tza-7qw}
    {#substep-5o7-tza-7qw}](https://ucc.alicdn.com/images/user-upload-01/20200810120732837.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ2Mzk2NTYz,size_16,color_FFFFFF,t_70)

    1. 按照下图配置Metrics和Buckets。

    ![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FrVP5JiM-1597031007680)(../images/p132049.png)] {#substep-65j-4ex-ri9}
    {#substep-65j-4ex-ri9}](https://ucc.alicdn.com/images/user-upload-01/20200810120721181.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ2Mzk2NTYz,size_16,color_FFFFFF,t_70)

    1. 单击运行图标,查看结果。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iCqCUaYI-1597031007687)(../images/p132048.png)]

    说明 更多Kibana的使用方法,请参见Kibana官方文档

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
1天前
|
存储 NoSQL Redis
Redis 新版本引入多线程的利弊分析
【10月更文挑战第16天】Redis 新版本引入多线程是一个具有挑战性和机遇的改变。虽然多线程带来了一些潜在的问题和挑战,但也为 Redis 提供了进一步提升性能和扩展能力的可能性。在实际应用中,我们需要根据具体的需求和场景,综合评估多线程的利弊,谨慎地选择和使用 Redis 的新版本。同时,Redis 开发者也需要不断努力,优化和完善多线程机制,以提供更加稳定、高效和可靠的 Redis 服务。
6 1
|
9天前
|
存储 缓存 监控
深入解析:Elasticsearch集群性能调优策略与最佳实践
【10月更文挑战第8天】Elasticsearch 是一个分布式的、基于 RESTful 风格的搜索和数据分析引擎,它能够快速地存储、搜索和分析大量数据。随着企业对实时数据处理需求的增长,Elasticsearch 被广泛应用于日志分析、全文搜索、安全信息和事件管理(SIEM)等领域。然而,为了确保 Elasticsearch 集群能够高效运行并满足业务需求,需要进行一系列的性能调优工作。
27 3
|
27天前
|
Oracle NoSQL 关系型数据库
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
106 2
|
3月前
|
存储 人工智能 自然语言处理
阿里云Elasticsearch AI场景语义搜索最佳实践
本文介绍了如何使用阿里云Elasticsearch结合搜索开发工作台搭建AI语义搜索。
17285 68
|
1月前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
1月前
|
存储 Prometheus NoSQL
Redis 内存突增时,如何定量分析其内存使用情况
【9月更文挑战第21天】当Redis内存突增时,可采用多种方法分析内存使用情况:1)使用`INFO memory`命令查看详细内存信息;2)借助`redis-cli --bigkeys`和RMA工具定位大键;3)利用Prometheus和Grafana监控内存变化;4)优化数据类型和存储结构;5)检查并调整内存碎片率。通过这些方法,可有效定位并解决内存问题,保障Redis稳定运行。
|
2月前
|
机器学习/深度学习 数据采集 缓存
Elasticsearch与机器学习集成的最佳实践
【8月更文第28天】Elasticsearch 提供了强大的搜索和分析能力,而机器学习则能够通过识别模式和预测趋势来增强这些能力。将两者结合可以实现更智能的搜索体验、异常检测等功能。
75 0
|
2月前
|
缓存 NoSQL 网络协议
【Azure Redis 缓存】Azure Redis Cluster 在增加分片数时失败分析
【Azure Redis 缓存】Azure Redis Cluster 在增加分片数时失败分析
|
2月前
|
存储 缓存 NoSQL
【Azure Redis 缓存】当使用Azure Redis 集群服务时候,发生了Moved的几点分析
【Azure Redis 缓存】当使用Azure Redis 集群服务时候,发生了Moved的几点分析
|
2月前
|
网络协议 NoSQL 网络安全
【Azure 应用服务】由Web App“无法连接数据库”而逐步分析到解析内网地址的办法(SQL和Redis开启private endpoint,只能通过内网访问,无法从公网访问的情况下)
【Azure 应用服务】由Web App“无法连接数据库”而逐步分析到解析内网地址的办法(SQL和Redis开启private endpoint,只能通过内网访问,无法从公网访问的情况下)

相关产品

  • 检索分析服务 Elasticsearch版