欢迎光临石四片叶子网
详情描述

一、准备工作

1. 环境要求

  • Zabbix Server 5.0+
  • Redis 7.x
  • Zabbix Agent 5.0+

2. 安装Redis(如未安装)

# 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

二、方法一:使用Zabbix官方模板

1. 导入模板

下载官方Redis模板:

  • 访问 Zabbix官网
  • 搜索 "Redis" 或直接下载模板

Zabbix Web界面导入:

配置 → 模板 → 导入 → 选择XML文件 → 导入

2. 配置Redis允许监控

编辑Redis配置文件:

sudo vim /etc/redis/redis.conf

修改以下配置:

# 允许远程连接(如果是本地监控可跳过)
bind 0.0.0.0

# 设置密码(可选但推荐)
requirepass yourpassword

# 取消保护模式
protected-mode no

重启Redis:

sudo systemctl restart redis

3. 配置Zabbix Agent

创建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

4. 创建Zabbix Agent配置文件

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

5. 测试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"

三、方法二:使用自定义监控项(推荐)

1. 创建更完善的监控脚本

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

2. 配置Zabbix Agent

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

3. 在Zabbix Web界面配置

步骤1:创建主机 进入 配置 → 主机 → 创建主机 填写:
  • 主机名称:Redis-Server
  • 可见名称:Redis Server
  • 群组:Linux servers 或新建 Redis servers
  • Agent接口:添加Redis服务器的IP和端口10050
步骤2:链接模板 在主机配置中找到 模板 标签 链接模板:选择 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
步骤4:创建触发器

创建重要告警触发器:

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:创建图形

内存使用图

  • 添加:used_memory, used_memory_rss, used_memory_peak

性能图

  • 添加:total_commands_processed, keyspace_hits, keyspace_misses

连接图

  • 添加:connected_clients, blocked_clients

四、监控指标说明

关键性能指标:

内存相关

  • used_memory:已使用内存
  • used_memory_rss:系统分配内存
  • mem_fragmentation_ratio:内存碎片率

连接相关

  • connected_clients:客户端连接数
  • rejected_connections:拒绝连接数

性能相关

  • instantaneous_ops_per_sec:每秒操作数
  • total_commands_processed:总命令处理数

持久化相关

  • rdb_last_save_time:上次RDB保存时间
  • aof_current_size:AOF文件大小

副本相关(如果有集群)

  • master_link_status:主从连接状态
  • slave_repl_offset:复制偏移量

五、故障排查

常见问题及解决:

权限问题

# 确保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

六、优化建议

调整监控频率

  • 关键指标:30秒
  • 次要指标:1-5分钟

设置历史数据保留

  • 详细数据:7天
  • 趋势数据:365天

配置告警升级

  • 一级告警:邮件通知
  • 二级告警:短信通知
  • 三级告警:电话通知

使用LLD自动发现

  • 自动发现Redis数据库
  • 动态监控每个数据库的键数量

这样你就完成了Zabbix 5.0监控Redis 7的全过程。系统会持续监控Redis的健康状态,并在出现问题时及时告警。

相关帖子
公积金账户里的钱,在跨省离职后是否可以全额提取,需要哪些材料?
公积金账户里的钱,在跨省离职后是否可以全额提取,需要哪些材料?
三明市车辆大本抵押贷款-车子抵押贷款办理,附近个人贷款
三明市车辆大本抵押贷款-车子抵押贷款办理,附近个人贷款
三明市公积金银行信用贷款代办公司#房屋抵押贷款公司,办理小额信用贷款
三明市公积金银行信用贷款代办公司#房屋抵押贷款公司,办理小额信用贷款
三明市房产抵押贷款银行办理-有房本就能贷,为您解决资金难题
三明市房产抵押贷款银行办理-有房本就能贷,为您解决资金难题
鸟喙的演化奇迹:从达尔文雀看自然选择如何塑造特定工具?
鸟喙的演化奇迹:从达尔文雀看自然选择如何塑造特定工具?
赣州市房产证银行抵押贷款&房屋抵押贷款代办,个体户贷款
赣州市房产证银行抵押贷款&房屋抵押贷款代办,个体户贷款
适合就业困难人员的公益性岗位有哪些,申请条件和流程具体是怎样的?
适合就业困难人员的公益性岗位有哪些,申请条件和流程具体是怎样的?
济源市专业网站开发制作%做网站,高端网站开发设计
济源市专业网站开发制作%做网站,高端网站开发设计
上饶市按揭车借款@房子抵押贷款条件,大额贷款
上饶市按揭车借款@房子抵押贷款条件,大额贷款
2026年医保改革后,家庭共济的资金可以用于支付哪些具体的项目?
2026年医保改革后,家庭共济的资金可以用于支付哪些具体的项目?
潍坊市应急银行信用贷款&车贷,门面抵押贷款
潍坊市应急银行信用贷款&车贷,门面抵押贷款
2026年,抗疫医护人员申请工伤认定的具体流程和步骤是怎样的?
2026年,抗疫医护人员申请工伤认定的具体流程和步骤是怎样的?
佛山市办理垫资过桥#红本抵押贷款,办理大额银行信用贷款
佛山市办理垫资过桥#红本抵押贷款,办理大额银行信用贷款
宁海县办理大额银行贷款&汽车借款押绿本,商铺抵押贷款
宁海县办理大额银行贷款&汽车借款押绿本,商铺抵押贷款
安阳市汽车借款不押车@房屋银行抵押贷款,正规贷款公司
安阳市汽车借款不押车@房屋银行抵押贷款,正规贷款公司
福州市专业办理房抵贷&房屋抵押贷款中介代办,附近信用贷款办理
福州市专业办理房抵贷&房屋抵押贷款中介代办,附近信用贷款办理
暴雨蓝色预警和黄色预警对日常生活与出行的影响具体有哪些区别?
暴雨蓝色预警和黄色预警对日常生活与出行的影响具体有哪些区别?
长春市厕所管道疏通|清理沉淀池,24小时服务满意付款
长春市厕所管道疏通|清理沉淀池,24小时服务满意付款
职场中,基于年龄的“隐性歧视”通常通过哪些细微的方式表现出来?
职场中,基于年龄的“隐性歧视”通常通过哪些细微的方式表现出来?
为特殊形式的个人愿望清单办理公证,可能会遇到哪些常见的理解误区或困难?
为特殊形式的个人愿望清单办理公证,可能会遇到哪些常见的理解误区或困难?