手把手教你使用 Prometheus 監控 MySQL 與 Maria
概述
MySQL 是常用的關係型資料庫,MariaDB 作為 MySQL 的分支版本,相容 MySQL 協議,也越來越流行。在 Kubernetes 環境中如何使用 Prometheus 來對它們進行監控呢?通常是藉助開源的 來實現,本文將圍繞這個主題展開詳細介紹下。
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
的這個皮膚:
如果需要更豐富的皮膚,可以匯入 percona 開源的一些皮膚,地址: (匯入 MySQL_
開頭的 json 檔案中的內容即可)。
小結
本文介紹瞭如何利用開源的 mysqld-exporter
將原本不支援 Prometheus 的 MySQL 或 MariaDB 接入進來,讓 Prometheus 也能採集資料庫的監控指標,並新增 Grafana 監控皮膚,讓檢視監控更加方便。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2524/viewspace-2826487/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 手把手教你使用 Prometheus 監控 MySQL 與 MariaDB.mdPrometheusMySql
- 手把手教你使用 Prometheus 監控 JVMPrometheusJVM
- Prometheus MySQL監控+grafana展示PrometheusMySqlGrafana
- 手把手教你搭建Windows 搭建Prometheus + Grafana + Jmeter視覺化監控平臺WindowsPrometheusGrafanaJMeter視覺化
- 手把手教你搭建高逼格監控平臺,第二彈,監控mysqlMySql
- Grafana+Prometheus 監控 MySql服務GrafanaPrometheusMySql
- SpringBoot使用prometheus監控Spring BootPrometheus
- 使用Prometheus搞定微服務監控Prometheus微服務
- prometheus+grafana監控mysql最佳實踐PrometheusGrafanaMySql
- Prometheus 監控arangodbPrometheusGo
- Docker監控PrometheusDockerPrometheus
- Prometheus監控mongoPrometheusGo
- prometheus JVM監控PrometheusJVM
- 6.prometheus監控--監控dockerPrometheusDocker
- 使用Prometheus、Grafana監控Artifactory實踐PrometheusGrafana
- Prometheus監控系統入門與部署Prometheus
- prometheus之docker監控與告警系列(一)PrometheusDocker
- prometheus之docker監控與告警系列(二)PrometheusDocker
- prometheus之docker監控與告警系列(三)PrometheusDocker
- 05 . Prometheus監控NginxPrometheusNginx
- prometheus 監控學習Prometheus
- prometheus監控+alertmanager告警Prometheus
- SpringCloud使用Prometheus監控(基於Eureka)SpringGCCloudPrometheus
- 使用 Prometheus 監控 SAP ABAP 應用程式Prometheus
- Spring Boot中使用Prometheus監控教程Spring BootPrometheus
- 手把手教你實現Java監聽器全域性監控Java
- 手把手教你搭建高逼格監控平臺,第三彈,監控JVMJVM
- prometheus+grafana 監控nginxPrometheusGrafanaNginx
- Prometheus + InfluxDB + MySQL + Grafna快速構建監控系統PrometheusUXMySql
- grafana+prometheus快速搭建MySql監控系統實踐GrafanaPrometheusMySql
- Prometheus 監控Mysql伺服器及Grafana視覺化PrometheusMySql伺服器Grafana視覺化
- Java服務端監控:Prometheus與Grafana的整合Java服務端PrometheusGrafana
- 手把手教你安裝Linux效能監控工具——pydashLinux
- 使用Prometheus監控Golang服務-基於YoyoGo框架PrometheusGolang框架
- 使用Prometheus和Grafana監控Spring Boot應用PrometheusGrafanaSpring Boot
- 使用 Prometheus 監控 eKuiper 規則執行狀態PrometheusUI
- Prometheus監控實戰應用Prometheus
- 開源監控利器Prometheus初探Prometheus