TL; DR: I use mysqld-exporter with Prometheus to monitor my MySQL server.
The mysqld-exporter runs as a container in my Kubernetes cluster. A sample manifest looks like:
apiVersion: apps/v1 kind: Deployment metadata: labels: app: mysqld-exporter name: mysqld-exporter spec: replicas: 1 selector: matchLabels: app: mysqld-exporter template: metadata: labels: app: mysqld-exporter spec: containers: - args: # read client credential from the file - --config.my-cnf=/etc/mysql/my.cnf - --collect.engine_innodb_status - --collect.binlog_size - --collect.global_status - --collect.global_variables - --collect.info_schema.innodb_metrics - --collect.info_schema.processlist - --collect.info_schema.tables - --collect.info_schema.tablestats - --collect.info_schema.userstats - --collect.perf_schema.eventswaits - --collect.perf_schema.file_events - --collect.perf_schema.indexiowaits - --collect.perf_schema.tableiowaits - --collect.perf_schema.tablelocks - --collect.perf_schema.eventsstatements image: docker.io/prom/mysqld-exporter:v0.15.1 imagePullPolicy: IfNotPresent livenessProbe: httpGet: path: / port: http-metrics scheme: HTTP name: mysqld-exporter ports: - containerPort: 9104 name: http-metrics protocol: TCP readinessProbe: httpGet: path: / port: http-metrics scheme: HTTP resources: requests: cpu: 50m memory: 50Mi volumeMounts: - mountPath: /etc/mysql name: my-cnf-volume volumes: - configMap: defaultMode: 420 name: my-cnf name: my-cnf-volume --- apiVersion: v1 kind: Service metadata: annotations: prometheus.io/port: "9104" prometheus.io/scrape: "true" labels: app: mysqld-exporter name: mysqld-exporter spec: ports: - name: http-metrics port: 9104 protocol: TCP targetPort: 9104 selector: app: mysqld-exporter type: ClusterIP --- # for mysql user setup, see # https://hub.docker.com/r/prom/mysqld-exporter/ apiVersion: v1 data: my.cnf: | [client] host=<ip of the mysql server> user=mysqld-exporter password=mysqld-exporter kind: ConfigMap metadata: labels: app.kubernetes.io/instance: mysqld-exporter name: my-cnf
🙂