MySQL容器部署Prometheus+Granfana全流程

第一阶段:MySQL 监控账号准备

为了安全,在 MySQL 中创建一个专门用于监控的账号:

复制代码
CREATE USER 'exporter'@'%' IDENTIFIED BY 'YourPassword123!';
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'%';
FLUSH PRIVILEGES;

第二阶段:部署 mysqld-exporter (数据采集层)

这是最关键的一步。由于密码包含特殊字符且为了稳定,我们采用了 配置文件挂载 的方式。

  1. 创建配置文件 /opt/prometheus/my.cnf:

    复制代码
    [client]
    user=root
    password=AppPass123!
    host=127.0.0.1
    port=3306
  2. 启动容器 (使用 --network host 模式直接访问宿主机网络):

    复制代码
    docker run -d \
      --name mysqld-exporter \
      --network host \
      -v /opt/prometheus/my.cnf:/etc/.my.cnf \
      prom/mysqld-exporter \
      --config.my-cnf=/etc/.my.cnf
  3. 验证 :访问 http://192.168.211.136:9104/metrics,看到 mysql_ 开头的文字即为成功。


第三阶段:部署 Prometheus (存储层)

  1. 准备配置文件 /opt/prometheus/prometheus.yml:

    复制代码
    global:
      scrape_interval: 15s
    ​
    scrape_configs:
      - job_name: 'mysql-monitor'
        static_configs:
          - targets: ['192.168.211.136:9104']
  2. 启动容器

    复制代码
    docker run -d \
      --name prometheus \
      -p 9090:9090 \
      -v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
      prom/prometheus
  3. 验证 :访问 http://192.168.211.136:9090/targets,看到 mysql-monitor 状态为 UP


第四阶段:部署 Grafana (展示与告警层)

  1. 获取邮件授权码 :在 163 邮箱设置中开启 SMTP 服务并获取 16 位授权码

  2. 启动容器 (带邮件配置参数):

    复制代码
    docker run -d \
      --name grafana \
      --network host \
      -e "GF_SMTP_ENABLED=true" \
      -e "GF_SMTP_HOST=smtp.163.com:465" \
      -e "GF_SMTP_USER=15320239818@163.com" \
      -e "GF_SMTP_PASSWORD=UMt7XXsHMtQ4XSRi" \
      -e "GF_SMTP_FROM_ADDRESS=15320239818@163.com" \
      -e "GF_SMTP_FROM_NAME=MySQL监控告警" \
      -e "GF_SMTP_SKIP_VERIFY=true" \
      grafana/grafana

第五阶段:Grafana 图表可视化

  1. 添加数据源

    • 登录 http://192.168.211.136:3000 (admin/admin)。

    • Connections -> Data Sources -> Add Prometheus。

    • URL 填入:http://192.168.211.136:9090

  2. 导入面板

    • Dashboards -> New -> Import。

    • 输入 ID:12442,选择 Prometheus 数据源。

    • 效果:看到 QPS、连接数、缓存利用率等精美图表。


第六阶段:邮件告警配置 (闭环)

  1. 设置联系人 (Contact Point)

    • Alerting -> Contact points -> Add contact point。

    • 选择 Email,填入收件地址。

    • 点击 Test 确认收到测试邮件。

  2. 创建告警规则 (Alert Rule)

    • 设置查询语句(如 mysql_global_status_threads_connected)。

    • 设置阈值(如 IS ABOVE 10)。

    • 设置持续时间(如 Pending 1m)。

    • 选择邮件联系人。


💡 核心排错经验 (RHEL 特有)

  • 防火墙策略:RHEL 必须开放 9090, 3000, 9104 端口。

    复制代码
    sudo firewall-cmd --permanent --add-port={9090,3000,9104}/tcp
    sudo firewall-cmd --reload
  • SELinux 限制 :如果挂载文件权限报错,可以临时使用 setenforce 0

  • 特殊字符 :环境变量中包含 ! 等符号时,使用配置文件挂载(.my.cnf)比直接传参更可靠。

  • 授权码:第三方发信必须使用邮箱生成的专用授权码,而非登录密码。

相关推荐
codeejun40 分钟前
每日一Go-70、Prometheus + Grafana 从采集到告警的完整实战(Go + Kind)
golang·grafana·prometheus
Cat_Rocky2 天前
k8s-Prometheus的manifests 清单部署
linux·kubernetes·prometheus
king_harry2 天前
Kylinv10下日志收集系统 Loki + Promtail + Grafana(二进制离线部署)
grafana·loki·promtail
成为你的宁宁3 天前
【Prometheus基于文件的服务发现】
服务发现·prometheus
zhojiew3 天前
在Ray集群中使用vLLM部署LLM模型并集成Prometheus和Grafana进行指标观测的实践
grafana·prometheus·vllm
Cat_Rocky3 天前
K8S部署EFK日志收集技术栈
容器·kubernetes·prometheus
D4c-lovetrain3 天前
云原生实战:K8s 一键部署 Prometheus+Grafana+EFK 完整可观测平台
云原生·kubernetes·prometheus
眷蓝天3 天前
基于K8s部署Prometheus与EFK栈
容器·kubernetes·prometheus
zxd0203113 天前
K8S 中部署 Prometheus 监控体系:从原理到实战
容器·kubernetes·prometheus
成为你的宁宁3 天前
【基于 Consul 实现 Prometheus 服务发现部署与实战】
prometheus·consul