ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

云原生监控系统Prometheus——Exporter(MySQL数据库监控)

2022-07-15 01:00:09  阅读:205  来源: 互联网

标签:exporter name io 4jravx Prometheus Exporter mysqld 监控 mysql


Exporter(MySQL数据库监控)

  数据是企业的核心价值,数据库管理员对数据库进行监控,以便随时掌握数据库运行状况,使数据库稳定运行,更好地优化提升其性能,且在排查问题时有据可依。

  目前互联网中,最常见的数据库模型主要有两种:关系型数据库和非关系型数据库。

  这里我们先介绍 mysqld_exporter 对最常见的关系型数据库 Mysql 数据库进行监控数据采集。由于 MySQL 数据库不提供任何端点,所以 Prometheus 无法直接从中获取监控指标。为了解决这个问题,Prometheus 社区开发了对应的 exporter。其工作原理是使用底层应用程序理解的语言,从目标应用程序中提取监控指标,然后通过 REST 公开这些指标。

  这样,Prometheus 服务器就可以采集到对应的数据了。针对 MySQL,我们将使用 Prometheus 社区中的 MySQL 官方 "mysqld_exporter" 进行监控数据采集。

  在安装之前,首先在官方下载页面 https://github.com/prometheus/mysqld_exporter/releases/ 找到最新 mysqld_exporter 版本,下载最新版本中特定平台的二进制文件,如下:

一、部署mysqld_exporter

  我这里都是 kubernetes 环境,就不讲二进制部署了。以下是 Deployment 运行的 MySQL 服务,以及 mysqld_exporter 的配置清单 yaml 文件:

  • mysql server 版本号:mysql:5.7.30
    • MySQL server 的 Deploymnet 配置清单 yaml 文件如下:
      kind: Deployment
      apiVersion: apps/v1
      metadata:
        name: mysql-4jravx
        namespace: devops-mysql-test
        labels:
          app: mysql-4jravx
          app.kubernetes.io/managed-by: Helm
          app.kubesphere.io/instance: mysql-4jravx
          chart: mysql-1.6.8
          heritage: Helm
          release: mysql-4jravx
        annotations:
          deployment.kubernetes.io/revision: '1'
          kubesphere.io/creator: admin
          meta.helm.sh/release-name: mysql-4jravx
          meta.helm.sh/release-namespace: devops-mysql-test
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: mysql-4jravx
            release: mysql-4jravx
        template:
          metadata:
            creationTimestamp: null
            labels:
              app: mysql-4jravx
              release: mysql-4jravx
            annotations:
              kubesphere.io/creator: admin
          spec:
            volumes:
              - name: data
                persistentVolumeClaim:
                  claimName: mysql-4jravx
            initContainers:
              - name: remove-lost-found
                image: 'busybox:1.32'
                command:
                  - rm
                  - '-fr'
                  - /var/lib/mysql/lost+found
                resources:
                  requests:
                    cpu: 10m
                    memory: 10Mi
                volumeMounts:
                  - name: data
                    mountPath: /var/lib/mysql
                terminationMessagePath: /dev/termination-log
                terminationMessagePolicy: File
                imagePullPolicy: IfNotPresent
            containers:
              - name: mysql-4jravx
                image: 'mysql:5.7.30'
                ports:
                  - name: mysql
                    containerPort: 3306
                    protocol: TCP
                env:
                  - name: MYSQL_ROOT_PASSWORD
                    valueFrom:
                      secretKeyRef:
                        name: mysql-4jravx
                        key: mysql-root-password
                  - name: MYSQL_PASSWORD
                    valueFrom:
                      secretKeyRef:
                        name: mysql-4jravx
                        key: mysql-password
                        optional: true
                  - name: MYSQL_USER
                  - name: MYSQL_DATABASE
                resources:
                  requests:
                    cpu: 100m
                    memory: 256Mi
                volumeMounts:
                  - name: data
                    mountPath: /var/lib/mysql
                livenessProbe:
                  exec:
                    command:
                      - sh
                      - '-c'
                      - 'mysqladmin ping -u root -p${MYSQL_ROOT_PASSWORD}'
                  initialDelaySeconds: 30
                  timeoutSeconds: 5
                  periodSeconds: 10
                  successThreshold: 1
                  failureThreshold: 3
                readinessProbe:
                  exec:
                    command:
                      - sh
                      - '-c'
                      - 'mysqladmin ping -u root -p${MYSQL_ROOT_PASSWORD}'
                  initialDelaySeconds: 5
                  timeoutSeconds: 1
                  periodSeconds: 10
                  successThreshold: 1
                  failureThreshold: 3
                terminationMessagePath: /dev/termination-log
                terminationMessagePolicy: File
                imagePullPolicy: IfNotPresent
            restartPolicy: Always
            terminationGracePeriodSeconds: 30
            dnsPolicy: ClusterFirst
            serviceAccountName: default
            serviceAccount: default
            securityContext: {}
            schedulerName: default-scheduler
        strategy:
          type: Recreate
        revisionHistoryLimit: 10
        progressDeadlineSeconds: 600
  • mysqld_exporter 版本号:prom/mysqld-exporter:v0.11.0

    • mysqld_exporter 的 Deployment 配置清单 yaml 文件如下:
      kind: Deployment
      apiVersion: apps/v1
      metadata:
        name: mysql-e-0qunl8-mysql-exporter
        namespace: devops-mysql-test
        labels:
          app: mysql-exporter
          app.kubernetes.io/managed-by: Helm
          app.kubesphere.io/instance: mysql-e-0qunl8
          chart: mysql-exporter-0.5.6
          heritage: Helm
          release: mysql-e-0qunl8
        annotations:
          deployment.kubernetes.io/revision: '1'
          kubesphere.io/creator: admin
          meta.helm.sh/release-name: mysql-e-0qunl8
          meta.helm.sh/release-namespace: devops-mysql-test
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: mysql-exporter
            release: mysql-e-0qunl8
        template:
          metadata:
            creationTimestamp: null
            labels:
              app: mysql-exporter
              release: mysql-e-0qunl8
            annotations:
              kubesphere.io/creator: admin
              prometheus.io/path: /metrics
              prometheus.io/port: '9104'
              prometheus.io/scrape: 'true'
          spec:
            containers:
              - name: mysql-exporter
                image: 'prom/mysqld-exporter:v0.11.0'
                ports:
                  - containerPort: 9104
                    protocol: TCP
                envFrom:
                  - secretRef:
                      name: mysql-e-0qunl8-mysql-exporter
                resources: {}
                livenessProbe:
                  httpGet:
                    path: /
                    port: 9104
                    scheme: HTTP
                  timeoutSeconds: 1
                  periodSeconds: 10
                  successThreshold: 1
                  failureThreshold: 3
                readinessProbe:
                  httpGet:
                    path: /
                    port: 9104
                    scheme: HTTP
                  timeoutSeconds: 1
                  periodSeconds: 10
                  successThreshold: 1
                  failureThreshold: 3
                terminationMessagePath: /dev/termination-log
                terminationMessagePolicy: File
                imagePullPolicy: IfNotPresent
            restartPolicy: Always
            terminationGracePeriodSeconds: 30
            dnsPolicy: ClusterFirst
            securityContext: {}
            schedulerName: default-scheduler
        strategy:
          type: RollingUpdate
          rollingUpdate:
            maxUnavailable: 25%
            maxSurge: 25%
        revisionHistoryLimit: 10
        progressDeadlineSeconds: 600

二、与 Prometheus 集成

  与 Prometheus 的配置文件 prometheus.yaml 中的 static_configs 模块内,继续追加配置内容来采集 mysqld_exporter 提供的数据。添加的参考配置内容如下:

scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: ["localhost:9090"]
    
  - job_name: "node_exporter"
    static_configs:
      - targets: ["192.168.2.121:9100"]

  - job_name: "mysqld_exporter"
    scrape_interval: 10s
    static_configs:
      - targets: ["192.168.2.121:9104"]
  • 2.1、mysqld_exporter 服务是否正常,可以通过 Prometheus UI 页面的 "status" 中的 "Targets",如下图所示:
  • 2.2、进入 Targets 页面后,可以在列表中看到刚才配置好的 mysqld_exporter 的状态为 "UP",说明 Prometheus 最后一次从 mysqld_exporter 中采集数据是成功的,此刻被监控的服务器主机工作状态是正常的。

三、metrics 查看

  MySQL 数据库的性能状态查询内容非常多,但通常必不可少的内容包括查询吞吐量(Buffer pool usage)、查询性能(Qurery execution performance)、连接情况(Connections)和缓冲池使用情况(Buffer pool usage)这四个与基本的性能和资源利用率相关的指标。

  • 3.1)查询吞吐量
  • 3.2)查询执行性能
  • 3.3)连接情况
  • 3.4)缓存池使用情况

标签:exporter,name,io,4jravx,Prometheus,Exporter,mysqld,监控,mysql
来源: https://www.cnblogs.com/zuoyang/p/16479903.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有