您当前的位置:首页 > 电脑百科 > 数据库 > Redis

如何监控 Redis

时间:2023-08-07 14:19:40  来源:微信公众号  作者:huangxy

简述

上篇文章介绍了如何搭建 prometheus 监控体系,监控 linux 服务器,这篇文章跟大家介绍如何监控 redis,以及我们要关注的指标都有哪些

监控 redis 需要关注什么指标

在《聊聊监控》这篇文章,介绍了 google 提出的监控四个黄金指标(没看过的朋友可以看看这篇文章),下面我们就分别通过延迟流量错误饱和度四方面,来看看对应到 redis 中,我们要监控哪些数据指标(metrics)

延迟

redis-cli 提供了--latency命令,可以很方面的让我们获取到 redis 执行命令的延迟,其原理是用 redis-cli 连接到 redis-server 上,然后不断发送ping命令,统计ping命令的耗时

> redis-cli --latency -h 127.0.0.1 -p 6379
min: 0, max: 1, avg: 0.13 (412 samples)

可以看到这里的延迟是0.13ms,因为我是在 redis-server 所在机器执行的--latency命令,下面看看我在另外一台机器执行--latnecy命令的结果

> redis-cli -h 192.168.57.140 -p 6379 --latency
min: 0, max: 3, avg: 1.21 (199 samples)

可以看到,现在的延迟为1.21ms,证明有大概1.08ms花费在了网络 I/O 上

到这里可能有些人会说,ping 命令很简单,是不是不能反馈出真实的命令执行延迟呢?其实,我们都知道,redis 是单线程模型的,如果有一条命令执行的慢,那么其后面的命令都得等着,所以我们是可以使用 ping 命令的执行耗时来作为 redis 命令执行耗时的指标的

--latency命令只能知道 redis 在什么时间点延迟比较高,并不知道延迟高是什么原因造成的,或者说不知道是哪条命令执行比较耗时,导致 redis 延迟高。跟 MySQL 一样,redis 也提供了慢查询的功能,使用slowlog get [count]可以查看最近执行的慢查询命令(慢查询时间通过slowlog-log-slower-than配置指定)

127.0.0.1:6379> SLOWLOG get 1
1) 1) (integer) 47
   2) (integer) 1668743666
   3) (integer) 13168
   4) 1) "hset"
      2) "/idents/Default"
      3) "tt-fc-dev01.nj"
      4) "1668743666"
   5) "127.0.0.1:43172"
   6) ""

流量

在 redis 的流量监控中,我们一般关注的是 redis 每秒的请求数(即执行了多少次操作)、每秒接受跟返回的数据量。这些指标在都可以通过info all命令获取

> redis-cli -h 127.0.0.1 -p 6379 info all | grep instantaneous
instantaneous_ops_per_sec:0
instantaneous_input_kbps:0.00
instantaneous_output_kbps:0.00
  • instantaneous_ops_per_sec: 每秒执行了多少次操作
  • instantaneous_input_kbps: 每秒接受多少 KiB 的数据
  • instantaneous_output_kbps: 每秒返回多少 KiB 的数据

如果将 redis 作为缓存使用的话,还要关注缓存的命中率,同样的,可以使用info all命令查询

> redis-cli -h 127.0.0.1 -p 6379 info all | grep keyspace
keyspace_hits:0
keyspace_misses:1
  • keyspace_hits: 自 redis 启动以来,查询命令的命中数量
  • keyspace_misses: 自 redis 启动以来,未命中的数量

有了这两个指标,就可以通过keyspace_hits / (keyspace_hits + keyspace_misses)计算出缓存的命中率

错误

因为 redis 都是内存操作,基本不会出现什么错误,有错误的话一般是命令写错导致的,这一般在开发的时候就解决了,所以不用对错误做什么特殊的监控

饱和度

饱和度指的是 redis 有多“满”,在 redis 中有两个数据可以反映出 redis 究竟有多“满”,一个是内存使用率,另外一个是内存的碎片率

内存使用率可以通过info memory命令查看

> info memory 
# Memory
used_memory:1227384
used_memory_human:1.17M
used_memory_rss:4308992
used_memory_rss_human:4.11M
...
maxmemory:134217728
maxmemory_human:128.00M
...
mem_fragmentation_ratio:3.51
...
  • used_memory: 使用了多少内存
  • used_memory_rss: 操作系统分配了多少内存给 redis
  • mem_fragmentation_ratio: 即内存碎片率,根据use_memory_rss/use_memory计算得出,正常来讲,操作系统在分配内存的时候,有最小分配单位的限制(不同操作系统不一样,有 8byte、16byte 等),所以内存碎片率稍大于 1 是正常的,如果内存碎片率过高,可能就需要考虑对内存碎片进行清理了

redis-exporter 安装使用

redis 本身不通过 prometheus 协议暴露自身的各种数据指标,与node-exporter一样,我们可以运行通过redis-exporter,将 redis 的指标暴露给 pormetheus

redis-exporter下载地址:https://Github.com/oliver006/redis_exporter/releases,目前最新的版本是 1.52.0

$ wget https://github.com/oliver006/redis_exporter/releases/download/v1.52.0/redis_exporter-v1.52.0.linux-amd64.tar.gz
$ tar -zxvf redis_exporter-v1.52.0.linux-amd64.tar.gz
$ mv redis_exporter-v1.52.0
$ cd redis_exporter-v1.52.0
$ ./redis_exporter &

redis-exporter暴露的端口是9121,可以通过访问 9121 查看采集的所有指标图片

prometheus 配置

在 prometheus 配置文件中加入如下配置

- job_name: 'redis-exporter'
    static_configs:
      - targets: ['localhost:9121']

向 prometheus 发送 HUP 信号,让 prometheus 重新读取配置文件

$ kill -HUP `pidof prometheus`

prometheus 与 grafana 的安装,在我上篇文章有讲,还不清楚怎么搭建的同学可以翻阅我上篇文章——《如何搭建 Linux 服务器监控系统》

grafana 配置

redis 控制面板,我这里用的是11835这个面板,一样通过 dashboard ID 的方式导入图片

监控面板如下图片

可以看到,面板除了展示了我们上面所讲到的指标外(如内存使用率、缓存命中数等),还展示了客户端连接数、redis 正常运行时间等

另外需要注意的是:如果你像下面一样不展示内存使用率的话

图片

可能是读取不到redis_memory_max_bytes指标,那是因为没配置 redis 的最大内存,可以在 redis 配置文件中添加maxmemory配置,或者使用config rewrite命令进行修改

127.0.0.1:6379> config set maxmemory 128mb
OK
127.0.0.1:6379> config rewrite
8110:M 07 Aug 2023 09:21:53.983 # CONFIG REWRITE executed with success.
OK

总结

本篇文章讲了 redis 监控需要关注的指标。并通过redis-exporter的方式,将 redis 的监控纳入到 prometheus 体系中来,如果觉得我的文章对你有帮助的话,可以点个关注或者在看哦,你的支持是我写作的动力



Tags:Redis   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
Redis 不再 “开源”,未来采用 SSPLv1 和 RSALv2 许可证
Redis 官方于21日宣布修改开源协议 —— 未来所有版本都将使用 “源代码可用” 的许可证 (source-available licenses)。具体来说,Redis 将不再遵循 BSD 3-Clause...【详细内容】
2024-03-27  Search: Redis  点击:(11)  评论:(0)  加入收藏
Redis“叛逃”开源,得罪了几乎所有人
内存数据库供应商Redis近日在开源界砸下了一块“巨石”。Redis即将转向双许可模式,并实施更为严格的许可条款。官方对此次变更的公告直截了当:从Redis 7.4版本开始,Redis将在Re...【详细内容】
2024-03-25  Search: Redis  点击:(9)  评论:(0)  加入收藏
如何使用 Redis 实现消息队列
Redis不仅是一个强大的内存数据存储系统,它还可以用作一个高效的消息队列。消息队列是应用程序间或应用程序内部进行异步通信的一种方式,它允许数据生产者将消息放入队列中,然...【详细内容】
2024-03-22  Search: Redis  点击:(17)  评论:(0)  加入收藏
Redis不再 “开源”
Redis 官方今日宣布修改开源协议 —— 未来所有版本都将使用 “源代码可用” 的许可证 (source-available licenses)。具体来说,Redis 将不再遵循 BSD 3-Clause 开...【详细内容】
2024-03-21  Search: Redis  点击:(8)  评论:(0)  加入收藏
在Redis中如何实现分布式锁的防死锁机制?
在Redis中实现分布式锁是一个常见的需求,可以通过使用Redlock算法来防止死锁。Redlock算法是一种基于多个独立Redis实例的分布式锁实现方案,它通过协调多个Redis实例之间的锁...【详细内容】
2024-02-20  Search: Redis  点击:(47)  评论:(0)  加入收藏
手动撸一个 Redis 分布式锁
大家好呀,我是楼仔。今天第一天开工,收拾心情,又要开始好好学习,好好工作了。对于使用 Java 的小伙伴,其实我们完全不用手动撸一个分布式锁,直接使用 Redisson 就行。但是因为这些...【详细内容】
2024-02-19  Search: Redis  点击:(39)  评论:(0)  加入收藏
工作中Redis有哪些好用的运维工具
工作中使用 Redis 时,如果大家公司没有专业运维,可能开发人员就会面临这些运维的工作,包括 Redis 的运行状态监控,数据迁移,主从集群、切片集群的部署和运维等等。本文我就从这三...【详细内容】
2024-02-06  Search: Redis  点击:(55)  评论:(0)  加入收藏
深入Go底层原理,重写Redis中间件实战
Go语言以其简洁、高效和并发性能而闻名,深入了解其底层原理可以帮助我们更好地利用其优势。在本文中,我们将探讨如何深入Go底层原理,以及如何利用这些知识重新实现一个简单的Re...【详细内容】
2024-01-25  Search: Redis  点击:(66)  评论:(0)  加入收藏
批量执行Redis命令的四种方式!
前言在我们的印象中Redis命令好像都是一个个单条进行执行的,如果有人问你如何批量执行Redis命令,你能回答的上吗,或者说能答出几种方式呢?最容易想到的是Redis的一些批量命令,例...【详细内容】
2024-01-17  Search: Redis  点击:(58)  评论:(0)  加入收藏
Redis 实现多规则限流的思考与实践
市面上很多介绍redis如何实现限流的,但是大部分都有一个缺点,就是只能实现单一的限流,比如1分钟访问1次或者60分钟访问10次这种,但是如果想一个接口两种规则都需要满足呢,我们的...【详细内容】
2024-01-03  Search: Redis  点击:(109)  评论:(0)  加入收藏
▌简易百科推荐
Redis 不再 “开源”,未来采用 SSPLv1 和 RSALv2 许可证
Redis 官方于21日宣布修改开源协议 —— 未来所有版本都将使用 “源代码可用” 的许可证 (source-available licenses)。具体来说,Redis 将不再遵循 BSD 3-Clause...【详细内容】
2024-03-27  dbaplus社群    Tags:Redis   点击:(11)  评论:(0)  加入收藏
Redis“叛逃”开源,得罪了几乎所有人
内存数据库供应商Redis近日在开源界砸下了一块“巨石”。Redis即将转向双许可模式,并实施更为严格的许可条款。官方对此次变更的公告直截了当:从Redis 7.4版本开始,Redis将在Re...【详细内容】
2024-03-25    51CTO  Tags:Redis   点击:(9)  评论:(0)  加入收藏
如何使用 Redis 实现消息队列
Redis不仅是一个强大的内存数据存储系统,它还可以用作一个高效的消息队列。消息队列是应用程序间或应用程序内部进行异步通信的一种方式,它允许数据生产者将消息放入队列中,然...【详细内容】
2024-03-22  后端Q  微信公众号  Tags:Redis   点击:(17)  评论:(0)  加入收藏
Redis不再 “开源”
Redis 官方今日宣布修改开源协议 —— 未来所有版本都将使用 “源代码可用” 的许可证 (source-available licenses)。具体来说,Redis 将不再遵循 BSD 3-Clause 开...【详细内容】
2024-03-21  OSC开源社区    Tags:Redis   点击:(8)  评论:(0)  加入收藏
在Redis中如何实现分布式锁的防死锁机制?
在Redis中实现分布式锁是一个常见的需求,可以通过使用Redlock算法来防止死锁。Redlock算法是一种基于多个独立Redis实例的分布式锁实现方案,它通过协调多个Redis实例之间的锁...【详细内容】
2024-02-20  编程技术汇    Tags:Redis   点击:(47)  评论:(0)  加入收藏
手动撸一个 Redis 分布式锁
大家好呀,我是楼仔。今天第一天开工,收拾心情,又要开始好好学习,好好工作了。对于使用 Java 的小伙伴,其实我们完全不用手动撸一个分布式锁,直接使用 Redisson 就行。但是因为这些...【详细内容】
2024-02-19  楼仔  微信公众号  Tags:Redis   点击:(39)  评论:(0)  加入收藏
工作中Redis有哪些好用的运维工具
工作中使用 Redis 时,如果大家公司没有专业运维,可能开发人员就会面临这些运维的工作,包括 Redis 的运行状态监控,数据迁移,主从集群、切片集群的部署和运维等等。本文我就从这三...【详细内容】
2024-02-06  waynaqua    Tags:Redis   点击:(55)  评论:(0)  加入收藏
批量执行Redis命令的四种方式!
前言在我们的印象中Redis命令好像都是一个个单条进行执行的,如果有人问你如何批量执行Redis命令,你能回答的上吗,或者说能答出几种方式呢?最容易想到的是Redis的一些批量命令,例...【详细内容】
2024-01-17  小许code  微信公众号  Tags:Redis命令   点击:(58)  评论:(0)  加入收藏
Redis 实现多规则限流的思考与实践
市面上很多介绍redis如何实现限流的,但是大部分都有一个缺点,就是只能实现单一的限流,比如1分钟访问1次或者60分钟访问10次这种,但是如果想一个接口两种规则都需要满足呢,我们的...【详细内容】
2024-01-03  架构精进之路  微信公众号  Tags:Redis   点击:(109)  评论:(0)  加入收藏
一站式Redis解决方案
Redis是一个高效的内存数据库,它支持包括String、List、Set、SortedSet和Hash等数据类型的存储,在Redis中通常根据数据的key查询其value值,Redis没有模糊条件查询,在面对一些需...【详细内容】
2024-01-01  大雷家吃饭    Tags:Redis   点击:(66)  评论:(0)  加入收藏
站内最新
站内热门
站内头条