• 官方mysqld_exporter支持抓取多MySQL实例监控指标


    目前官方代码仓库已经支持了 1 个 mysqld_exporter 监控多个 mysql 实例(1:n),详细的可以去看官方的代码仓库,但是目前尚未发现官方发布 release,可等待官方发布

    喜欢的可以关注微信公众号:
    云原生生态圈

    以下实在针对官方代码仓库的代码自己进行编译的,有兴趣的可以参考

    部署

    说在前面

    遇到问题,记得多看日志、多检查文件配置、检查网络问题

    授权

    #注意修改授权的网段
    CREATE USER 'mysqld_exporter'@'192.168.1.%' IDENTIFIED BY 'cccc' WITH MAX_USER_CONNECTIONS 3;
    GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'mysqld_exporter'@'192.168.1.%';
    flush privileges;
    
    • 1
    • 2
    • 3
    • 4

    此处可以在所有环境的实例中创建相同的 mysqld_exporter 监控账号和密码,也可以使用不同,当认证的密码不一样的时候,可以通过官方提示的配置文件配置即可。

    准备配置文件

    • config.my-cnf

    此文件遵循.ini格式,如果配置了不同的监控账号,你可以在该配置文件中增加不同项

    [client]
    user=mysqld_exporter
    password=***************
    [client-hb2]
    user=monitor
    password=***************
    [client-hd]
    user=monitor_hd
    password=***************
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    注意,如果有不同的监控账号,记得在向 consul 中注册 mysql 实例的时候,记得修改auth_module的元数据的值

    • docker-compose.yaml
    version: '3'
    services:
      mysqld_exporter:
        image: xx/mysqld_exporter:v1
        restart: always
        hostname: mysqld_exporter
        ports:
          - 10002:9104
        volumes:
          - ${PWD}/config.my-cnf:/config.my-cnf
          - /usr/share/zoneinfo/PRC:/etc/localtime
        command:
          - "--config.my-cnf=/config.my-cnf"
          - "--collect.binlog_size"
          - "--collect.info_schema.replica_host"
        container_name: mysqld-exporter
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    因为官方没有发布 release,因此需要自己拉取代码仓库,进行编译即可

    • 编译 mysqld_exporter 二进制
    git clone https://github.com/prometheus/mysqld_exporter.git && cd mysqld_exporter
    go mod download && GOOS=linux CGO_ENABLED=0 go build -ldflags="-s -w" -installsuffix cgo -o mysqld_exporter .
    # 测试
    ./mysqld_exporter --config.my-cnf=./config.my-cnf --collect.binlog_size --collect.info_schema.replica_host --web.listen-address=192.168.20.161:10002
    
    • 1
    • 2
    • 3
    • 4
    • 封装镜像 Dockerfile

    可以采用官方的 Dockerfile 修改一下即可

    ARG ARCH="amd64"
    ARG OS="linux"
    FROM quay.io/prometheus/busybox-${OS}-${ARCH}:latest
    LABEL maintainer="marionxue@qq.com"
    
    COPY ./mysqld_exporter /bin/mysqld_exporter
    
    EXPOSE      9104
    USER        nobody
    ENTRYPOINT  [ "/bin/mysqld_exporter" ]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    构建

    docker build -t xx/mysqld_exporter:v1 -f ./Dockerfile .
    
    • 1
    • 运行测试即可
    docker-compose up -d
    
    • 1

    写入 consul

    curl --location --request PUT 'http://$CONSUL_HOST:$CONSUL_PORT/v1/agent/service/register' \
    --header 'x-consul-token: $CONSUL_TOKEN' \
    --header 'Content-Type: application/json' \
    --data-raw '{
      "id": "$MYSQLHOST:$MYSQLPORT",
      "name": "mysql",
      "tags": [
          "prod",
          "mysql_exporter"
      ],
      "meta": {
        "company": "company",
        "env": "prod",
        "instance": "$MYSQLHOST:$MYSQLPORT",
        "auth_module": "client",
        "role": "master",
        "name": "prod-1-1-master"
      }
    }'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    再次提醒,如果你使用了不同的监控账号,记得修改auth_moduleconfig.my-cnf文件中设置的配置项名称,否则会出现认证失败

    配置 prometheus

      - job_name: 'consul_mysql'
        metrics_path: /probe
        consul_sd_configs:
          - server: '$CONSUL_HOST:$CONSUL_PORT'
            token: '$CONSUL_TOKEN'
            services: ['mysql']
            tags: ['prod']
        relabel_configs:
          - source_labels: ["__meta_consul_service_metadata_instance"]
            target_label: __param_target
          - source_labels: ["__meta_consul_service_metadata_company"]
            target_label: company
          - source_labels: ["__meta_consul_service_metadata_env"]
            target_label: env
          - source_labels: ["__meta_consul_service_metadata_auth_module"]
            target_label: auth_module
          - source_labels: ["__meta_consul_service_metadata_auth_module"]
            target_label: __param_auth_module
          - source_labels: [__param_target]
            target_label: instance
          - target_label: __address__
            replacement: $MYSQLD_EXPORTER_HOST:$MYSQLD_EXPORTER_PORT
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    重载 Prometheus 配置文件

    curl -XPUT http://localhost:9090/-/reload
    
    • 1

    最后效果:升级完成,总共废弃了 19 个 mysqld_exporter 容器!
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传!
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 相关阅读:
    新能源三电系统测试如何快速连接,避免多次插拔?安规测试电连接器的作用
    Docker容器入门笔记,一篇文章告诉你,使用docker的方法和使用Docker的优势
    vue3+elementPlus table滚动条样式覆盖
    Python常见面试题016. 请实现如下功能|谈谈你对闭包的理解
    鲜花在线销售平台的设计与实现/鲜花商城/网上花店管理系统
    SpringMVC的常用注解有哪些?
    Kafka -- 架构、分区、副本
    大数字符串加法
    Asp .Net Core 系列:Asp .Net Core 集成 Panda.DynamicWebApi
    代码随想录day31
  • 原文地址:https://blog.csdn.net/csdnzxm/article/details/127650370