Zabbix 3.3:Zabbix 监控 Redis

3.3:Zabbix 监控 Redis

目的是熟悉掌握Redis运行过程中常被关注的参数指标,以及如何编写脚本自定义监控项,通过zabbix获取到监控数据。

这里只涉及Redis单节点的状态信息,关于哨兵或集群的状态信息,举一反三即可。

3.3.1:准备Redis 主机

还是利用node111(192.168.1.111)作为被监控Redis主机。

安装Redis:

root@node111:~# apt install redis

3.3.2:Redis 状态监测脚本

3.3.2.1:INFO 信息

对单节点Redis的监控,主要是通过提取INFO信息中的关键数据来进行的。

和获取Memcached的stats信息一样,通过echo传递INFO和quit指令,在不交互的情况下获取到完整的基础数据。

INFO的完整信息:

root@node111:~# echo -e "INFO\nquit" | redis-cli
# Server
redis_version:4.0.9
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:9435c3c2879311f3
redis_mode:standalone
os:Linux 4.15.0-55-generic x86_64
arch_bits:64
multiplexing_api:epoll
atomicvar_api:atomic-builtin
gcc_version:7.4.0
process_id:2471
run_id:c57881bf0f3d9c067302d667d087ab18d1c6371e
tcp_port:6379
uptime_in_seconds:195
uptime_in_days:0
hz:10
lru_clock:7836768
executable:/usr/bin/redis-server
config_file:/etc/redis/redis.conf

# Clients
connected_clients:1
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0

# Memory
used_memory:841288
used_memory_human:821.57K
used_memory_rss:3858432
used_memory_rss_human:3.68M
used_memory_peak:841288
used_memory_peak_human:821.57K
used_memory_peak_perc:100.00%
used_memory_overhead:832134
used_memory_startup:782504
used_memory_dataset:9154
used_memory_dataset_perc:15.57%
total_system_memory:1008709632
total_system_memory_human:961.98M
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:4.59
mem_allocator:jemalloc-3.6.0
active_defrag_running:0
lazyfree_pending_objects:0

# Persistence
loading:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1618449309
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:-1
rdb_current_bgsave_time_sec:-1
rdb_last_cow_size:0
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
aof_last_cow_size:0

# Stats
total_connections_received:4
total_commands_processed:7
instantaneous_ops_per_sec:0
total_net_input_bytes:124
total_net_output_bytes:48854
instantaneous_input_kbps:0.00
instantaneous_output_kbps:0.00
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:0
expired_stale_perc:0.00
expired_time_cap_reached_count:0
evicted_keys:0
keyspace_hits:0
keyspace_misses:0
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:0
migrate_cached_sockets:0
slave_expires_tracked_keys:0
active_defrag_hits:0
active_defrag_misses:0
active_defrag_key_hits:0
active_defrag_key_misses:0

# Replication
role:master
connected_slaves:0
master_replid:aef48344786aace7ba6fdea2acbb00563b47ff80
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

# CPU
used_cpu_sys:0.23
used_cpu_user:0.16
used_cpu_sys_children:0.00
used_cpu_user_children:0.00

# Cluster
cluster_enabled:0

# Keyspace

对于单节点的Redis,主要关注以下几个方面。

3.3.2.1.1:客户端连接数的关注指标
  • connected_clients:已连接的客户端的数量;
  • blocked_clients:阻塞中的客户端的数量;
    是等待中的连接,一般是在等待取列表中的数据时引起的(LPOP、RPOP)。
  • rejected_connections:被拒绝的连接数量;
    一般为0,这是理想状态;如果出现被拒绝连接,说明当前需要的连接已经超过了redis设置的最大连接数,需要考虑优化,或者考虑这么多的连接数是否正常。
3.3.2.1.2:内存关注指标
  • used_memory:Redis实际使用的内存量;

  • used_memory_rss:系统已分配给Redis的内存量;

  • used_memory_peak:内存消耗峰值;
    会给Redis设置一个内存最大值maxmemory,如果内存使用超过maxmemory,会发生内存交换导致性能收到影响,甚至有可能被系统kill掉,所以监控内存峰值是为了时刻关注峰值和maxmory是否有足够的缓冲区间,如果峰值接近maxmeory,就要考虑调整内存了。

  • mem_fragmentation_ratio:内存碎片率,mem_fragmentation_ratio = used_memory_rss / used_memory。
    当mem_fragmentation_ratio>1,说明分配的内存大于实际使用的内存,Redis没有将多余内存返回给操作系统;值越大,碎片化越严重,这时就需要考虑重启Redis,或者开启内存碎片整理来回收内存。
    当mem_fragmentation_ratio<1,说明分配的内存小于实际使用的内存,即发生了内存交换(swap)。

    Redis4.0后有了内存碎片整理的功能(默认关闭,当内存碎片化严重时可以通过CONFIG SET activedefrag yes热开启),这个功能可以压缩内存空间,从而回收内存。如果没有内存碎片化严重的问题,就不需要开启此功能。

3.3.2.1.3:缓存关注指标
  • keyspace_hits:缓存命中次数;

  • keyspace_misses:缓存未命中次数;

    实际中都是使用keyspace_hits / (keyspace_hits+keyspace_misses)来求得缓存命中率,继而判断缓存方法是否恰当,当命中率较低时,就要考虑调整缓存方法了。
    本次实验不搞这么复杂了,只取出命中次数和未命中次数,达到监控实验的效果即可。

  • instantaneous_ops_per_sec:实时的每秒操作次数,也就是当前秒中缓存的操作次数。
    与具体业务量相关,随业务量的趋势而变化,不发生明显异常即可。

3.3.2.1.4:持久化关注指标
  • rdb_last_bgsave_status:最后一次rdb的bgsave执行状态,正常为ok。
  • aof_last_bgrewrite_status:最后一次aof的bgrewrite执行状态,正常为ok。
  • latest_fork_usec:最近的fork操作导致Redis进程阻塞的时间,单位是μs。
    当Redis进行数据持久化时,会fork一个子进程,这是一个完全阻塞的过程,通过监控阻塞时间,来判断是否会由于阻塞时间过长而影响Redis业务的情况发生。
3.3.2.2:编写脚本

脚本如下:

上述指标中,除了rdb_last_bgsave_status和aof_last_bgrewrite_status外,其余指标都是数字类型的,所以本次只获取数字类型的指标,这两个指标可以在脚本中额外添加条件判断,比如ok为1,其余为0,这样来进行监控,这里就不涉及了,只将其作为文本信息进行监控输出。

因为需要精确匹配指标名称,所以grep过滤的${Info_Name}后加了 :。比如过滤used_memory_peak时,如果过滤条件后不加:,就会把used_memory_peak_human和used_memory_peak_perc都过滤出来,造成结果显示错误。

#!/bin/bash
# Description: Reids单节点状态监测脚本
# Author: yqc

# Variables set
Redis_Addr=127.0.0.1
Reids_Port=6379
Info_Name=$1

# Define function "Redis_Info"
Redis_Info (){
	Info_Num=$(echo -e "INFO\nquit" | redis-cli -h ${Redis_Addr} -p ${Reids_Port} | grep "${Info_Name}:" | cut -d':' -f2)
	echo ${Info_Num}
}

# Use function "Redis_Info"
Redis_Info $1

测试脚本:

root@node111:~# bash Redis_Info.sh used_memory_peak
863656
root@node111:~# bash Redis_Info.sh used_memory
840264

3.3.3:Zabbix Agent 添加 UserParameter

3.3.3.1:添加 UserParameter

拷贝脚本并添加执行权限:

root@node111:~# cp /root/Redis_Info.sh /etc/zabbix/zabbix_agentd.d/
root@node111:~# chmod +x /etc/zabbix/zabbix_agentd.d/Redis_Info.sh

单独添加Redis状态监测的配置文件,配置UserParameter:

root@node111:~# vim /etc/zabbix/zabbix_agentd.d/Redis_Info.conf
UserParameter=redis_info[*],/etc/zabbix/zabbix_agentd.d/Redis_Info.sh "$1"

重启zabbix-agent:

root@node111:~# systemctl restart zabbix-agent
3.3.3.2:Zabbix Server 测试手动获取监控数据
root@zabbix-server:~# zabbix_get -s 192.168.1.111 -p 10050 -k "redis_info["used_memory"]"
840264
root@zabbix-server:~# zabbix_get -s 192.168.1.111 -p 10050 -k "redis_info["used_memory_peak"]"
863656
root@zabbix-server:~# zabbix_get -s 192.168.1.111 -p 10050 -k "redis_info["mem_fragmentation_ratio"]"  
4.59

3.3.4:Zabbix Server 制作 Redis 状态监测模板

3.3.4.1:创建模板

在这里插入图片描述

3.3.4.2:创建应用集

在这里插入图片描述

3.3.4.3:创建监控项

connected_clients监控项:

在这里插入图片描述

依次克隆更改,添加其余监控项,注意不同指标的单位和信息类型可能是不相同的。
内存相关的指标不用设置单位,因为zabbix会自动转化为易读类型。

在这里插入图片描述

3.3.5:Zabbix Server 为主机关联模板

3.3.5.1:关联模板

在这里插入图片描述

3.3.5.2:验证监控数据

最新数据:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值