zoukankan      html  css  js  c++  java
  • docker stack 部署容器监控方案(cAdvisor、Prometheus、Grafana)

    ===============================================

     2018/7/8_第1次修改                       ccb_warlock

     

    ===============================================

    最近正式业务终于开始上容器,虽然前期通过swarm解决了服务部署和扩展等问题,但是针对容器监控方面缺乏经验甚至是无从入手,因为没有监控数据我根本不知道目前给的资源限制是否合理,业务量激增的时候资源是否可以支撑负载等一系列问题。查资料的时候找到了cAdvisor+Prometheus+Grafana来构建容器的监控数据,而且发现有些做监控服务的公司也基于这个结构上再进行迭代。试验下来这套监控的思路和ELK类似,通过cAdvisor将业务服务器的进行数据收集,Prometheus将数据抓取后存放到自己的时序库中,Grafana则进行图表的展现。

    试验过后可以满足当前阶段我对容器监控的需求,故空闲时整理了监控部署的手册。

     


     一、前提条件


     二、部署Node Exporter、cAdvisor

     在业务服务器(本例为192.168.12.1)中部署Node Exporter、cAdvisor来获取数据。

     2.1 编辑PromLogs-stack.yml

    vi /root/PromLogs-stack.yml

     # 将下面的内容添加到PromLogs-stack.yml文件中,wq保存。

    version: '3.6'
    services:
    
      node-exporter:
        image: prom/node-exporter:v0.16.0
        environment:
          - TZ=Asia/Shanghai
        volumes:
          - /proc:/host/proc
          - /sys:/host/sys
          - /:/rootfs
        deploy:
          mode: global
          # replicas: 1
          restart_policy:
            condition: on-failure
          resources:
            limits:
              cpus: "0.1"
              memory: 64M
          update_config:
            parallelism: 1 # 每次更新1个副本
            delay: 5s # 每次更新间隔 
            monitor: 10s # 单次更新多长时间后没有结束则判定更新失败
            max_failure_ratio: 0.1 # 更新时能容忍的最大失败率
            order: start-first # 更新顺序为新任务启动优先
        ports:
          - 9100:9100
        networks:
          - myswarm-net
    
      cadvisor:
        image: google/cadvisor:v0.30.2
        environment:
          - TZ=Asia/Shanghai
        volumes:
          - /:/rootfs:ro
          - /var/run:/var/run:rw
          - /sys:/sys:ro
          - /var/lib/docker/:/var/lib/docker:ro
        deploy:
          mode: global
          # replicas: 1
          restart_policy:
            condition: on-failure
          resources:
            limits:
              cpus: "0.2"
              memory: 200M
          update_config:
            parallelism: 1 # 每次更新1个副本
            delay: 5s # 每次更新间隔 
            monitor: 10s # 单次更新多长时间后没有结束则判定更新失败
            max_failure_ratio: 0.1 # 更新时能容忍的最大失败率
            order: start-first # 更新顺序为新任务启动优先
        ports:
          - 8080:8080
        networks:
          - myswarm-net
    
    networks:
      myswarm-net:
        external: true

     2.2 部署服务栈 

     1)命令方式

    cd
    docker stack deploy -c PromLogs-stack.yml PromLogs-stack

     2)portainer界面方式(推荐)

     登录portainer(如果是根据上面的教程部署的portainer,浏览器访问http://宿主机IP:9000,在stack中增加PromLogs-stack.yml文件中的内容)


     三、部署Prometheus

     在监控服务器(本例为192.168.12.2)中部署Prometheus来获取数据并存储。

     3.1 创建卷

    docker volume create prometheus-data

    PS.prometheus的数据文件不能直接通过目录映射,试验下来要通过挂载卷的方式才能做持久化。

     3.2 创建映射目录

    mkdir -p /usr/docker-vol/prometheus/conf

     3.3 编辑配置文件prometheus.yml

    vi /usr/docker-vol/prometheus/conf/prometheus.yml

     # 将下面的内容添加到prometheus.yml文件内,wq保存。

    # my global config
    global:
      scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
      evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
      # scrape_timeout is set to the global default (10s).
    
    # Alertmanager configuration
    alerting:
      alertmanagers:
      - static_configs:
        - targets:
          # - alertmanager:9093
    
    # Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
    rule_files:
      # - "first_rules.yml"
      # - "second_rules.yml"
    
    # A scrape configuration containing exactly one endpoint to scrape:
    # Here it's Prometheus itself.
    scrape_configs:
      # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
      - job_name: 'prometheus'
        static_configs:
          - targets: ['localhost:9090']
      
      - job_name: 'node-exporter'
        static_configs:
          - targets: ['192.168.12.1:9100']
    
      - job_name: 'cadvisor'
        static_configs:
          - targets: ['192.168.12.1:8080']

     3.4 编辑prometheus-stack.yml

    vi /root/prometheus-stack.yml

     # 将下面的内容添加到prometheus-stack.yml文件中,wq保存。

    version: '3.6'
    services:
    
      prometheus:
        image: prom/prometheus:v2.3.1
        environment:
          - TZ=Asia/Shanghai
        volumes:
          - /usr/docker-vol/prometheus/conf/prometheus.yml:/etc/prometheus/prometheus.yml
          - prometheus-data:/prometheus
        deploy:
          replicas: 1
          restart_policy:
            condition: on-failure
          resources:
            limits:
              cpus: "0.5"
              memory: 512M
          update_config:
            parallelism: 1 # 每次更新1个副本
            delay: 5s # 每次更新间隔 
            monitor: 10s # 单次更新多长时间后没有结束则判定更新失败
            max_failure_ratio: 0.1 # 更新时能容忍的最大失败率
            order: start-first # 更新顺序为新任务启动优先
        ports:
          - 9090:9090
        networks:
          - myswarm-net
    
    volumes:
      prometheus-data:
        external: true
    
    networks:
      myswarm-net:
        external: true

     3.5 部署服务栈 

     1)命令方式

    cd
    docker stack deploy -c prometheus-stack.yml prometheus-stack

     2)portainer界面方式(推荐)

     登录portainer(如果是根据上面的教程部署的portainer,浏览器访问http://宿主机IP:9000,在stack中增加prometheus-stack.yml文件中的内容)


     四、部署Grafana

     在监控服务器(本例为192.168.12.2)中部署Grafana来呈现Prometheus的信息。

     4.1 创建卷

    docker volume create grafana-data

    PS.grafana的数据文件不能直接通过目录映射,试验下来要通过挂载卷的方式才能做持久化。

     4.2 编辑grafana-stack.yml

    vi /root/grafana-stack.yml

     # 将下面的内容添加到grafana-stack.yml文件中,wq保存。

    version: '3.6'
    services:
    
      grafana:
        image: grafana/grafana:5.2.0
        environment:
          - TZ=Asia/Shanghai
        volumes:
          - grafana-data:/var/lib/grafana
        deploy:
          replicas: 1
          restart_policy:
            condition: on-failure
          resources:
            limits:
              cpus: "0.2"
              memory: 200M
          update_config:
            parallelism: 1 # 每次更新1个副本
            delay: 5s # 每次更新间隔 
            monitor: 10s # 单次更新多长时间后没有结束则判定更新失败
            max_failure_ratio: 0.1 # 更新时能容忍的最大失败率
            order: start-first # 更新顺序为新任务启动优先
        ports:
          - 3000:3000
        networks:
          - myswarm-net
    
    volumes:
      grafana-data:
        external: true
    
    networks:
      myswarm-net:
        external: true

     4.3 部署服务栈 

     1)命令方式

    cd
    docker stack deploy -c grafana-stack.yml grafana-stack

     2)portainer界面方式(推荐)

     登录portainer(如果是根据上面的教程部署的portainer,浏览器访问http://宿主机IP:9000,在stack中增加grafana-stack.yml文件中的内容)


     五、使用

     浏览器访问grafana(本例是:http://192.168.12.2:3000),输入初始账号/密码(admin/admin)进入。


     参考资料:

     1.http://docs.grafana.org/installation/docker/#migration-from-a-previous-version-of-the-docker-container-to-5-1

  • 相关阅读:
    tensorflow学习笔记13
    Java——内部类
    Java——枚举
    Java——代码块
    Java——static
    Java——接口
    Java——final
    Java——权限修饰符
    Java——多态
    Java——抽象类
  • 原文地址:https://www.cnblogs.com/straycats/p/9281889.html
Copyright © 2011-2022 走看看