• 使用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实例数据。

  • 相关阅读:
    ajax提交 返回中文乱码问题
    JAVA spring配置文件总结
    缓存线程池的作用
    myclipse里有感叹号的问题,希望可以帮到各位
    html 鼠标样式 鼠标悬停 小手样式
    在div中注入html代码
    发送邮件的几种方法(C#发邮件 和 js前台实现都有)C#后台自动发邮件 js发邮件
    Angular js 复制粘贴
    C# ASP 面试题 2017
    cocos-lua3.17 cocos studio lua动画使用
  • 原文地址:https://www.cnblogs.com/360linux/p/13062060.html
Copyright © 2020-2023  润新知