在Kubernetes环境中,从MySQL Exporter获取指标数据
首先
在Prometheus官方网站上,有许多Exporter可供选择,其中包括MySQL用的Exporter。本文将记录在Kubernetes环境(也就是ICP:IBM Cloud Private环境)中部署MySQL Exporter并获取指标的案例。虽然有关在Docker容器中或操作系统上部署Exporter的案例,但是在k8s环境中实现(比较明确的案例)尚未有所涉及,因此将详细介绍该实现方法。
构成图

※ Prometheus直接访问的不是MySQL的Pod,而是Exporter的Pod。(起初误解了…)
组成
普罗米修斯:v2.3.1(使用IBM的图表:链接)
MySQL:使用最新的Docker镜像
ICP:v2.1.0.3
建立设置
请创建以下清单文件。
由于我们正在使用ICP环境,因此Docker镜像是使用ICP的私有注册表存储的(请根据需要进行适当调整)。
本次的MySQL部署,我们没有进行任何特殊的配置,只是为了验证Prometheus的Exporter。
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: mysql
spec:
containers:
- image: mycluster.icp:8500/default/mysql:latest
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: root-password
ports:
- containerPort: 3306
name: mysql
・MySQL的secret(密码:password)
apiVersion: v1
kind: Secret
metadata:
name: mysql-secret
namespace: default
type: Opaque
data:
root-password: cGFzc3dvcmQ=
・适用于MySQL的服务
apiVersion: v1
kind: Service
metadata:
name: mysql
namespace: default
spec:
ports:
- port: 3306
selector:
app: mysql
如果在MySQL Exporter的部署中添加以下两行注解和连接信息,Prometheus将通过scrape处理自动获取指标。
prometheus.io/scrape: “true”
prometheus.io/port: “9104”
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: mysqld-exporter
spec:
selector:
matchLabels:
app: mysqld-exporter
replicas: 1
template:
metadata:
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "9104"
labels:
app: mysqld-exporter
spec:
containers:
- name: mysqld-exporter
image: mycluster.icp:8500/default/prom/mysqld-exporter:latest
env:
- name: DATA_SOURCE_NAME
valueFrom:
secretKeyRef:
name: mysql-ex-secret
key: password
ports:
- containerPort: 9104
・为MySQL Exporter创建的秘钥(包括密码为password和端口号)。
apiVersion: v1
kind: Secret
metadata:
name: mysql-ex-secret
namespace: default
type: Opaque
data:
password: cm9vdDpwYXNzd29yZEAobXlzcWw6MzMwNikv
# echo "cm9vdDpwYXNzd29yZEAobXlzcWw6MzMwNikv" | base64 -d
root:password@(mysql:3306)/
在进行编码时,请使用以下命令将”root:password@(mysql:3306)/”转换为base64:# echo -n “root:password@(mysql:3306)/” | base64。请确保不要忘记-n选项,否则会加入换行符。
只要完成剩下的部分,就可以了。
# kubectl create -f mysql-secret.yaml
# kubectl create -f mysql-deploymant.yaml
# kubectl create -f mysql-service.yaml
# kubectl create -f mysql-ex-secret.yaml
# kubectl create -f mysql-ex-deployment_a.yaml
确认制成的结果。
# kubectl get pod
NAME READY STATUS RESTARTS AGE
mysql-7cc9b5d75d-4qgtg 1/1 Running 0 10d
mysqld-exporter-7d875c99c0-p8rsx 1/1 Running 0 10d
#
# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
mysql ClusterIP 10.0.0.6 <none> 3306/TCP 10d
#
# kubectl get secret
NAME TYPE DATA AGE
mysql-ex-secret Opaque 1 10d
mysql-secret Opaque 1 10d
好的。
在普罗米修斯中会显现如何?
首先是CLI。
出口商的IP确认。→ IP:10.1.123.176
# kubectl describe po mysqld-exporter-7d875c99c0-p8rsx
Name: mysqld-exporter-7d875c99c0-p8rsx
Namespace: default
(中略)
IP: 10.1.123.176
(後略)
使用Curl访问并确认是否获取到了名为mysql的度量数据。
# curl http://10.1.123.176:9104/metrics
# HELP go_gc_duration_seconds A summary of the GC invocation durations.
# TYPE go_gc_duration_seconds summary
(中略)
HELP mysql_exporter_collector_duration_seconds Collector time duration.
# TYPE mysql_exporter_collector_duration_seconds gauge
mysql_exporter_collector_duration_seconds{collector="collect.global_status"} 0.004177075
mysql_exporter_collector_duration_seconds{collector="collect.global_variables"} 0.010698232
mysql_exporter_collector_duration_seconds{collector="collect.info_schema.tables"} 0.043587385
mysql_exporter_collector_duration_seconds{collector="collect.slave_status"} 0.04456449
mysql_exporter_collector_duration_seconds{collector="connection"} 0.001885118
# HELP mysql_exporter_last_scrape_error Whether the last scrape of metrics from MySQL resulted in an error (1 for error, 0 for success).
(後略)
顺利达成!
(参考)所获得的指标有2379行。
# curl http://10.1.123.176:9104/metrics | wc -l
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 177k 100 177k 0 0 3238k 0 --:--:-- --:--:-- --:--:-- 3220k
2379
即使是GUI,是的,可以获取!

总结
我对于Exporter的部署yaml文件的编写方式感到不清楚,但是只需在注释中填写必要的项以及在Env中记录MySQL的连接信息即可。
参考
Kubernetes引擎示例
导出器和集成
mysqld导出器