zoukankan      html  css  js  c++  java
  • docker swarm cAdvisor+InfluxDB+Grafana 监控

    docker swarm集群的监控方案很多,cAdvisor+InfluxDB+Grafana方案功能强大灵活。最重要的是这个方案开源、免费、易用,是不花钱版监控方案。参考文档:https://botleg.com/stories/monitoring-docker-swarm-with-cadvisor-influxdb-and-grafana/

    组件说明
    cAdvisor:数据收集模块,需要部署在集群中的每一个节点上,当然前提条件是节点接受task。在本次实验中,共有三个节点,因为其中一个节点做过drain,不接受任何task调度,所以最后结果是部署在两个节点上。
    InfluxDB:数据存储模块。
    Grafana:数据展示模块
    环境准备
    docker版本:18.04.0 CE。

    参考https://blog.csdn.net/dkfajsldfsdfsd/article/details/79923218 创建包含三个节点的docker swarm集群。
    

    创建docker compose文件
    在manager结点上创建文件,并输入如下内容:

    version: '3'
     
    services:
      influx:
        image: influxdb
        volumes:
          - influx:/var/lib/influxdb
        deploy:
          replicas: 1
          placement:
            constraints:
              - node.role == manager
     
      grafana:
        image: grafana/grafana
        ports:
          - 0.0.0.0:3000:3000
        volumes:
          - grafana:/var/lib/grafana
        depends_on:
          - influx
        deploy:
          replicas: 1
          placement:
            constraints:
              - node.role == manager
     
      cadvisor:
        image: google/cadvisor
        hostname: '{{.Node.Hostname}}'
        command: -logtostderr -docker_only -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=influx:8086
        volumes:
          - /:/rootfs:ro
          - /var/run:/var/run:rw
          - /sys:/sys:ro
          - /var/lib/docker/:/var/lib/docker:ro
          - /sys/fs/cgroup/cpu,cpuacct:/sys/fs/cgroup/cpuacct,cpu:rw
          - /dev/disk/:/dev/disk:ro
        depends_on:
          - influx
        deploy:
          mode: global
     
    volumes:
      influx:
        driver: local
      grafana:
        driver: local
    

    部署容器栈
    在manager节点上执行如下命令:

    docker stack deploy -c docker-stack.yml monitor
    
    命令返回以后并不代表task已经完成部署,需要花一些时间,运行如下命令监控容器栈的部署状态:
    

    docker stack services monitor
    如下图所示:

    当红框中的数字前后匹配时,代表容器栈完成部署,再执行后序步骤。

    创建名称为cadvisor数据库存储数据
    执行如下命令,确认monitor_cadvisor服务运行的node:

    docker service ps monitor_influx
    结果如下图红框所示:

    登录worker2结点,执行事下指令创建数据库:
    
    docker exec `docker ps | grep -i influx | awk '{print $1}'` influx
    -execute 'CREATE DATABASE cadvisor'
    

    设置Grafana
    因为Grafana被部署在了worker1节点上,在浏览器中访问http://192.168.30.40:3000,使用默认的用户名密码:adminadmin,如下图:

    点击"Add data source"添加数据源。如下图所示,按图中红框填写,其它项忽略:

    点击"Save &Test",如果出现"Data source is working"表示数据源添加成功。
    
    增加Dashboard配置。首先从
    
       1.  https://github.com/botleg/swarm-monitoring/blob/master/dashboard.json
       2.  https://grafana.com/dashboards/1367
    
    下载示例配置文件,如下图所示,按提示上传
    
    配置文件:
    
    至此,docker swarm集群监控系统部署完成,可以实现对宿主机及其上运行的容器的监控。在此基础上可实验其它一些功能,如自义Dashboard、自定义告警规则等。由本示例可以看出,这个方案的关键点是Dashboard配置,配置的好的话显示效果就好,非常灵活。
    

    主机监控dashboard:

    https://grafana.com/dashboards/159
    

    redis-export:

     https://github.com/oliver006/redis_exporter/releases
    
    #下载grafana的redis的prometheus-redis_rev1.json模板
    wget  https://grafana.com/api/dashboards/763/revisions/1/download
    // 在grafana中导入json模板
    

    rabbitmq-export:

    2、export部署
    // 下载:

    https://github.com/kbudde/rabbitmq_exporter/releases
    
    tar -xvf rabbitmq_exporter-0.20.0.linux-amd64.tar.gz
    cd rabbitmq_exporter-0.20.0.linux-amd64
    RABBIT_USER=guest RABBIT_PASSWORD=guest OUTPUT_FORMAT=JSON PUBLISH_PORT=9099 RABBIT_URL=http://localhost:15672 nohup ./rabbitmq_exporter &
    
    // rabbitmq-dashboard:
     https://grafana.com/dashboards/1165/revisions
    

    mysql-export

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

    mysqld_exporter需要连接到Mysql,所以需要Mysql的权限,我们先为它创建用户并赋予所需的权限:

    mysql> GRANT REPLICATION CLIENT, PROCESS ON *.* TO 'prom'@'localhost' identified by 'amnt@#*IK<1qaz';
    mysql> GRANT SELECT ON performance_schema.* TO 'prom'@'localhost';
    mysql> flush privileges;
    

    创建.my.cnf文件并运行mysqld_exporter:

    $ cd /usr/local/services/prometheus_exporters
    $ cat << EOF > .my.cnf
    [client]
    user=prom
    password=abc123
    host=192.168.30.49
    EOF
    $ nohup /opt/prometheus_exporters/mysqld_exporter -config.my-cnf=".my.cnf" &
    

    $ docker pull prom/mysqld-exporter
    mysqld_exporter需要连接到mysql,需要mysql的权限,需要先为他创建用户并赋予所需的权限:

    CREATE USER 'mysqlexporter'@'localhost' IDENTIFIED BY 'msyqlexporter';
    GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost'
      WITH MAX_USER_CONNECTIONS 3;
    然后在docker中运行exporter,其中DATA_SOURCE_NAME是环境变量,用于连接数据库。
    
    $ docker run -d           
    -p 9104:9104         
    -e DATA_SOURCE_NAME="mysqlexporter:mysqlexporter@(localhost:3306)/data_store" prom/mysqld-exporter
    此时再刷下localhost:9090/targets,就可以看到mysql的state转为UP,即已经成功的监测了mysql。
    

    zookeeper

    wget https://github.com/carlpett/zookeeper_exporter/releases/download/v1.0.2/zookeeper_exporter
    
  • 相关阅读:
    第一个springboot程序,初识springboot
    创建一个简单的springBoot项目的两种方式
    vue过程中遇到的Uncaught (in promise) TypeError: Cannot read property '$message' of undefined
    springboot redis的db动态切换没有作用
    docker redis chown: changing ownership of '.': Permission denied
    axios url携带参数问题(params与data的区别)
    docker安装mysql8.0并挂载到主机
    android与服务器的登录验证与安全设计
    团队冲刺10 5.11
    构建之法01
  • 原文地址:https://www.cnblogs.com/flyhgx/p/9234596.html
Copyright © 2011-2022 走看看