教你使用Prometheus监控MySQL与MariaDB
作者:roc 陈鹏
来源:微信公众号:腾讯云原生
出处:;mid=2247488719 --tt-darkmode-bgcolor: #131313;">roc , 腾讯高级工程师 , Kubernetes Contributor , 热爱开源 , 专注云原生领域 。 目前主要负责腾讯云TKE 的售中、售后的技术支持 , 根据客户需求输出合理技术方案与最佳实践 , 为客户业务保驾护航 。
概述MySQL 是常用的关系型数据库 , MariaDB 作为 MySQL 的分支版本 , 兼容 MySQL 协议 , 也越来越流行 。 在 Kubernetes 环境中如何使用 Prometheus 来对它们进行监控呢?通常是借助开源的 mysqld-exporter 来实现 , 本文将围绕这个主题展开详细介绍下 。
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 podsNAMEREADYSTATUSRESTARTSAGEmysql-698b898bf7-4dc5k1/1Running011s
- 获取 root 密码:
$ kubectl get secret -o jsonpath={.data.mysql-root-password} mysql6ZAj33yLBo
有了 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/v1kind: Deploymentmetadata:name: mysqld-exporterspec:replicas: 1selector:matchLabels:app: mysqld-exportertemplate:metadata:labels:app: mysqld-exporterspec:containers:- name: mysqld-exporterimage: prom/mysqld-exporter:v0.12.1args:- --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_statusports:- containerPort: 9104protocol: TCPenv:- name: DATA_SOURCE_NAMEvalue: "mysqld-exporter:123456@(mysql.default.svc.cluster.local:3306)/"---apiVersion: v1kind: Servicemetadata:name: mysqld-exporterlabels:app: mysqld-exporterspec:type: ClusterIPports:- port: 9104protocol: TCPname: httpselector:app: mysqld-exporter
注意根据实际情况替换 DATA_SOURCE_NAME 中的账号密码 , 以及 MySQL 的连接地址添加监控采集配置有了 mysqld-exporter 后 , 我们就可以配置监控的采集 , 让 mysqld-exporter 暴露的数据被采集起来 , 如果你的集群中安装了 prometheus-operator , 可以通过定义 ServiceMonitor 来配置采集规则 , 示例:
apiVersion: monitoring.coreos.com/v1kind: ServiceMonitormetadata:name: mysqld-exporterspec:endpoints:interval: 5stargetPort: 9104namespaceSelector:matchNames:- defaultselector:matchLabels:app: mysqld-exporter
你可以通过修改 Prometheus 原生的配置文件来配置采集规则 , 示例:- job_name: mysqld-exporterscrape_interval: 5skubernetes_sd_configs:- role: endpointsnamespaces:names:- defaultrelabel_configs:- action: keepsource_labels:- __meta_kubernetes_service_label_app_kubernetes_io_nameregex: mysqld-exporter- action: keepsource_labels:- __meta_kubernetes_endpoint_port_nameregex: http
- 会员|美容院使用会员管理软件给顾客更好的消费体验!
- 桌面|日常使用的软件及网站分享 篇一:几个动态壁纸软件和静态壁纸网站:助你美化你的桌面
- QuestMobile|QuestMobile:百度智能小程序月人均使用个数达9.6个
- 路由器|家里无线网经常断网、网速慢怎么办?教你几个小窍门,轻松解决
- 轻松|使用 GIMP 轻松地设置图片透明度
- 电池容量|Windows 自带功能查看笔记本电脑电池使用情况,你的容量还好吗?
- 走心|平安夜还在送苹果?太不走心了,教你几招,快来物色一个
- 撕破脸|使用华为设备就罚款87万,英政府果真要和中国“撕破脸”?
- 冲突|智能互联汽车:通过数据托管模式解决数据使用方面的冲突
- 鼓励|(经济)商务部:鼓励引导商务领域减少使用塑料袋等一次性塑料制品