prometheus-operator监控mysql

之前有一个是使用docker-compose部署的exporter服务.这篇文章使用deploy部署服务.

先看下配置信息

直接上yaml文件,这里为了简单,将所有的配置都写到了一个文件中,这里只是做了配置,后面才是创建相关信息,以及展开说明了下各个项目的配置

[root@prometheus-operator /zpf/prometheus/exporter]$cat deploy-all.yaml
---
# ConfigMap 配置:存储 MySQL Exporter 的连接配置
apiVersion: v1
kind: ConfigMap
metadata:
  name: mysql-exporter-config  # ConfigMap 名称
  namespace: monitoring       # 部署在 monitoring 命名空间
data:
  my.cnf: |                   # 配置文件内容,会被挂载到容器中
    [client]
    host=192.168.59.21        # MySQL 服务器地址
    user=app                  # 连接用户名
    password=mysql            # 连接密码
    port=3306                 # MySQL 端口

# Deployment 配置:定义 MySQL Exporter 的部署方式
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql-exporter        # Deployment 名称
  namespace: monitoring       # 部署在 monitoring 命名空间
  labels:
    app: mysql-exporter       # 标签,用于 Service 和 ServiceMonitor 选择
spec:
  replicas: 1                 # 副本数量
  selector:
    matchLabels:
      app: mysql-exporter     # 选择器,匹配 Pod 标签
  template:
    metadata:
      labels:
        app: mysql-exporter   # Pod 标签,与 selector 匹配
    spec:
      imagePullSecrets:
        - name: aliyun-docker-images-registry  # 私有镜像拉取密钥
      containers:
      - name: mysql-exporter
        image: registry.cn-beijing.aliyuncs.com/scorpio/mysqld-exporter:0.17.2  # 镜像地址
        args:                   # 启动参数
          - "--collect.info_schema.processlist"    # 启用各种收集器
          - "--collect.info_schema.innodb_metrics"
          - "--collect.info_schema.tablestats"
          - "--collect.info_schema.tables"
          - "--collect.info_schema.userstats"
          - "--collect.engine_innodb_status"
          - "--config.my-cnf=/etc/mysql/my.cnf"    # 指定配置文件路径
        ports:
        - containerPort: 9104   # 容器暴露的端口
        volumeMounts:
        - name: config-volume   # 挂载 ConfigMap 到容器
          mountPath: /etc/mysql
      volumes:
      - name: config-volume     # 定义 volume,来源是 ConfigMap
        configMap:
          name: mysql-exporter-config  # 引用上面定义的 ConfigMap

# Service 配置:为 MySQL Exporter 创建服务端点
---
apiVersion: v1
kind: Service
metadata:
  name: mysql-exporter        # Service 名称
  namespace: monitoring       # 部署在 monitoring 命名空间
  labels:
    app: mysql-exporter       # 标签,用于 ServiceMonitor 选择
spec:
  selector:                   # 选择器,关联到 Deployment 的 Pod
    app: mysql-exporter       # 匹配 Deployment 中定义的 Pod 标签
  ports:
    - name: http-metrics      # 端口名称,被 ServiceMonitor 引用
      port: 9104              # Service 端口
      targetPort: 9104        # 目标容器端口
      protocol: TCP
  type: ClusterIP             # 服务类型,集群内部访问

# ServiceMonitor 配置:告诉 Prometheus 如何发现和抓取指标
---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: mysql-exporter        # ServiceMonitor 名称
  namespace: monitoring       # 部署在 monitoring 命名空间
spec:
  endpoints:
  - port: http-metrics        # 引用 Service 中定义的端口名称
    interval: 15s             # 抓取间隔
  selector:
    matchLabels:
      app: mysql-exporter     # 选择器,匹配 Service 的标签
  namespaceSelector:
    matchNames:
    - monitoring              # 只监控 monitoring 命名空间中的服务

说明一下各部分的作用:

部署ConfigMap

用于后面deploy文件的挂载,实现mysql-client的配置持久化

#配置一个Configmap,将mysql-client需要的配置信息,后面会以configmap的形式挂载到deploy中,
# ConfigMap 配置:存储 MySQL Exporter 的连接配置
apiVersion: v1
kind: ConfigMap
metadata:
  name: mysql-exporter-config  # ConfigMap 名称
  namespace: monitoring       # 部署在 monitoring 命名空间
data:
  my.cnf: |                   # 配置文件内容,会被挂载到容器中
    [client]
    host=192.168.59.21        # MySQL 服务器地址
    user=app                  # 连接用户名
    password=mysql            # 连接密码
    port=3306                 # MySQL 端口

创建DeployMent,是mysqld-exporter的工作容器主体
# Deployment 配置:定义 MySQL Exporter 的部署方式
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql-exporter        # Deployment 名称
  namespace: monitoring       # 部署在 monitoring 命名空间
  labels:
    app: mysql-exporter       # 标签,用于 Service 和 ServiceMonitor 选择
spec:
  replicas: 1                 # 副本数量
  selector:
    matchLabels:
      app: mysql-exporter     # 选择器,匹配 Pod 标签
  template:
    metadata:
      labels:
        app: mysql-exporter   # Pod 标签,与 selector 匹配
    spec:
      imagePullSecrets:
        - name: aliyun-docker-images-registry  # 私有镜像拉取密钥
      containers:
      - name: mysql-exporter
        image: registry.cn-beijing.aliyuncs.com/scorpio/mysqld-exporter:0.17.2  # 镜像地址
        args:                   # 启动参数
          - "--collect.info_schema.processlist"    # 启用各种收集器
          - "--collect.info_schema.innodb_metrics"
          - "--collect.info_schema.tablestats"
          - "--collect.info_schema.tables"
          - "--collect.info_schema.userstats"
          - "--collect.engine_innodb_status"
          - "--config.my-cnf=/etc/mysql/my.cnf"    # 指定配置文件路径
        ports:
        - containerPort: 9104   # 容器暴露的端口
        volumeMounts:
        - name: config-volume   # 挂载 ConfigMap 到容器
          mountPath: /etc/mysql
      volumes:
      - name: config-volume     # 定义 volume,来源是 ConfigMap
        configMap:
          name: mysql-exporter-config  # 引用上面定义的 ConfigMap
创建Service,用于代理上面创建的deploy服务对外提供访问用

# Service 配置:为 MySQL Exporter 创建服务端点
---
apiVersion: v1
kind: Service
metadata:
  name: mysql-exporter        # Service 名称
  namespace: monitoring       # 部署在 monitoring 命名空间
  labels:
    app: mysql-exporter       # 标签,用于 ServiceMonitor 选择
spec:
  selector:                   # 选择器,关联到 Deployment 的 Pod
    app: mysql-exporter       # 匹配 Deployment 中定义的 Pod 标签
  ports:
    - name: http-metrics      # 端口名称,被 ServiceMonitor 引用
      port: 9104              # Service 端口
      targetPort: 9104        # 目标容器端口
      protocol: TCP
  type: ClusterIP             # 服务类型,集群内部访问
创建operator使用的Monitoring资源,

创建这个资源服务的作用是将已经对外提供的服务让prometheus-operator读取到.

也就是prometheus知道从哪里拉取监控数据


# ServiceMonitor 配置:告诉 Prometheus 如何发现和抓取指标
---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: mysql-exporter        # ServiceMonitor 名称
  namespace: monitoring       # 部署在 monitoring 命名空间
spec:
  endpoints:
  - port: http-metrics        # 引用 Service 中定义的端口名称
    interval: 15s             # 抓取间隔
  selector:
    matchLabels:
      app: mysql-exporter     # 选择器,匹配 Service 的标签
  namespaceSelector:
    matchNames:
    - monitoring              # 只监控 monitoring 命名空间中的服务

创建上面的各项服务

创建资源
#创建资源
[root@prometheus-operator /zpf/prometheus/exporter]$kubectl  create -f deploy-all.yaml
service/mysql-exporter created
servicemonitor.monitoring.coreos.com/mysql-exporter created
configmap/mysql-exporter-config created
deployment.apps/mysql-exporter created
查看各部分创建结果
#查看ConfigMap创建结果
[root@prometheus-operator /zpf/prometheus/exporter]$kubectl get cm -A|grep mysql
monitoring                        mysql-exporter-config                                  1      67s
#查看创建详细信息
[root@prometheus-operator /zpf/prometheus/exporter]$kubectl get cm -n monitoring                        mysql-exporter-config -o yaml
apiVersion: v1
data:
  my.cnf: |
    [client]
    host=192.168.59.21
    user=app
    password=mysql
    port=3306
kind: ConfigMap
metadata:
  creationTimestamp: "2025-04-22T03:09:31Z"
  name: mysql-exporter-config
  namespace: monitoring
  resourceVersion: "8080337"
  uid: 3829a17f-ab58-451f-bffb-614212e9811d

#查看deploy创建结果
[root@prometheus-operator /zpf/prometheus/exporter]$kubectl get deploy -A|grep mysql
monitoring                     mysql-exporter                    1/1     1            1           76s

#查看service创建结果
[root@prometheus-operator /zpf/prometheus/exporter]$kubectl get svc -A|grep mysql
monitoring                     mysql-exporter                            ClusterIP   10.233.37.86    <none>        9104/TCP                        82s
#查看ServiceMonitor创建结果
[root@prometheus-operator /zpf/prometheus/exporter]$kubectl get ServiceMonitor -A|grep mysql
monitoring   mysql-exporter            2m1s
验证页面是否已经抓取到exporter的相关信息

页面已经可以展示mysql-exporter的相关信息.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值