mysqld-exporter使用docker-compose部署版本,后面再整理个k8s-deploy版本的.
名称 | ip地址 | 端口号 |
---|---|---|
mysql服务 | 192.168.59.21 | 3306 |
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相关信息