戴志强1
Published on 2026-02-25 / 12 Visits
0
0

mysqld-exporter 暴露mysql监控指标, 非宿主机方案

mysqld-exporter 暴露mysql监控指标, 非宿主机方案

目标: 对现有的mysql服务,接入到k8s prometheus 监控体系,方便后续监控告警的实现。

实现方式: 在k8s集群部署一个 mysqld-exporter, 接入到k8s prometheus 监控体系,对现有的mysql 中间件无侵入。

1.1 添加mysqld-exporter Configmap配置

Configmap:

kind: ConfigMap
apiVersion: v1
metadata:
  name: mysql-dev-exporter-config
  namespace: common
  annotations:
    kubesphere.io/creator: daizhiqiang
data:
  my.cnf: |
    [client]
    host = 192.168.174.187
    port = 3306
    user = root
    password = nhdTaVMSAC

1.2 添加mysqld-exporter Deployment 配置

Deployment:

kind: Deployment
apiVersion: apps/v1
metadata:
  name: mysql-dev-exporter
  namespace: common
  labels:
    app: mysql-dev-exporter
  annotations:
    deployment.kubernetes.io/revision: '2'
    kubesphere.io/creator: daizhiqiang
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql-dev-exporter
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: mysql-dev-exporter
      annotations:
        kubesphere.io/creator: daizhiqiang
        prometheus.io/path: /metrics
        prometheus.io/port: '9104'
        prometheus.io/scrape: 'true'
    spec:
      volumes:
        - name: mysql-config
          configMap:
            name: mysql-dev-exporter-config
            defaultMode: 420
      containers:
        - name: mysqld-dev-exporter
          image: 'prom/mysqld-exporter:v0.15.0'
          args:
            - '--config.my-cnf=/etc/mysql/my.cnf'
          ports:
            - name: metrics
              containerPort: 9104
              protocol: TCP
          resources:
            limits:
              cpu: 50m
              memory: 128Mi
            requests:
              cpu: 10m
              memory: 64Mi
          volumeMounts:
            - name: mysql-config
              readOnly: true
              mountPath: /etc/mysql
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
          imagePullPolicy: IfNotPresent
          securityContext:
            runAsUser: 65534
            runAsNonRoot: true
            readOnlyRootFilesystem: true
            allowPrivilegeEscalation: false
      restartPolicy: Always
      terminationGracePeriodSeconds: 30
      dnsPolicy: ClusterFirst
      securityContext: {}
      schedulerName: default-scheduler
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 25%
      maxSurge: 25%
  revisionHistoryLimit: 10
  progressDeadlineSeconds: 600

1.3 添加mysqld-exporter Service 配置

kind: Service
apiVersion: v1
metadata:
  name: mysql-dev-exporter
  namespace: common
  labels:
    app: mysql-dev-exporter
  annotations:
    kubesphere.io/creator: daizhiqiang
spec:
  ports:
    - name: metrics
      protocol: TCP
      port: 9104
      targetPort: 9104
      nodePort: 30596
  selector:
    app: mysql-dev-exporter
  clusterIP: 10.233.15.38
  clusterIPs:
    - 10.233.15.38
  type: NodePort
  sessionAffinity: None
  externalTrafficPolicy: Cluster
  ipFamilies:
    - IPv4
  ipFamilyPolicy: SingleStack
  internalTrafficPolicy: Cluster

1.4 添加mysql-scrape.yaml 配置

additional-scrape-configs -> mysql-scrape.yaml


- job_name: 'mysql-187'
  static_configs:
    - targets: ['192.168.168.207:30596']
      labels:
        instance: 'mysql-187'
        environment: 'prod'
  scrape_interval: 15s
  scrape_timeout: 10s

1.5 grafana显示

host 选择: mysql-187

image-qSkF.png


Comment