天天看点

Zabbix5.0监控Redis

Zabbix5.0监控Redis

1.什么是Redis

Zabbix5.0监控Redis

​ Redis是一个开源的高性能NoSQL数据库,可称为远程字典服务。

  • 基于内存运行,性能高效
  • 支持分布式,理论上可以无限扩展
  • key-value存储系统
  • 使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API

1.1 基础概念普及

1.1.1 应用场景

​ 缓存系统(“热点”数据:高频读、低频写)、计数器、消息队列系统、排行榜、社交网络和实时系统。

1.1.2 数据类型

​ 和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。

1.1.3 操作命令

1.1.3.1 字符串类型string

它是一个二进制安全的字符串,不仅可以存储字符串,还能存储图片、视频等多种类型。

  • GET/MGET
  • SET/SETEX/MSET/MSETNX
  • INCR/DECR
  • GETSET
  • DEL

1.1.3.2 哈希类型hash

该类型就是key和value组的Hash表。

  • HGET/HMGET/HGETALL
  • HSET/HMSET/HSETNX
  • HEXISTS/HLEN
  • HKEYS/HDEL
  • HVALS

1.1.3.3 列表类型list

该类型是基于双链表实现,是按插入顺序排序的字符串集合。

  • LPUSH/LPUSHX/LPOP/RPUSH/RPUSHX/RPOP/LINSERT/LSET
  • LINDEX/LRANGE
  • LLEN/LTRIM

1.1.3.4 集合类型set

set类型和list类型的最大区别是:元素是唯一的且元素没有顺序,底层是基于哈希表不是双链表。

  • SADD/SPOP/SMOVE/SCARD
  • SINTER/SDIFF/SDIFFSTORE/SUNION

1.1.3.4 顺序集合类型zset

ZSet是一种有序集合类型,每个元素都会关联一个分数权值,通过权值来为集合中的成员进行从小到大的排序。

  • ZADD/ZPOP/ZMOVE/ZCARD/ZCOUNT
  • ZINTER/ZDIFF/ZDIFFSTORE/ZUNION
1.1.4 持久化机制

redis是一个内存数据库,数据保存在内存中,但是我们都知道内存的数据变化是很快的,也容易发生丢失。幸好Redis还为我们提供了持久化的机制,分别是RDB(Redis DataBase)和AOF(Append Only File)。

1.1.4.1 RDB 机制

RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘。也是默认的持久化方式,这种方式是就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb。

①、优势

(1)RDB文件紧凑,全量备份,非常适合用于进行备份和灾难恢复。

(2)生成RDB文件的时候,redis主进程会fork()一个子进程来处理所有保存工作,主进程不需要进行任何磁盘IO操作。

(3)RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快。

②、劣势

RDB快照是一次全量备份,存储的是内存数据的二进制序列化形式,存储上非常紧凑。当进行快照持久化时,会开启一个子进程专门负责快照持久化,子进程会拥有父进程的内存数据,父进程修改内存子进程不会反应出来,所以在快照持久化期间修改的数据不会被保存,可能丢失数据。

1.1.4.2 AOF 机制

全量备份总是耗时的,有时候我们提供一种更加高效的方式AOF,工作机制很简单,redis会将每一个收到的写命令都通过write函数追加到文件中。通俗的理解就是日志记录。

①、优势

(1)AOF可以更好的保护数据不丢失,一般AOF会每隔1秒执行一次fsync操作,最多丢失1秒钟的数据。

(2)AOF日志文件没有任何磁盘寻址的开销,写入性能非常高,文件不容易破损。

(3)AOF日志文件的命令通过非常可读的方式进行记录,这个特性非常适合做灾难性的误删除的紧急恢复。比如某人不小心用flushall命令清空了所有数据,只要这个时候后台rewrite还没有发生,那么就可以立即拷贝AOF文件,将最后一条flushall命令给删了,然后再将该AOF文件放回去,就可以通过恢复机制,自动恢复所有数据

②、劣势

(1)对于同一份数据来说,AOF日志文件通常比RDB数据快照文件更大。

(2)AOF开启后,支持的写QPS会比RDB支持的写QPS低,因为AOF一般会配置成每秒fsync一次日志文件,当然,每秒一次fsync,性能也还是很高的。

(3)AOF可能存在bug,出现过不能恢复一模一样的数据的情况。

1.2 常见的问题

1.2.1 击穿问题

​ 在Redis获取某一key时, 由于key不存在, 而必须向DB发起一次请求的行为, 称为“Redis击穿”。

Zabbix5.0监控Redis

引发击穿的原因:恶意访问不存在的key、Key过期

改善的方案:对某些高频访问的Key,设置合理的TTL或永不过期、标准化key的命名后可以拦截不规范的key

1.2.2 雪崩问题

​ Redis缓存层由于某种原因宕机后,所有的请求会涌向存储层,短时间内的高并发请求可能会导致存储层挂机,称之为“Redis雪崩”。

改善的方案:限流、使用Redis集群

2.如何监控Redis

2.1 使用zabbix5.0监控

zabbix5.0提供了一个redis的监控模板,专业和实用,我们选择这个自带的模板(Template DB Redis)进行监控redis就行,该模板提供了64个监控项和13个触发器,非常详细。

2.1.1 前置条件
  • 安装有Redis-server服务,可以运行redis-cli命令
  • 在Redis-server服务器上安装zabbix-agent2
2.1.2 配置Redis模板

使用zabbix5.0自带的模板监控Redis非常方便,三步搞定。

第一步,选择要监控的主机(该主机上部署有Redis服务),点击模板选项卡并选择。

Zabbix5.0监控Redis

第二步,选择主机群主Templates,再找到模板【Template DB Redis】点选择,然后点击更新,就绑定关联了。

Zabbix5.0监控Redis

第三步,查看最新数据,如果有数据,就说明可以正常监控Redis。

Zabbix5.0监控Redis
Zabbix5.0监控Redis
2.1.3 监控原理

该方案数据采集原理是通过客户端agent调用redis-cli采集的。

#通过执行以下命令info采集监控数据:
redis-cli  -h 166.8.50.* -p 端口号  -a 'password' info
#通过读取redis安装目录下的redis.conf文件内容
redis 127.0.0.1:6379> CONFIG GET *
           

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pJrOzMmm-1631701376129)(C:\Users\Test\Desktop\Zabbix5.0监控Redis.assets\图片1.png)]

默认采集地址是{$REDIS.CONN.URI} 6379端口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E9y01hig-1631701376130)(C:\Users\Test\Desktop\Zabbix5.0监控Redis.assets\图片2.png)]

从上面的提示可以看出,Template DB Redis的宏配置是默认Server端不设置密码的,如果Redis-server设置了密码,需要额外配置,否则会报如下错误:

Redis.ping[“{KaTex parse error:Expected ‘EOF’ , got ‘}’ at position 15: 
REDIS.CONN.URI}”,”{REDIS.AUTH}”]
           

添加下面的宏就可以解决上述问题

{$REDIS.AUTH}=<password>
           

2.2 模板监控指标介绍

1.3.1 性能指标 Performance
# redis-cli info
instantaneous_ops_per_sec:0 #平均每秒处理请求总数
instantaneous_input_bytes:0.01  #输入带宽(单位字节)
instantaneous_output_bytes:0.00 #输出带宽(单位字节)
total_commands_processed:642719 #Redis服务处理命令的总数(字段的值是递增的)
           
1.3.2 内存指标 Memory
# redis-cli info
used_memory:831391096        #由 Redis分配器分配的内存总量(以字节为单位)
used_memory_rss:888795136    #从操作系统的角度,返回 Redis 已分配的内存总量( top 输出一致)
used_memory_peak:833008000   #Redis 的内存消耗峰值(以字节为单位)
used_memory_lua:37888        #Lua 引擎所使用的内存大小(以字节为单位)
mem_fragmentation_ratio:1.07 #内存碎片比率
           
1.3.3 基本活动指标 Basic activity

包括Client连接数和key指标。

# redis-cli info
connected_clients:2  #已连接客户端的数量(不包括通过从属服务器连接的客户端)
connected_slaves:0   #通过从属服务器连接的客户端
blocked_clients:0    #由于BLPOP,BRPOP or BRPOP,LPUSH而阻塞的客户端
evicted_keys:0       #由于最大内存限制被移除的key的数量
expired_keys:0       #因为过期而被自动删除的数据库键数量
keyspace_hits:1      #查找数据库键成功的次数
keyspace_misses:0    #查找数据库键失败的次数
keyspace_hit_ratio   #keyspace_hits/(keyspace_hits+keyspace_misses)
rejected_connections:0 # redis连接个数达到maxclients限制,拒绝新连接的个数
total_connections_received:6 #新创建连接个数 
# CONFIG GET *
maxclients:4064      #最大可同时连接的客户端数量
           
1.3.4 持久性指标 Persistence

​ 持久化指标主要是体现RDB和AOF的工作状态。

# redis-cli info
rdb_changes_since_last_save:7358 #距离最近一次成功创建持久化文件之后,经过了多少秒
rdb_bgsave_in_progress:0 #一个标志值,记录了服务器是否正在创建 RDB 文件
rdb_last_save_time:1505285008 #最近一次成功创建 RDB 文件的 UNIX 时间戳
rdb_last_bgsave_status:ok #一个标志值,记录了最近一次创建 RDB 文件的结果是成功还是失败
rdb_last_bgsave_time_sec:10 #记录了最近一次创建 RDB 文件耗费的秒数
rdb_current_bgsave_time_sec:-1 #如果服务器正在创建 RDB 文件,那么这个值记录的就是当前的创建操作已经耗费的秒数
aof_enabled:1 #redis是否开启了aof
aof_rewrite_in_progress:0 #一个标志值,记录了服务器是否正在创建 AOF 文件
aof_rewrite_scheduled:0 #一个标志值,记录了在 RDB 文件创建完毕后,是否需要执行预约的 AOF 重写操作
aof_last_rewrite_time_sec:4 #最近一次创建 AOF 文件耗费的时长
aof_current_rewrite_time_sec:-1 #如果服务器正在创建 AOF文件,当前的创建操作已经耗费的秒数
aof_last_bgrewrite_status:ok #一个标志值,记录了最近一次创建 AOF 文件的结果是成功还是失败
aof_last_write_status:ok
           
2.3 zabbix监控触发器
Zabbix5.0监控Redis

继续阅读