准备环境
mysql 环境可以搭建2个或者一个来进行监控
我这个是搭建了2个一个使用容器启动,一个二进制安装如图所示
配置mysql-exporter进行采集数据
apiVersion: apps/v1 # 版本号
kind: Deployment # 类型
metadata:
name: mysql-exporter # 名称
namespace: monitoring # 命名空间
spec:
replicas: 1 # 副本书
selector:
matchLabels:
k8s-app: mysql-exporter # deploy管理pod的标签
template:
metadata:
labels:
k8s-app: mysql-exporter # pod的标签
spec:
containers:
- image: prom/mysqld-exporter # 镜像地址
name: mysqld # 名称
env:
- name: DATA_SOURCE_NAME #
value: "exporter:exporter@(mysql.default:3306)/" # mysql主机容器的地址,此容器是在默认命名空间下使用deploy启动的
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9104 # 默认端口9104
- image: prom/mysqld-exporter # 镜像地址
name: mysqld-exporter # 名称
command: [ "sh","-c","/bin/mysqld_exporter --web.listen-address=':9003'"] # 这个命令相当于修改默认端口修改成9003 官网没有找到现场的环境变量的方式进行修改,有人知道请私聊,谢谢
env:
- name: DATA_SOURCE_NAME #
value: "exporter:exporter@(172.17.0.7:3306)/" # 外部mysql地址和端口
imagePullPolicy: IfNotPresent # 拉镜像的策略
ports:
- containerPort: 9003 # 修改后的端口好
查看是否安装成功
kubectl get deployments.apps -n monitoring
kubectl get po -n monitoring
通过sercice来进行暴漏端口
apiVersion: v1 # 可以理解成版本
kind: Service # 资源类型
metadata:
name: mysql-exporter # service的名字
namespace: monitoring # 命名空间
labels:
k8s-app: mysql-exporter # 标签后期需要用,
mingcheng: dnsxmu # 这个标签相当于作为查看使用
spec:
ports:
- port: 9104 # svc中暴漏的端口
protocol: TCP # 协议
name: api-mysql # 可以api-mysql访问
- port: 9003 # 同理
protocol: TCP
name: api
selector:
k8s-app: mysql-exporter # deploy中的标签
type: ClusterIP # 端口暴漏的方式
查看是否安装成功
kubectl get svc -n monitoring # 如下图所示,svc安装成功,可以进行访问测试是否有采集到的数据
curl 10.97.126.45:9104/metrics |tail -2 # 此ip地址和svc里面的要对应上
curl 10.97.126.45:9003/metrics |tail -2 # 此ip地址和svc里面的要对应上
配置监控ServiceMonitor收集
ServiceMonitor相当于是把之前采集好的数据自动可以让普罗米修斯自动识别
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: mysql-exporter # 名称
namespace: monitoring # 命名空间
labels:
k8s-app: mysql-exporter # 标签
spec:
# jobLabel: example-app #
endpoints:
- interval: 10s # 10s获取一次
port: api-mysql # 这个 port 对应 Service.spec.ports.name
relabelings:
- action: replace
regex: (.*)
replacement: $1
sourceLabels: [__meta_kubernetes_endpoints_label_xiangming] # 这个相当于使用刚刚配置的自定义便签
targetLabel: xingming # key值
scheme: http # 协议
- interval: 10s # 10s获取一次
port: api # 这个 port 对应 Service.spec.ports.name 也可以是端口号
scheme: http # 协议
selector:
matchLabels:
k8s-app: mysql-exporter # 跟 svc 的 lables 保持一致
namespaceSelector:
matchNames:
- monitoring # svc的命名空间
验证是否配置成功ServiceMonitor
kubectl get servicemonitors.monitoring.coreos.com -n monitoring
整体的yaml
apiVersion: apps/v1 # 版本号
kind: Deployment # 类型
metadata:
name: mysql-exporter # 名称
namespace: monitoring # 命名空间
spec:
replicas: 1 # 副本书
selector:
matchLabels:
k8s-app: mysql-exporter # deploy的标签
template:
metadata:
labels:
k8s-app: mysql-exporter # pod的标签
spec:
containers:
- image: prom/mysqld-exporter # 镜像地址
name: mysqld # 名称
env:
- name: DATA_SOURCE_NAME #
value: "exporter:exporter@(mysql.default:3306)/" # 如果是外部的mysql可以配置成主机如127.0.0.1
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9104
- image: prom/mysqld-exporter # 镜像地址
name: mysqld-exporter # 名称
command: [ "sh","-c","/bin/mysqld_exporter --web.listen-address=':9003'"]
env:
- name: DATA_SOURCE_NAME #
value: "exporter:exporter@(172.17.0.7:3306)/" # 如果是外部的mysql可以配置成主机如127.0.0.1
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9003
---
apiVersion: v1
kind: Service
metadata:
name: mysql-exporter
namespace: monitoring
labels:
k8s-app: mysql-exporter
spec:
ports:
- port: 9104
protocol: TCP
name: api-mysql
- port: 9003
protocol: TCP
name: api
selector:
k8s-app: mysql-exporter
type: ClusterIP
---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: mysql-exporter # 名称
namespace: monitoring # 命名空间
labels:
k8s-app: mysql-exporter # 标签
spec:
# jobLabel: example-app #
endpoints:
- interval: 10s # 30s获取一次
port: api-mysql # 这个 port 对应 Service.spec.ports.name
relabelings:
- action: replace
regex: (.*)
replacement: $1
sourceLabels: [__meta_kubernetes_endpoints_label_xiangming] # 这个相当于使用刚刚配置的自定义便签
targetLabel: xingming # key值
scheme: http # 协议
- interval: 10s # 30s获取一次
port: api # 这个 port 对应 Service.spec.ports.name
scheme: http # 协议
selector:
matchLabels:
k8s-app: mysql-exporter # 跟 svc 的 lables 保持一致
namespaceSelector:
matchNames:
- monitoring # svc的命名空间
开始进行验证
查看普罗米修斯是否自动发现刚刚配置的监控
查看是否可以看到自定义的便签:我这边使用其他的资源进行演示:
这个是我自定义的便签,配置到svc上就可以了
发现是可以展示出来的