使用prometheus operator监控部署在k8s集群外的mysql实例

问题背景

       平台使用了mysql,部署在k8s集群之外,但是prometheus operator部署在集群内部,涉及如何监控外部的mysql实例问题。

问题调研

      MySQL的监控可以使用prometheus的mysql-exporter暴露metrics;对于mysql处在k8s集群外场景,使用手工创建k8s的endpoint对象,创建时指定endpoint对象的ip地址为mysql所在主机的ip地址,以此来暴露外部mysql服务到k8s集群。

操作步骤

  1.登录运行的mysql实例,创建mysql-exporter连接mysql需要的用户,授予相应权限。

mysql -uroot -pXXXX -h 127.0.0.1

CREATE USER 'mysqlexporter'@"%"  IDENTIFIED BY 'mysqlexporter';

GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'mysqlexporter'@'%'  IDENTIFIED BY 'mysqlexporter' WITH MAX_USER_CONNECTIONS 30; 

GRANT select on performance_schema.* to "mysqlexporter"@"%" IDENTIFIED BY 'mysqlexporter';

flush privileges;    

 2. 运行mysql-exporter容器,利用上一步创建的账户密码信息,通过DATA_SOURCE_NAME环境变量传入连接mysql实例的信息,注意需要暴露mysql-exporter的9104端口。

 docker run -d  -p 9104:9104  -e DATA_SOURCE_NAME="mysqlexporter:mysqlexporter@(10.233.71.70:3306)/mysql"  10.233.71.70:60080/alaudak8s/mysql-exporter:latest

 3.检查通过mysql-exporter的metrics,是否可以正常获取到mysql信息;其中mysql_up 为1表示正常采集到数据。

4.创建servicemonitor的crd对象,其metadat的label要和prometheus的crd对应的serviceMonitorSelector匹配

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  labels:
    app: exporter-mysql
    component: mysql-exporter
    prometheus: kube-prometheus  # 此处label要和prometheus的crd的serviceMonitorSelector匹配
  name: kube-prometheus-exporter-mysql
  namespace: alauda-system
spec:
  endpoints:
  - interval: 15s
    port: metrics
  jobLabel: component
  namespaceSelector:
    matchNames:
    - alauda-system
  selector:
    matchLabels:
      app: exporter-mysql
      component: mysql-exporter

5.创建service对象

apiVersion: v1
kind: Service
metadata:
  labels:   #此处label要和上一步创建的servicemonitor对象的seletor匹配
    app: exporter-mysql
    component: mysql-exporter
  name: kube-prometheus-exporter-mysql
  namespace: alauda-system
spec:
  type: ClusterIP
  ports:
  - name: metrics
    port: 9104
    protocol: TCP
    targetPort: 9104

 6、创建与service对象同名的endpoint对象,ip信息为外部mysql实例所在的主机的ip地址

apiVersion: v1
kind: Endpoints
metadata:
    name: kube-prometheus-exporter-mysql #此处name要和上一步创建的service对象name相同
	namespace: alauda-system
    labels:
        k8s-app: mysql-metrics
subsets:
- addresses:
  - ip: 10.233.71.70   # ip信息为外部mysql实例所在的主机的ip地址
  - ip: 10.233.71.72
  ports:
    - name: metrics
      port: 9104
      protocol: TCP

7.登录prometheus的web界面,查看是否正常采集到mysql实例数据。

原文地址:https://www.cnblogs.com/360linux/p/13062060.html