手把手教你使用 Prometheus 监控 MySQL 与 MariaDB.md
来源:SegmentFault
时间:2023-02-20 09:59:48 437浏览 收藏
大家好,今天本人给大家带来文章《手把手教你使用 Prometheus 监控 MySQL 与 MariaDB.md》,文中内容主要涉及到云原生、MySQL、prometheus、kubernetes、腾讯云,如果你对数据库方面的知识点感兴趣,那就请各位朋友继续看下去吧~希望能真正帮到你们,谢谢!
概述
MySQL 是常用的关系型数据库,MariaDB 作为 MySQL 的分支版本,兼容 MySQL 协议,也越来越流行。在 Kubernetes 环境中如何使用 Prometheus 来对它们进行监控呢?通常是借助开源的 mysqld-exporter 来实现,本文将围绕这个主题展开详细介绍下。
mysqld-exporter 原理介绍
mysqld-exporter 通过读取 MySQL 或 MariaDB 中的一些数据库状态的数据,并将其转换为 Prometheus 的指标格式并暴露成 http 接口被 Prometheus 所采集,来实现让原本不支持 Prometheus 指标的 MySQL 和 MariaDB 能够被 Prometheus 监控起来:
操作步骤
部署 mysqld-exporter
在部署 mysqld-exporter 之前首先保证 MySQL 或 MariaDB 已经部署,可以在集群内,也可以在集群外,或者使用现成的云服务。如果还没有,这里以从应用市场部署到集群为例来部署一个 MySQL:
- 在应用市场中找到 MySQL,点击
创建应用-创建
。
- 查看 mysql 是否正常运行:
$ kubectl get pods NAME READY STATUS RESTARTS AGE mysql-698b898bf7-4dc5k 1/1 Running 0 11s
- 获取 root 密码:
$ kubectl get secret -o jsonpath={.data.mysql-root-password} mysql 6ZAj33yLBo
有了 MySQL 后,我们开始准备部署 mysqld-exporter,首先为 mysqld-exporter 创建一个账号,登录 MySQL:
$ kubectl exec -it mysql-698b898bf7-4dc5k bash $ mysql -uroot -p6ZAj33yLBo
然后输入 SQL 来创建账号,这里以
mysqld-exporter/123456为例:
CREATE USER 'mysqld-exporter' IDENTIFIED BY '123456' WITH MAX_USER_CONNECTIONS 3; GRANT PROCESS, REPLICATION CLIENT, REPLICATION SLAVE, SELECT ON *.* TO 'mysqld-exporter'; flush privileges;
然后使用以下 yaml 来部署 mysqld-exporter:
apiVersion: apps/v1 kind: Deployment metadata: name: mysqld-exporter spec: replicas: 1 selector: matchLabels: app: mysqld-exporter template: metadata: labels: app: mysqld-exporter spec: containers: - name: mysqld-exporter image: prom/mysqld-exporter:v0.12.1 args: - --collect.info_schema.tables - --collect.info_schema.innodb_tablespaces - --collect.info_schema.innodb_metrics - --collect.global_status - --collect.global_variables - --collect.slave_status - --collect.info_schema.processlist - --collect.perf_schema.tablelocks - --collect.perf_schema.eventsstatements - --collect.perf_schema.eventsstatementssum - --collect.perf_schema.eventswaits - --collect.auto_increment.columns - --collect.binlog_size - --collect.perf_schema.tableiowaits - --collect.perf_schema.indexiowaits - --collect.info_schema.userstats - --collect.info_schema.clientstats - --collect.info_schema.tablestats - --collect.info_schema.schemastats - --collect.perf_schema.file_events - --collect.perf_schema.file_instances - --collect.perf_schema.replication_group_member_stats - --collect.perf_schema.replication_applier_status_by_worker - --collect.slave_hosts - --collect.info_schema.innodb_cmp - --collect.info_schema.innodb_cmpmem - --collect.info_schema.query_response_time - --collect.engine_tokudb_status - --collect.engine_innodb_status ports: - containerPort: 9104 protocol: TCP env: - name: DATA_SOURCE_NAME value: "mysqld-exporter:123456@(mysql.default.svc.cluster.local:3306)/" --- apiVersion: v1 kind: Service metadata: name: mysqld-exporter labels: app: mysqld-exporter spec: type: ClusterIP ports: - port: 9104 protocol: TCP name: http selector: app: mysqld-exporter
! 注意根据实际情况替换 DATA_SOURCE_NAME 中的账号密码,以及 MySQL 的连接地址
添加监控采集配置
有了 mysqld-exporter 后,我们就可以配置监控的采集,让 mysqld-exporter 暴露的数据被采集起来,如果你的集群中安装了 prometheus-operator,可以通过定义 ServiceMonitor 来配置采集规则,示例:
apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: mysqld-exporter spec: endpoints: interval: 5s targetPort: 9104 namespaceSelector: matchNames: - default selector: matchLabels: app: mysqld-exporter
你可以通过修改 Prometheus 原生的配置文件来配置采集规则,示例:
- job_name: mysqld-exporter scrape_interval: 5s kubernetes_sd_configs: - role: endpoints namespaces: names: - default relabel_configs: - action: keep source_labels: - __meta_kubernetes_service_label_app_kubernetes_io_name regex: mysqld-exporter - action: keep source_labels: - __meta_kubernetes_endpoint_port_name regex: http
添加监控面板
采集配置好,正常采集有了数据之后,还需要为 Grafana 添加监控面板进行展示,如果只是看 MySQL 或 MariaDB 的一些概览情况,可以导入
grafana.com的这个面板: https://grafana.com/grafana/d...
如果需要更丰富的面板,可以导入 percona 开源的一些面板,地址: https://github.com/percona/gr... (导入
MySQL_开头的 json 文件中的内容即可)。
小结
本文介绍了如何利用开源的
mysqld-exporter将原本不支持 Prometheus 的 MySQL 或 MariaDB 接入进来,让 Prometheus 也能采集数据库的监控指标,并添加 Grafana 监控面板,让查看监控更加方便。
【腾讯云原生】云说新品、云研新术、云游新活、云赏资讯,扫码关注同名公众号,及时获取更多干货!!
以上就是《手把手教你使用 Prometheus 监控 MySQL 与 MariaDB.md》的详细内容,更多关于mysql的资料请关注golang学习网公众号!
-
499 收藏
-
244 收藏
-
235 收藏
-
157 收藏
-
101 收藏
-
475 收藏
-
266 收藏
-
273 收藏
-
283 收藏
-
210 收藏
-
371 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 507次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 484次学习