Prometheus 监控 Redis 应用

使用Prometheus监控Redis,推荐使用官方插件:
https://github.com/oliver006/redis_exporter这个exporter。 目前我们主要使用的是redis的主从复制搭配Sentinel实现的高可用方案。
部署方式:
将exporter部署在虚拟机上解压后执行:

redis_exporter -web.listen-address=:9121 -redis.addr redis://xxxx:26379 -redis.password password

redis_exporter提供了一个Grafana Dashboard画图 Grafana Dashboard

prometheus server配置:

global:
  scrape_interval: 10s
  scrape_timeout: 10s
  evaluation_interval: 1m
alerting:
  alertmanagers:
  - scheme: http
    static_configs:
    - targets:
      - "xxxx:9093"
rule_files:
  - /usr/local/prometheus/rules/*.rules
scrape_configs:
- job_name: 'file-ds'
  file_sd_configs:
  - refresh_interval: 1m
    files:
    - ./conf.d/targets*.json
- job_name: 'redis'
  file_sd_configs:
  - refresh_interval: 1m
    files:
    - ./conf.d/redis*.json
 [xxx@prometheus01 prometheus]# cat  conf.d/redis-discovery.json
[

{
"targets": ["xxxx:9121"],
"labels": {
"instance": "preproduct-redis-xxx:9121"
}
}
]

添加报警规则:

[xxx@prometheus01 prometheus]# cat  /usr/local/prometheus/rules/redis_alert.rules
groups:
- name: RedisStatsAlert
  rules:
  - alert: Redis is down
    expr: redis_up == 0
    for: 1m
    labels:
      severity: critical
    annotations:
      summary: "Instance {{ $labels.instance }} Redis is down"
      description: "Redis database is down. This requires immediate action!"
#  - alert: 最近一次创建 RDB 文件,操作失败                       
#    expr: redis_rdb_last_bgsave_duration_sec == 0
#    for: 1m
#    labels:
#      severity: warning
#    annotations:
#      summary: " Instance {{ $labels.instance }} rdb_last_bgsave_status  "
#      description: "最近一次创建 RDB 文件的结果是失败"
  - alert: master link status(复制连接当前的状态)                                     
    expr: redis_master_link_up == 0
    for: 1m
    labels:
      severity: warning
    annotations:
      summary: "Instance {{ $labels.instance }} 复制连接当前断开"
      description: "redis_master_link状态是0 关闭状态"
#  - alert: 最近一次创建 AOF 文件失败
#    expr: redis_aof_last_rewrite_duration_sec == 0
#    for: 1m
#    labels:
#      severity: warning
#    annotations:
#      summary: "Instance {{ $labels.instance }} redis aof last rewrite duration sec"
#      description: "最近一次创建 AOF 文件失败"
### 使用 Prometheus 监控 Redis 日志的方法 Prometheus 是一种时间序列数据库,主要用于监控和报警,但它本身并不直接支持日志采集功能。要通过 Prometheus 实现对 Redis 的日志数据监控,通常需要借助其他工具来完成这一目标。 #### 方法概述 由于 Prometheus 不具备原生的日志收集能力,可以采用以下两种方法之一: 1. **使用 Log Exporter 将日志转换为指标** 可以利用专门的日志导出器(log exporter),例如 `logExporter` 或者自定义脚本,将 Redis 的日志解析并转化为 Prometheus 能够识别的时间序列指标[^1]。 2. **结合 Loki 和 Grafana 进行日志管理** 如果希望更高效地处理日志数据,则可以选择 Loki(由 Grafana Labs 提供的一种日志聚合解决方案)。Loki 支持与 Prometheus 类似的查询方式,并可以通过 Grafana 展示日志数据[^4]。 --- #### 方法一:使用 logExporter 解析 Redis 日志 ##### 安装与配置 logExporter - 首先下载适合操作系统的版本的 `logExporter` 工具。 - 编写一个简单的正则表达式规则用于匹配 Redis 日志中的重要事件(如错误、警告等)。 - 配置文件样例如下: ```yaml logs: - path: "/var/log/redis.log" labels: job: "redis-log" format: regex: "(?P<level>[A-Z]+): (?P<message>.*)" ``` ##### 整合到 Prometheus- 修改 Prometheus 的配置文件 (`prometheus.yml`) 来添加一个新的 scrape_job 项指向该 exporter 所暴露的服务地址。 ```yaml scrape_configs: - job_name: 'redis_log' static_configs: - targets: ['localhost:9103'] # 假设 logExporter 默认监听此端口 ``` - 测试配置有效性并通过命令重新加载 Prometheus 配置以应用更改[^4]: ```bash curl -X POST http://localhost:9090/-/reload ``` --- #### 方法二:集成 Loki 处理 Redis 日志 如果项目规模较大或者未来可能扩展至更多服务的日志需求,推荐考虑引入 Loki 架构作为长期方案。 ##### 步骤说明 1. **部署 Loki** - 使用 Docker 方便快速搭建环境。 ```dockerfile docker run -d --name=loki -p 3100:3100 grafana/loki:latest ``` 2. **设置 Fluent Bit 或 Promtail 发送日志给 Loki** - 对于 Redis 日志路径 `/var/log/redis.log` ,创建对应的输入源描述符。 3. **可视化展示** - 在已有的 Grafana 上新增数据源连接到刚启动好的 Loki 实例。 - 创建面板查询语句类似于 `{job="redis", level=~"error|warn"}` 显示特定类型的记录条目[^3]. --- 尽管以上介绍了两种主要途径解决当前问题,实际选型还需依据团队技术栈现状以及长远规划决定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值