prometheus-operator部署服务监控其他节点mysql服务

mysqld-exporter使用docker-compose部署版本,后面再整理个k8s-deploy版本的.

资源清单
名称ip地址端口号
mysql服务192.168.59.213306
k8s集群节点192.168.59.90
说明一下:

这里我使用的是单节点部署k8s服务仅作为测试使用,生产环境根据实际情况做修改.

创建mysql用户,

192.168.59.21

用于exporter到mysql服务上进行数据采集.

创建用户并且授权该用户系统表权限:

-- 创建用户并允许远程连接
CREATE USER 'app'@'%' IDENTIFIED BY 'mysql';
授权app用户,仅允许对mysq数据库下的所有表进行select权限.
GRANT SELECT ON `mysql`.* TO 'app'@'%';

-- 刷新权限
FLUSH PRIVILEGES;
剩下的都在192.168.59.90机器上进行操作.
部署mysqld-exporter

创建本地my.cnf文件,用户挂载到docker-compose中就,进行配置文件持久化,这里使用的是client方式连接所以配置的my.cnf是client的相关配置信息.

翻译一下:就是这个mysqld-exporter是一个mysql 的客户端,.里面安装了msyql客户端程序.然后通过这个程序读取my.cnf的配置,链接到mysql-server,这样就可以监控mysql 数据库的信息了.

#创建my.cnf配置文件
[root@prometheus-operator /zpf/prometheus/exporter/docker-compose]$cat my.cnf
[client]
host=192.168.59.21
user=app
password=mysql
port=3306

创建docker-compose文件,

[root@prometheus-operator /zpf/prometheus/exporter/docker-compose]$cat docker-compose.yaml
version: '3.3'
services:
  mysqld-exporter:
    image: registry.cn-beijing.aliyuncs.com/scorpio/mysqld-exporter:0.17.2
    container_name: mysqld-exporter
    restart: always
    command:
      - '--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=/my.cnf'
    volumes:
      - ./my.cnf:/my.cnf
    ports:
      - 9104:9104

#这里说明下,image镜像地址是我自己的阿里云容器镜像仓库的地址,根据个人需要修改成dockerhub上的地址,也可以吧dockerhub上的镜像拉倒本地使用.

启动docker-compose

并查看相关状态
[root@prometheus-operator /zpf/prometheus/exporter/docker-compose]$docker-compose up -d
[+] Running 1/2
 ⠧ Network docker-compose_default  Created                                                                                                                             0.7s
 ✔ Container mysqld-exporter       Started

#启动成功查看端口
[root@prometheus-operator /zpf/prometheus/exporter/docker-compose]$netstat -lntup|grep 9104
tcp        0      0 0.0.0.0:9104            0.0.0.0:*               LISTEN      897/docker-proxy
tcp6       0      0 :::9104                 :::*                    LISTEN      903/docker-proxy
查看是否有数据返回
#查看是否有数据返回
[root@prometheus-operator /zpf/prometheus/exporter/docker-compose]$curl 192.168.59.90:9104
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>MySQLd Exporter</title>
    <style>body {
  font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,Liberation Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;
  margin: 0;
}
header {
  background-color: #e6522c;
  color: #fff;
  font-size: 1rem;
  padding: 1rem;
}
main {
  padding: 1rem;
}
label {
  display: inline-block;
  width: 0.5em;
}
#pprof {
  border: black 2px solid;
  padding: 1rem;
  width: fit-content;
}

</style>
  </head>
  <body>
    <header>
      <h1>MySQLd Exporter</h1>
    </header>
    <main>
      <h2>Prometheus Exporter for MySQL servers</h2>
      <div>Version: (version=0.17.2, branch=HEAD, revision=e84f4f22f8a11089d5f04ff9bfdc5fc042605773)</div>
      <div>
        <ul>

          <li><a href="/metrics">Metrics</a></li>

        </ul>
      </div>


      <div id="pprof">
      Download a detailed report of resource usage (pprof format, from the Go runtime):
      <ul>
        <li><a href="debug/pprof/heap">heap usage (memory)</a>
        <li><a href="debug/pprof/profile?seconds=60">CPU usage (60 second profile)</a>
      </ul>
      To visualize and share profiles you can upload to <a href="https://pprof.me" target="_blank">pprof.me</a>
      </div>
    </main>
  </body>
</html>
k8s上部署svc,endpoint,以及ServiceMonitoring相关资源,
apiVersion: v1
kind: Service
metadata:
  name: mysql-exporter
  namespace: monitoring  # 假设放在 monitoring 命名空间
  labels:
    app: mysql-exporter
spec:
  ports:
    - name: http-metrics
      port: 9104
      targetPort: 9104
      protocol: TCP
  type: ClusterIP
---
apiVersion: v1
kind: Endpoints
metadata:
  name: mysql-exporter
  namespace: monitoring
subsets:
  - addresses:
      - ip: 192.168.59.90  # 替换为运行 MySQL Exporter 的节点 IP

    ports:
      - name: http-metrics
        port: 9104
        protocol: TCP
---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: mysql-exporter
  namespace: monitoring
spec:
  endpoints:
  - port: http-metrics  # 必须匹配 Service 中的端口名称
    interval: 15s
  selector:
    matchLabels:
      app: mysql-exporter  # 匹配 Service 的标签
  namespaceSelector:
    matchNames:
    - monitoring  # 必须与 Service 同命名空间
----
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: mysql-exporter
  namespace: monitoring
spec:
  endpoints:
  - port: http-metrics  # 必须匹配 Service 中的端口名称
    interval: 15s
  selector:
    matchLabels:
      app: mysql-exporter  # 匹配 Service 的标签
  namespaceSelector:
    matchNames:
    - monitoring  # 必须与 Service 同命名空间
验证资源创建是否成功
#svc创建结果
[root@prometheus-operator /zpf/prometheus/exporter/docker-compose]$kubectl get svc -A|grep mysql
monitoring                     mysql-exporter                            ClusterIP   10.233.22.17    <none>        9104/TCP                        12m
#endpoint创建结果
[root@prometheus-operator /zpf/prometheus/exporter/docker-compose]$kubectl get ep -A|grep mysql
monitoring                     mysql-exporter                            192.168.59.90:9104                                                        12m
#ServiceMonitor创建结果
[root@prometheus-operator /zpf/prometheus/exporter/docker-compose]$kubectl get ServiceMonitor -A|grep mysql
monitoring   mysql-exporter            13m
验证是否有数据返回
#这里已经差动了svc的ip以及后端代理的端口,使用ip+端口信息验证数据返回结果
[root@prometheus-operator /zpf/prometheus/exporter/docker-compose]$curl 10.233.22.17:9104
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>MySQLd Exporter</title>
    <style>body {
  font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,Liberation Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;
  margin: 0;
}
header {
  background-color: #e6522c;
  color: #fff;
  font-size: 1rem;
  padding: 1rem;
}
main {
  padding: 1rem;
}
label {
  display: inline-block;
  width: 0.5em;
}
#pprof {
  border: black 2px solid;
  padding: 1rem;
  width: fit-content;
}

</style>
  </head>
  <body>
    <header>
      <h1>MySQLd Exporter</h1>
    </header>
    <main>
      <h2>Prometheus Exporter for MySQL servers</h2>
      <div>Version: (version=0.17.2, branch=HEAD, revision=e84f4f22f8a11089d5f04ff9bfdc5fc042605773)</div>
      <div>
        <ul>

          <li><a href="/metrics">Metrics</a></li>

        </ul>
      </div>


      <div id="pprof">
      Download a detailed report of resource usage (pprof format, from the Go runtime):
      <ul>
        <li><a href="debug/pprof/heap">heap usage (memory)</a>
        <li><a href="debug/pprof/profile?seconds=60">CPU usage (60 second profile)</a>
      </ul>
      To visualize and share profiles you can upload to <a href="https://pprof.me" target="_blank">pprof.me</a>
      </div>
    </main>
  </body>
</html>

#验证成功
这里的ServiceMonitor就是接入prometheus-operator的配置,

所以通过页面应该是可以看到mysql的相关指标信息.

prometheus监控页面成功显示mysql相关信息

接入grafana.(自己到grafana官网找到相关模板,关联一下就可以.这里不做专门解释.)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值