Kube-Prometheus Stack监控mysql

准备环境

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上就可以了
在这里插入图片描述
发现是可以展示出来的
在这里插入图片描述

### 配置 kube-prometheus 实现 Kubernetes 监控 #### 准备工作 为了确保成功部署并配置 kube-prometheus 来实现对 Kubernetes 的全面监控,需确认所使用的 Kubernetes 版本与 kube-prometheus release-0.7 版本兼容。根据官方提供的兼容性矩阵显示,release-0.7 支持 Kubernetes 1.18 及以上版本[^1]。 #### 下载资源文件 通过 Git 或者直接从 GitHub 上获取最新发布的 kube-prometheus 资源文件集合。这一步骤通常涉及克隆仓库至本地环境以便后续操作: ```bash git clone https://github.com/prometheus-operator/kube-prometheus.git cd kube-prometheus ``` #### 修改资源配置 依据实际需求调整默认设置,在 `manifests/` 文件夹下可以找到多个 YAML 文件用于定义各类组件和服务。对于特定场景下的定制化修改尤为重要,比如增加额外的服务发现规则或是自定义告警条件等。 #### 应用配置到集群 利用 kubectl 工具将准备好的资源应用到目标 Kubernetes 集群当中。在此之前建议先创建一个专门用来承载 Prometheus 组件的命名空间(如 monitoring)。执行如下命令完成安装过程: ```bash kubectl create namespace monitoring kubectl apply -f manifests/setup/ kubectl apply -f manifests/ ``` 上述指令会依次部署必要的 CRD 对象以及核心功能模块,包括但不限于 Alertmanager, Grafana 和 Node Exporter 等服务实例[^3]。 #### 检查部署状态 最后可以通过查询 Pod 列表来验证各个组件是否正常启动运行,并处于 Running 状态。如果遇到任何异常情况,则需要进一步排查日志信息找出原因所在。 ```bash $ kubectl get pod -n monitoring ``` 一旦所有 Pods 均进入稳定的工作模式之后,即表示整个监控体系已经搭建完毕并且能够有效地收集来自节点和容器内部的各项性能指标数据了。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值