mysqld_exporter官方文档:

https://github.com/prometheus/mysqld_exporter

下载exporter:

wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.12.1/mysqld_exporter-0.12.1.linux-amd64.tar.gz

设置exporter的密码:

mysql -uroot -p
CREATE USER 'exporter'@'localhost' IDENTIFIED BY '123456';
# 赋予查看主从运行情况查看线程,及所有数据库的权限。
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';

在mysql节点安装exporter:

tar -xf mysqld_exporter-0.12.1.linux-amd64.tar.gz -C /usr/local/
ln -sv mysqld_exporter-0.12.1.linux-amd64/ mysqld_exporter

创建配置文件:

vim .my.cnf
[client]
user=exporter
password=123456

其他的一些选项:

常用参数:
# 选择采集innodb
--collect.info_schema.innodb_cmp
# innodb存储引擎状态
--collect.engine_innodb_status
# 指定配置文件
--config.my-cnf=".my.cnf

试运行:

./mysqld_exporter --config.my-cnf=.my.cnf

创建systemd文件:

[Unit]
Description=https://prometheus.io
After=network.target
After=mysqld.service

[Service]
ExecStart=/usr/local/mysqld_exporter/mysqld_exporter --config.my-cnf=/usr/local/mysqld_exporter/.my.cnf
Restart=on-failure

[Install]
WantedBy=multi-user.target

启动服务:

systemctl start mysql_exporter.service
systemctl status mysql_exporter.service

查看metrics资源:

http://10.65.104.112:31880/targets

在k8s中:

写资源文件:

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  labels:
    k8s-app: mysql
  name: mysql
  namespace: monitoring
spec:
  endpoints:
  - interval: 30s
    port: http-metrics
  jobLabel: mysql
  namespaceSelector:
    matchNames:
    - kube-system
  selector:
    matchLabels:
      k8s-app: mysql
---
apiVersion: v1
kind: Service
metadata:
  name: mysql
  namespace: kube-system
  labels:
    k8s-app: mysql
spec:
  type: ClusterIP
  clusterIP: None
  ports:
  - name: http-metrics
    port: 9104
    targetPort: 9104
    protocol: TCP
---
apiVersion: v1
kind: Endpoints
metadata:
  labels:
    k8s-app: mysql
  name: mysql
  namespace: kube-system
subsets:
- addresses:
  - ip: 10.3.149.85
  ports:
  - name: http-metrics
    port: 9104
    protocol: TCP

应用资源到k8s集群:

kubectl apply -f mysql-export.yaml

在prometheus中查看如下页面:可以看到mysql已近在资源列表中了,看不到需要等一会。

http://10.65.104.112:31880/targets

在grafana中添加如下模板:添加后即可看到mysql overview 的dashboard页面。

https://grafana.com/grafana/dashboards/7362


如果prometheus server是独立的服务并没有运行在k8s内,则在配置文件中添加如下内容即可:

scrape_configs:
  # 添加作业并命名
  - job_name: 'mysql'
    # 静态添加node
    static_configs:
    # 指定监控端
    - targets: ['10.3.149.85:9104']