目录

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

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

2019年10月份写的文章,重新整理了下内容发出

问题背景

       平台使用了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.x.x.x:3306)/mysql"  10.x.x.x:60080/alaudak8s/mysql-exporter:latest

https://i-blog.csdnimg.cn/direct/a974f300af7b4efd9c7daa5ff8438789.png

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

https://i-blog.csdnimg.cn/direct/dbccf0a49d7e4d63b2c87912b7732dd0.png

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

https://i-blog.csdnimg.cn/direct/43fb0062ce134e4ab3d0922f9863e509.png

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.X.X.70   # ip信息为外部mysql实例所在的主机的ip地址
  - ip: 10.X.X.72
  ports:
    - name: metrics
      port: 9104
      protocol: TCP

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

https://i-blog.csdnimg.cn/direct/9852c122fd2f45628bd582927bdeab0d.png

如上图,第二个节点State显示DOWN,因为该节点mysql-exporter的容器暂未拉起来。