# Ubuntu/Debian
sudo apt update
sudo apt install redis-server
# CentOS/RHEL
sudo yum install epel-release
sudo yum install redis
# 启动Redis
sudo systemctl start redis
sudo systemctl enable redis
下载官方Redis模板:
Zabbix Web界面导入:
配置 → 模板 → 导入 → 选择XML文件 → 导入
编辑Redis配置文件:
sudo vim /etc/redis/redis.conf
修改以下配置:
# 允许远程连接(如果是本地监控可跳过)
bind 0.0.0.0
# 设置密码(可选但推荐)
requirepass yourpassword
# 取消保护模式
protected-mode no
重启Redis:
sudo systemctl restart redis
创建Redis监控脚本目录:
sudo mkdir -p /etc/zabbix/scripts
sudo mkdir -p /etc/zabbix/zabbix_agentd.d
创建监控脚本:
sudo vim /etc/zabbix/scripts/redis_monitor.sh
内容如下:
#!/bin/bash
# Zabbix Redis监控脚本
REDIS_CMD="/usr/bin/redis-cli"
REDIS_HOST="127.0.0.1"
REDIS_PORT="6379"
REDIS_PASS="yourpassword" # 如果没有密码,删除这一行
# 获取Redis信息函数
get_redis_info() {
if [ -n "$REDIS_PASS" ]; then
$REDIS_CMD -h $REDIS_HOST -p $REDIS_PORT -a $REDIS_PASS info | grep "^$1:" | cut -d: -f2
else
$REDIS_CMD -h $REDIS_HOST -p $REDIS_PORT info | grep "^$1:" | cut -d: -f2
fi
}
case $1 in
ping)
if [ -n "$REDIS_PASS" ]; then
$REDIS_CMD -h $REDIS_HOST -p $REDIS_PORT -a $REDIS_PASS ping | grep -c PONG
else
$REDIS_CMD -h $REDIS_HOST -p $REDIS_PORT ping | grep -c PONG
fi
;;
connected_clients)
get_redis_info connected_clients
;;
used_memory)
get_redis_info used_memory
;;
used_memory_rss)
get_redis_info used_memory_rss
;;
total_connections_received)
get_redis_info total_connections_received
;;
total_commands_processed)
get_redis_info total_commands_processed
;;
keyspace_hits)
get_redis_info keyspace_hits
;;
keyspace_misses)
get_redis_info keyspace_misses
;;
uptime_in_seconds)
get_redis_info uptime_in_seconds
;;
*)
echo "Unknown parameter: $1"
exit 1
;;
esac
设置权限:
sudo chmod +x /etc/zabbix/scripts/redis_monitor.sh
sudo chown zabbix:zabbix /etc/zabbix/scripts/redis_monitor.sh
sudo vim /etc/zabbix/zabbix_agentd.d/redis.conf
内容如下:
# Redis监控配置
UserParameter=redis.status[*],/etc/zabbix/scripts/redis_monitor.sh $1
UserParameter=redis.ping,/etc/zabbix/scripts/redis_monitor.sh ping
UserParameter=redis.connected_clients,/etc/zabbix/scripts/redis_monitor.sh connected_clients
UserParameter=redis.used_memory,/etc/zabbix/scripts/redis_monitor.sh used_memory
UserParameter=redis.used_memory_rss,/etc/zabbix/scripts/redis_monitor.sh used_memory_rss
重启Zabbix Agent:
sudo systemctl restart zabbix-agent
# 测试连通性
sudo su - zabbix -s /bin/bash
zabbix_get -s 127.0.0.1 -k "redis.ping"
# 测试获取指标
zabbix_get -s 127.0.0.1 -k "redis.used_memory"
sudo vim /etc/zabbix/scripts/redis_stats.sh
#!/bin/bash
# Redis详细监控脚本
HOST="127.0.0.1"
PORT="6379"
PASSWORD="yourpassword" # 如果没有则留空
REDIS_CLI=$(which redis-cli)
if [ -z "$REDIS_CLI" ]; then
echo "redis-cli not found"
exit 1
fi
# 构建认证参数
AUTH_PARAM=""
if [ -n "$PASSWORD" ]; then
AUTH_PARAM="-a $PASSWORD"
fi
# 获取指标
case $1 in
"discovery")
# 自动发现Redis键空间(数据库)
databases=$($REDIS_CLI $AUTH_PARAM -h $HOST -p $PORT info keyspace | grep "^db")
echo '{"data":['
first=1
echo "$databases" | while read line; do
db=$(echo $line | cut -d: -f1)
if [ $first -eq 1 ]; then
first=0
else
echo ","
fi
echo -n '{"{#DBNAME}":"'$db'"}'
done
echo ']}'
;;
"info")
# 获取特定指标
metric=$2
result=$($REDIS_CLI $AUTH_PARAM -h $HOST -p $PORT info | grep "^$metric:" | cut -d: -f2)
echo $result
;;
"slowlog")
# 获取慢查询数量
count=$($REDIS_CLI $AUTH_PARAM -h $HOST -p $PORT slowlog len)
echo $count
;;
"db_stats")
# 获取数据库统计
db=$2
stats=$($REDIS_CLI $AUTH_PARAM -h $HOST -p $PORT info keyspace | grep "^$db:")
echo $stats
;;
*)
echo "Usage: $0 {discovery|info metric|slowlog|db_stats db}"
exit 1
;;
esac
sudo vim /etc/zabbix/zabbix_agentd.d/userparameter_redis.conf
# Redis自动发现
UserParameter=redis.discovery,/etc/zabbix/scripts/redis_stats.sh discovery
# Redis基本信息监控
UserParameter=redis.info[*],/etc/zabbix/scripts/redis_stats.sh info $1
UserParameter=redis.ping,/etc/zabbix/scripts/redis_stats.sh info ping 2>/dev/null || echo 0
UserParameter=redis.slowlog.count,/etc/zabbix/scripts/redis_stats.sh slowlog
# 数据库特定监控
UserParameter=redis.db.keys[*],/etc/zabbix/scripts/redis_stats.sh info $1 | grep -o "keys=[0-9]*" | cut -d= -f2
UserParameter=redis.db.expires[*],/etc/zabbix/scripts/redis_stats.sh info $1 | grep -o "expires=[0-9]*" | cut -d= -f2
Template DB Redis(如果已导入)
或手动创建监控项
步骤3:创建监控项(如果没有模板)
创建基础监控项示例:
| 名称 | 键值 | 信息类型 | 单位 |
|---|---|---|---|
| Redis Ping | redis.ping | 数字(无符号) | |
| Redis连接数 | redis.info[connected_clients] | 数字(无符号) | |
| Redis内存使用 | redis.info[used_memory] | 数字(无符号) | B |
| Redis命中率 | redis.info[keyspace_hits] | 数字(无符号) | |
| Redis QPS | redis.info[total_commands_processed] | 数字(无符号) | ops |
创建重要告警触发器:
Redis服务宕机
名称:Redis服务不可用
表达式:{Redis-Server:redis.ping.max(#3)}=0
严重性:灾难
内存使用过高
名称:Redis内存使用超过阈值
表达式:{Redis-Server:redis.info[used_memory].last()}>1000000000 # 1GB
严重性:严重
连接数过多
名称:Redis连接数过多
表达式:{Redis-Server:redis.info[connected_clients].last()}>1000
严重性:警告
步骤5:创建图形
内存使用图
性能图
连接图
内存相关
连接相关
性能相关
持久化相关
副本相关(如果有集群)
权限问题
# 确保zabbix用户有权限执行脚本
sudo chmod 755 /etc/zabbix/scripts/*
sudo chown zabbix:zabbix /etc/zabbix/scripts/*
连接测试
# 测试Redis连接
redis-cli -h 127.0.0.1 -p 6379 ping
# 测试Agent获取数据
zabbix_get -s 127.0.0.1 -k "redis.info[used_memory]"
查看日志
# Zabbix Agent日志
tail -f /var/log/zabbix/zabbix_agentd.log
# Redis日志
tail -f /var/log/redis/redis-server.log
调整监控频率
设置历史数据保留
配置告警升级
使用LLD自动发现
这样你就完成了Zabbix 5.0监控Redis 7的全过程。系统会持续监控Redis的健康状态,并在出现问题时及时告警。