使用阿里云Prometheus监控抓取Redis数据,并借助Prometheus Grafana大盘来展示Redis数据,即可实现通过Prometheus监控Redis的目的。

背景信息

本教程的操作流程如图所示。

How It Works

步骤一:通过外部应用抓取Redis数据

将redis-exporter镜像部署至容器服务K8s集群,以便抓取Redis数据。

  1. 登录容器服务管理控制台
  2. 在左侧导航栏选择集群,在集群列表页面上的目标集群右侧操作列单击应用管理
    K8s Cluster Console Button
  3. 在左侧导航栏选择工作负载 > 无状态
  4. 无状态页面右上角,单击使用模板创建
  5. 创建页面,选择示例模板自定义,并在文本框中填写以下内容,然后单击创建,将redis-exporter应用部署至容器服务K8s集群中。
    说明 请将<地址><密码>替换为Redis的对应值。您也可以使用ARMS提供的示例值体验:
    • Redis地址:redis://r-bp167pgqkqh7h25coypd.redis.rds.aliyuncs.com:6379
    • Redis密码:Arms1234
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: redis-exporter
    spec:
      replicas: 1
      template:
        metadata:
          labels:
            app: redis-exporter
        spec:
          containers:
          - name: redis-exporter
            imagePullPolicy: Always
            env:
            - name: REDIS_ADDR
              value: "<地址>"
            - name: REDIS_PASSWORD
              value: "<密码>"
            - name: REDIS_EXPORTER_DEBUG
              value: "1"
            image: oliver006/redis_exporter
            ports:
            - containerPort: 9121
              name: redis-exporter
  6. 在左侧导航栏选择服务与路由 > 服务
  7. 服务页面右上角,单击使用YAML创建资源
  8. 创建页面,选择示例模板自定义,并在文本框中填写以下内容,然后单击创建
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: redis-exporter
      name: redis-exporter
    spec:
      ports:
      - name: redis-exporter
        port: 9121
        protocol: TCP
        targetPort: 9121
      type: NodePort
      selector:
        app: redis-exporter

步骤二:配置Prometheus监控以接收Redis数据

  1. 登录容器服务管理控制台
  2. 为目标容器服务K8s集群开启阿里云Prometheus监控。具体操作,请参见开始使用Prometheus监控
  3. 登录Prometheus控制台
  4. Prometheus监控页面左上角选择容器服务K8s集群所在的地域,并在目标集群右侧的操作列单击设置
  5. 设置页面单击服务发现页签,在服务发现页签上单击添加ServiceMonitor,在添加ServiceMonitor对话框中填写以下内容,然后单击确定
    apiVersion: monitoring.coreos.com/v1
    kind: ServiceMonitor
    metadata:
      # 填写一个唯一名称
      name: redis-exporter
      # 填写目标命名空间
      namespace: default
    spec:
      endpoints:
      - interval: 30s
        # Redis Grafana模版ID为763
        # 填写service.yaml中prometheus exporter对应的Port的Name字段的值
        port: redis-exporter
        # 填写Prometheus Exporter代码中暴露的地址
        path: /metrics
      namespaceSelector:
        any: true
        # Demo的命名空间
        matchLabels:
          # 填写service.yaml的Label字段以定位目标service.yaml
          app: redis-exporter

步骤三:通过Grafana大盘展示Redis数据

最后需要在Prometheus控制台导入Grafana大盘模板并指定Prometheus数据源所在的容器服务K8s集群。

  1. 打开Prometheus Grafana大盘概览页
  2. 在左侧导航栏选择+ > Import
  3. Import页面的Import via grafna.com文本框,输入763,然后单击Load
    Import Grafana Dashboard
  4. Import页面输入以下信息,然后单击Import
    Import Grafana Dashboard with Options
    1. Name文本框中输入自定义的大盘名称。
    2. Folder下拉框中选择您的阿里云容器服务K8s集群。
    3. prom下拉框中选择您的阿里云容器服务K8s集群。
    配置完毕后的Prometheus Grafana Redis大盘如图所示。ARMS Prometheus Grafana Redis

步骤四:创建Prometheus监控报警

  1. 登录Prometheus控制台
  2. 在顶部菜单栏选择目标地域,然后单击目标K8s集群名称。
  3. 在左侧导航栏中选择报警配置,然后在右上角单击创建报警
  4. 创建报警面板输入以下信息,然后单击确定
    Prometheus-Create alarm
    1. 可选:告警模板下拉列表,选择模板。
    2. 填写规则名称,例如:网络接收压力报警。
    3. 填写告警表达式,表达式需要使用PromQL语句。例如:(sum(rate(kube_state_metrics_list_total{job="kube-state-metrics",result="error"}[5m])) / sum(rate(kube_state_metrics_list_total{job="kube-state-metrics"}[5m]))) > 0.01
      注意 PromQL语句中包含的$符号会导致报错,您需要删除包含$符号的语句中=左右两边的参数及=。例如:将sum (rate (container_network_receive_bytes_total{instance=~"^$HostIp.*"}[1m]))修改为sum (rate (container_network_receive_bytes_total[1m]))
    4. 填写持续时间,例如1分钟。
    5. 填写告警消息
    6. 可选:高级配置标签区域,单击创建标签可以设置报警标签,设置的标签可用作分派规则的选项。
    7. 可选:高级配置注释区域,单击创建注释,设置message,设置 {{变量名}}告警信息。设置完成后的格式为:message:{{变量名}}告警信息,例如:message:{{$labels.pod_name}}重启。

      您可以自定义变量名,也可以选择已有的标签作为变量名。已有的标签包括:

      • 报警规则表达式指标中携带的标签。
      • 通过报警规则创建的标签,请参见创建报警
      • ARMS系统自带的默认标签,默认标签说明如下。
        标签 说明
        alertname 告警名称,格式为:告警名称_集群名称。
        _aliyun_arms_alert_level 告警等级。
        _aliyun_arms_alert_type 告警类型。
        _aliyun_arms_alert_rule_id 告警规则对应的ID。
        _aliyun_arms_region_id 地域ID。
        _aliyun_arms_userid 用户ID。
        _aliyun_arms_involvedObject_type 关联对象子类型,如ManagedKubernetes,ServerlessKubernetes。
        _aliyun_arms_involvedObject_kind 关联对象分类,如app,cluster。
        _aliyun_arms_involvedObject_id 关联对象ID。
        _aliyun_arms_involvedObject_name 关联对象名称。

后续步骤

Prometheus Grafana Redis大盘配置完毕后,您可以查看Prometheus监控指标和进一步自定义大盘,详见相关文档。