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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM