redis_exporter部署记录

redis_exporter官网链接
https://github.com/oliver006/redis_exporter

1 docker部署redis_exporter

docker run  -d --name redis_exporter_dev  -p 9121:9121 oliver006/redis_exporter:v1.45.0 --redis.addr redis://10.10.51.94 --redis.password "admin123456"
docker run  -d --name redis_exporter_test  -p 9122:9121 oliver006/redis_exporter:v1.45.0 --redis.addr redis://10.10.51.134 --redis.password "admin123456"
docker run  -d --name redis_exporter_uat  -p 9123:9121 oliver006/redis_exporter:v1.45.0 --redis.addr redis://10.10.51.134:6380 --redis.password "admin123456"
docker run  -d --name redis_exporter_prod  -p 9124:9121 oliver006/redis_exporter:v1.45.0 --redis.addr redis://10.10.51.136--redis.password "admin123456"

镜像存在docker hub上,如果无法正常连接,可以通过quay.io docker repo下载镜像
https://quay.io/repository/oliver006/redis_exporter?tab=tags&tag=latest
#使用docker-compose
  redis_exporter_dev:
    image: oliver006/redis_exporter:v1.45.0
    restart: always
    command:
      - --redis.addr=redis://10.10.51.94
      - --redis.password=admin123456
    networks:
      - prometheus-network
  redis_exporter_test:
    image: oliver006/redis_exporter:v1.45.0
    restart: always
    command:
      - --redis.addr=redis://10.10.51.134
      - --redis.password=admin123456
    networks:
      - prometheus-network
  redis_exporter_uat:
    image: oliver006/redis_exporter:v1.45.0
    restart: always
    command:
      - --redis.addr=redis://10.10.51.134:6380
      - --redis.password=admin123456
    networks:
      - prometheus-network
  redis_exporter_prod:
    image: oliver006/redis_exporter:v1.45.0
    restart: always
    command:
      - --redis.addr=redis://10.10.51.136
      - --redis.password=admin123456
    networks:
      - prometheus-network
networks:
  prometheus-network:

exporter配置参数如下
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2 exporter暴漏的指标

  • INFO命令输出的信息大部分会暴漏
  • 每个数据库的所有的key相关指标、过期key、key的平均TTL

3 Prometheus监控redis

docker-compose配置Prometheus

version: '3.2'
services:
  prometheus:
    image: prom/prometheus:v2.41.0
    restart: "always"
    user: "0:0"
    ports:
      - 9090:9090
    volumes:
      - "./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml"
      - "./prometheus/k3s.token:/etc/prometheus/k3s.token"
      - "./rules:/etc/prometheus/rules"
      - "./prometheus/data:/prometheus"
      - /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime:ro
    command:
      - '--web.read-timeout=5m' #请求连接最大等待时间,防止太多空连接占用资源
      - '--web.max-connections=512' #最大链接数
      - '--config.file=/etc/prometheus/prometheus.yml'       #   设置yml路径  跟上面挂载对应
      - '--storage.tsdb.path=/prometheus'                     #设置数据路径   跟上面挂载对应
      - '--storage.tsdb.retention=7d'
      - '--query.timeout=2m'
      - '--query.max-concurrency=20' #用户查询优化
      - --web.enable-lifecycle  #开启webapi
    networks:
      - prometheus-network
  #告警模块
  alertmanager:
    image: prom/alertmanager:v0.25.0
    restart: "always"
    user: '0:0'
    ports:
      - 9093:9093
      - 8001:8001
    volumes:
      - "./alert/alertmanager.yml:/etc/alertmanager/alertmanager.yml"
      - /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime:ro
    command:
      - '--cluster.peer=alertmanager:8001'
      - '--cluster.listen-address=0.0.0.0:8001'
      - '--config.file=/etc/alertmanager/alertmanager.yml'
    depends_on:
      - prometheus
    networks:
      - prometheus-network
  #web界面
  grafana:
    image: grafana/grafana:9.3.2
    restart: "always"
    user: '0:0'
    ports:
      - 3000:3000
    volumes:
      - "./grafana/grafana.ini:/etc/grafana/grafana.ini"              #配置文件自行拷贝出来
      - "./grafana/grafana-storage:/var/lib/grafana"
      - /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime:ro
    depends_on:
      - prometheus
    networks:
      - prometheus-network
  # 监控MySQL
  mysqld-exporter1:
    image: prom/mysqld-exporter:v0.15.0
    restart: always
    user: "0:0"
    volumes:
      - ./mysql/mysql-dev.cnf:/my.cnf
      - /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime:ro
    command: --config.my-cnf=/my.cnf
    networks:
      - prometheus-network
  #监控mongo
  mongod-exported-uat:
    image: bitnami/mongodb-exporter
    restart: always
    command:
      - "--mongodb.uri=mongodb://prometheus:prometheus@10.10.51.134:27017"
      - "--web.listen-address=:9104"
      - "--collect-all"
      - --compatible-mode
    volumes:
      - /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime:ro
    networks:
      - prometheus-network
  #监控redis
  redis_exporter_dev:
    image: oliver006/redis_exporter:v1.45.0
    restart: always
    command:
      - --redis.addr=redis://10.10.51.94
      - --redis.password=123456
    networks:
      - prometheus-network
  redis_exporter_test:
    image: oliver006/redis_exporter:v1.45.0
    restart: always
    command:
      - --redis.addr=redis://10.10.51.134
      - --redis.password=123456
    networks:
      - prometheus-network
  #企业微信告警
  wechat:
    image: guyongquan/webhook-adapter
    restart: always
    command: --adapter=/app/prometheusalert/wx.js=/wx=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=b86ca170-85bf-4f2f-994e-fae73c856947
    networks:
      - prometheus-network
networks:
  prometheus-network:

prometheus.yml

global:
  scrape_interval:     10s    # 多久 收集 一次数据
  evaluation_interval: 15s    # 多久 评估 一次规则
  scrape_timeout:      10s    # 每次 收集数据的 超时时间

# 收集数据 配置 列表
scrape_configs:

  - job_name: 'redis-dev'
    static_configs:
      - targets: [ 'redis_exporter_dev:9121' ]
        labels:
          env: dev
          instance: redis-dev
  - job_name: 'redis-test'
    static_configs:
      - targets: [ 'redis_exporter_test:9121' ]
        labels:
          env: test
          instance: redis-test
  - job_name: 'redis-uat'
    static_configs:
      - targets: [ 'redis_exporter_uat:9121' ]
        labels:
          env: uat
          instance: redis-uat
  - job_name: 'redis-prod'
    static_configs:
      - targets: [ 'redis_exporter_prod:9121' ]
        labels:
          env: prod
          instance: redis-prod

alerting:                         #Alertmanager相关的配置
  alertmanagers:
  - static_configs:
    - targets:
      - alertmanager:9093         #指定告警模块

rule_files:                      #告警规则文件, 可以使用通配符
  - "/etc/prometheus/rules/*.yml"

redis-rule.yml

groups:
- name: redisdown
  rules:
  - alert: RedisDown
    expr: redis_up == 0
    for: 1m
    labels:
      severity: Critical
    annotations:
      summary: "RedisDown instance {{ $labels.instance  }}"
      description: Redis instance is down on {{ $labels.instance }}\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}"
  - alert: Redis linked too many clients
    expr: redis_connected_clients / redis_config_maxclients * 100 > 80
    for: 1m
    labels:
      name: instance
      severity: Warning
    annotations:
      summary:  "Redis too many connections (> 80%) (instance {{ $labels.instance }})
      description: "More than 80% of Redis connections are in use on {{ $labels.instance }}\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}"

4 遇到的问题

当配置redis.addr时,如果连接的redis监听端口是6379,也即默认端口,如果配置成-redis.addr redis://10.10.51.94:6379会导致exporter无法连接上redis,可通过exporter的log查看,修改为-redis.addr redis://10.10.51.94可以连接成功。
该问题没有查清原因,通过在redis侧抓包看,exporter连接跟通过redis-cli连接发出的TCP SYN并没有不同,但前者的SYN被redis RST掉

在exporter所在主机连接redis的抓包
在这里插入图片描述
通过export连接redis,并配置成-redis.addr redis://10.10.51.94:6379时抓包
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值