You need to enable JavaScript to run this app.
导航

使用托管 Prometheus 监控 MySQL

最近更新时间2024.03.01 14:07:17

首次发布时间2023.06.09 15:54:45

MySQL 是常用的关系型数据库,在 Kubernetes 中,可借助开源的 mysqld-exporter 来使用 托管 Prometheus(VMP) 监控 MySQL 的运行状态,本文为您介绍如何在 VKE 集群中部署 mysqld-exporter,并实现对 MySQL 的监控。

前提条件

配置步骤

步骤一:数据库授权

mysqld-exporter 是通过查询数据库中状态数据来对其进行监控,所以需要为对应的数据库实例进行授权。您可以执行以下命令,为用户进行授权。

CREATE USER 'exporter'@'localhost' IDENTIFIED BY 'XXXXXXXX' WITH MAX_USER_CONNECTIONS 3;
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';

说明

建议为该用户设置最大连接数限制,以避免因监控数据抓取对数据库带来影响。但并非所有版本的数据库中都可以生效,例如 MariaDB 10.1 版本不支持最大连接数设置。

步骤二:创建 MySQL 连接串保密字典

  1. 登录 容器服务控制台
  2. 单击左侧导航栏中的 集群
  3. 在集群列表页面,单击目标集群,进入集群管理页面。
  4. 在左侧导航栏中,选择 配置 > 保密字典,单击 使用 Yaml 创建,配置保密字典。
    apiVersion: v1
    kind: Secret
    metadata:
      name: mysql-secret-demo # 配置保密字典的名称
      namespace: volcano-metrics # 配置保密字典的命名空间
    type: Opaque
    stringData:
      datasource: "user:password@tcp(ip:port)/" # 配置 MySQL 实例的连接串信息,包括用户名、密码、地址和端口号
    

步骤三:部署 mysql-exporter

  1. 登录 容器服务控制台
  2. 单击左侧导航栏中的 集群
  3. 在集群列表页面,单击目标集群,进入集群管理页面。
  4. 在左侧菜单栏中选择 工作负载 > 无状态负载。 单击 使用 Yaml 创建 ,部署 mysql-exporter。
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: mysql-exporter # 配置 exporter 的名称
      namespace: volcano-metrics # 配置 exporter 的命名空间
      labels: 
        app-name: mysql-exporter # 配置 exporter 的标签
    spec: 
      replicas: 1
      selector:
        matchLabels:
          app-name: mysql-exporter # 根据业务需要调整成对应的名称,可以使用 MySQL 的实例信息
      template:
        metadata:
          labels:
            app-name: mysql-exporter # 根据业务需要调整成对应的名称,可以使用 MySQL 的实例信息
        spec:
          containers:
          - env:
            - name: DATA_SOURCE_NAME
              valueForm: 
                secretKeyRef:
                  name: mysql-secret-demo
                  key: datasource
            image: prom/mysqld-exporter:latest # 拉取 Docker Hub 中的 exporter 镜像
            imagePullPolicy: IfNotPresent
            name: mysql-exporter # 配置容器名称
            ports:
            - containerPort: 9104 # 配置容器端口
              name: metric-port # 配置容器端口名称
          dnsPolicy: ClusterFirst
          restartPolicy: Always
          terminationGracePeriodSeconds: 30
    

步骤四:配置服务发现

  1. 登录 容器服务控制台
  2. 单击左侧导航栏中的 集群
  3. 在集群列表页面,单击目标集群,进入集群管理页面。
  4. 在左侧菜单栏中选择 工作负载 > 对象浏览器。 单击 使用 Yaml 创建 ,通过 PodMonitor 配置采集规则。
    • 类型 下拉菜单中选择 自定义
    • Yaml 配置框内输入 Yaml 配置。
      apiVersion: monitoring.coreos.com/v1
      kind: PodMonitor
      metadata:
        name: mysql-exporter # 配置 PodMonitor 的名称
        namespace: volcano-metrics # 配置 PodMonitor 的命名空间
        labels: 
          volcengine.vmp: "true" # 配置 PodMonitor 的标签,允许被 Prometheus-agent 发现
      spec:
        podMetricsEndpoints:
        - interval: 30s
          port: metric-port # 填写容器端口名称
          path: /metrics # 填写容器指标的 Path 路径,不填默认为 /metrics
          relabelings: # 配置指标的 relabel。如没有该需求,可省略
          - action: replace
            sourceLabels:
            - instance
            regex: (.*)
            targetLabel: instance
            replacement: 'mysql-xxxxxx' # 配置为对应 mysql 实例的 ID 值
        namespaceSelector:
          matchNames: 
          - volcano-metrics # 配置为容器所在的命名空间
        selector: 
          matchLabels:
            app-name: mysql-exporter # 配置容器的 Label 值,以定位和选择目标 Pod
      
  5. 单击 确定,完成配置。

结果验证

  1. 执行以下命令,配置 Grafana 端口映射。
    kubectl port-forward service/grafana 3000:3000 -n volcano-metrics
    
  2. 在本地环境(Linux/Mac)中打开浏览器,在地址栏中输入 localhost:3000,进入 Grafana 登录界面,使用默认用户名admin密码admin登录。
    alt
  3. 创建 MySQL 大盘,即可查看 MySQL 的监控指标。

    说明

    mysql-exporter 的详细参数,请参见 mysqld-exporter