温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

prometheus服务监控之mysql监控怎么配置

发布时间:2022-04-29 16:56:29 来源:亿速云 阅读:202 作者:iii 栏目:大数据
# Prometheus服务监控之MySQL监控配置指南 ## 一、Prometheus监控体系概述 ### 1.1 Prometheus核心组件 Prometheus是一个开源的系统监控和警报工具包,由以下几个核心组件构成: - **Prometheus Server**:负责抓取和存储时间序列数据 - **Client Libraries**:用于检测应用程序代码 - **Push Gateway**:支持短生命周期任务的指标推送 - **Exporters**:用于暴露现有第三方系统的指标 - **Alertmanager**:处理警报 - **可视化界面**(如Grafana) ### 1.2 监控数据模型 Prometheus所有监控数据都存储为时间序列,具有以下特征: - 指标名称(metric name) - 标签(key-value pairs) - 时间戳 - 浮点数值 示例格式: 

{

 ## 二、MySQL监控方案设计 ### 2.1 监控指标分类 对MySQL数据库的监控主要包含以下方面: | 类别 | 具体指标示例 | |----------------|-------------------------------------| | 性能指标 | QPS, TPS, 查询延迟, 连接数 | | 资源使用 | CPU, 内存, 磁盘IO, 网络流量 | | 复制状态 | 主从延迟, 复制线程状态 | | 存储引擎 | InnoDB缓冲池状态, 锁等待 | | 慢查询 | 慢查询数量, 执行时间分布 | ### 2.2 技术选型对比 #### 方案一:mysqld_exporter - 官方推荐方案 - 支持绝大多数MySQL指标 - 与Prometheus生态无缝集成 #### 方案二:Percona监控插件 - 提供更专业的MySQL指标 - 需要额外部署组件 - 适合复杂的企业环境 #### 方案三:自定义脚本+node_exporter - 灵活性高 - 维护成本大 - 适合特殊定制场景 **推荐选择mysqld_exporter作为基础方案** ## 三、mysqld_exporter部署配置 ### 3.1 安装部署 #### 二进制安装(推荐) ```bash # 下载最新版本 wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.15.0/mysqld_exporter-0.15.0.linux-amd64.tar.gz # 解压安装 tar xvfz mysqld_exporter-*.tar.gz cd mysqld_exporter-* cp mysqld_exporter /usr/local/bin/ 

Docker方式

docker pull prom/mysqld-exporter docker run -d \ -p 9104:9104 \ --name mysqld-exporter \ -e DATA_SOURCE_NAME="user:password@(hostname:3306)/" \ prom/mysqld-exporter 

3.2 数据库用户权限配置

创建专用监控账号:

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

3.3 配置文件示例

创建配置文件/etc/mysqld_exporter.cnf

[client] user=exporter password=StrongPassword host=127.0.0.1 port=3306 

3.4 启动参数说明

常用启动参数:

mysqld_exporter \ --config.my-cnf="/etc/mysqld_exporter.cnf" \ --web.listen-address="0.0.0.0:9104" \ --collect.global_status \ --collect.info_schema.innodb_metrics \ --collect.auto_increment.columns \ --collect.info_schema.processlist \ --collect.binlog_size \ --collect.info_schema.tablestats \ --collect.global_variables \ --collect.info_schema.query_response_time \ --collect.info_schema.userstats \ --collect.info_schema.tables \ --collect.perf_schema.tablelocks \ --collect.perf_schema.file_events \ --collect.perf_schema.eventswaits \ --collect.perf_schema.indexiowaits \ --collect.perf_schema.tableiowaits \ --collect.slave_status \ --log.level="info" 

3.5 系统服务配置

创建systemd服务文件/etc/systemd/system/mysqld_exporter.service

[Unit] Description=MySQL Prometheus Exporter After=network.target [Service] User=mysql Group=mysql Type=simple ExecStart=/usr/local/bin/mysqld_exporter \ --config.my-cnf=/etc/mysqld_exporter.cnf \ --web.listen-address=0.0.0.0:9104 Restart=always [Install] WantedBy=multi-user.target 

启动服务:

systemctl daemon-reload systemctl enable mysqld_exporter systemctl start mysqld_exporter 

四、Prometheus服务配置

4.1 配置抓取任务

修改Prometheus配置文件prometheus.yml

scrape_configs: - job_name: 'mysql' static_configs: - targets: ['mysql-server:9104'] relabel_configs: - source_labels: [__address__] target_label: instance regex: '(.*):.*' replacement: '$1' 

4.2 指标过滤配置

对于大型MySQL实例,建议启用指标过滤:

metric_relabel_configs: - source_labels: [__name__] regex: '(mysql_global_status_wsrep_.*|mysql_slave_status_.*)' action: keep 

4.3 服务发现配置(可选)

对于多实例环境,建议使用服务发现:

scrape_configs: - job_name: 'mysql' consul_sd_configs: - server: 'consul:8500' services: ['mysql'] relabel_configs: - source_labels: [__meta_consul_service] target_label: job 

五、Grafana可视化配置

5.1 仪表盘导入

推荐使用以下社区仪表盘: - MySQL Overview (ID: 7362) - Percona MySQL/Graphite Dashboard (ID: 4201)

导入方法: 1. 登录Grafana 2. 左侧菜单选择”+” > Import 3. 输入仪表盘ID 4. 选择对应的Prometheus数据源

5.2 关键监控面板

性能面板

  • QPS/TPS实时变化曲线
  • 查询延迟百分位分布
  • 连接数和使用率

资源面板

  • InnoDB缓冲池命中率
  • 磁盘IO吞吐和延迟
  • 临时表创建数量

复制面板

  • 主从延迟秒数
  • 复制线程状态
  • 二进制日志位置

六、告警规则配置

6.1 关键告警规则示例

创建mysql_rules.yml文件:

groups: - name: mysql-alerts rules: - alert: MySQLDown expr: up{job="mysql"} == 0 for: 1m labels: severity: critical annotations: summary: "MySQL instance down (instance {{ $labels.instance }})" - alert: HighThreadsRunning expr: mysql_global_status_threads_running > 50 for: 5m labels: severity: warning annotations: summary: "High number of running threads ({{ $value }})" - alert: ReplicationNotRunning expr: mysql_slave_status_slave_io_running != 1 or mysql_slave_status_slave_sql_running != 1 for: 2m labels: severity: critical annotations: summary: "MySQL replication stopped (instance {{ $labels.instance }})" 

6.2 Alertmanager配置示例

配置邮件通知:

route: receiver: 'email-alerts' group_wait: 30s group_interval: 5m receivers: - name: 'email-alerts' email_configs: - to: 'dba-team@example.com' from: 'prometheus-alerts@example.com' smarthost: 'smtp.example.com:587' auth_username: 'alertuser' auth_password: 'password' send_resolved: true 

七、高级配置技巧

7.1 自定义指标收集

通过--collect.*参数控制指标收集范围:

# 只收集性能相关指标 --collect.global_status --collect.info_schema.innodb_metrics --collect.slave_status 

7.2 慢查询监控集成

配置my.cnf启用慢查询日志:

[mysqld] slow_query_log = 1 slow_query_log_file = /var/log/mysql/mysql-slow.log long_query_time = 2 log_queries_not_using_indexes = 1 

使用pt-query-digest分析:

pt-query-digest /var/log/mysql/mysql-slow.log | tee slow-report.log 

7.3 性能优化建议

  1. 调整抓取间隔:对于生产环境建议30s-1m

    scrape_interval: 30s 
  2. 启用指标缓存:

    --web.telemetry-path="/metrics" \ --web.disable-exporter-metrics 
  3. 限制指标数量:

    --collect.info_schema.tables.databases="production_db" \ --collect.perf_schema.eventswaits.limit=100 

八、常见问题排查

8.1 连接问题排查

# 测试exporter连接 mysql --defaults-file=/etc/mysqld_exporter.cnf -e "SHOW STATUS" 

8.2 指标缺失排查

  1. 检查启动参数是否启用了对应收集器
  2. 验证MySQL用户是否有足够权限
  3. 检查Prometheus的relabel配置

8.3 性能问题排查

# 查看exporter自身资源使用 top -p $(pgrep -f mysqld_exporter) # 检查抓取耗时 curl -s http://localhost:9104/metrics | wc -l 

九、安全最佳实践

  1. 网络隔离:

    • 将exporter部署在内网
    • 配置防火墙规则限制访问
  2. 认证加密:

    --web.config.file="/etc/prometheus/web.yml" 

    web.yml内容:

    basic_auth_users: prom_user: "$2y$10$hashedpassword" 
  3. 最小权限原则:

    • 监控账号仅授予必要权限
    • 定期轮换密码

十、未来演进方向

  1. 与Kubernetes集成:

    • 使用Operator管理MySQL集群
    • 自动服务发现
  2. 智能告警:

    • 基于机器学习的异常检测
    • 动态阈值调整
  3. 性能分析集成:

    • 与pt-kill等工具联动
    • 自动优化建议

通过以上完整配置,您将建立起一个专业的MySQL监控体系,能够及时发现性能瓶颈、预测容量问题并快速响应故障,为数据库的稳定运行提供有力保障。 “`

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI