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

原文地址:https://www.cnblogs.com/straycats/p/9281889.html

时间: 2024-10-09 09:49:30

docker stack 部署容器监控方案(cAdvisor、Prometheus、Grafana)的相关文章

docker:十分钟构建容器监控系统cAdvisor+InfluxDB+Grafana

1.概念 cAdvisor:用于数据采集InfluxDB:用于数据存储Grafana:用于数据展示 1.1 cAdvisor 它是Google用来监测单节点的资源信息的监控工具.Cadvisor提供了一目了然的单节点多容器的资源监控功能.Google的Kubernetes中也缺省地将其作为单节点的资源监控工具,各个节点缺省会被安装上Cadvisor.总结起来主要两点: 展示 Host 和容器两个层次的监控数据. 展示历史变化数据. ?由于 cAdvisor 提供的操作界面略显简陋,而且需要在不同

cAdvisor+Prometheus+Grafana监控docker

cAdvisor+Prometheus+Grafana监控docker 一.cAdvisor(需要监控的主机都要安装) 官方地址:https://github.com/google/cadvisor CAdvisor是谷歌开发的用于分析运行中容器的资源占用和性能指标的开源工具.CAdvisor是一个运行时的守护进程,负责收集.聚合.处理和输出运行中容器的信息.注意在查找相关资料后发现这是最新版cAdvisor的bug,换成版本为google/cadvisor:v0.24.1 就ok了,映射主机端

你必须知道的容器监控 (2) cAdvisor

本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章.上一篇我们了解了docker自带的监控子命令以及开源监控工具Weave Scope,这一篇我们来了解一下Google开发的容器监控工具cAdvisor.cAdvisor能够较好地展示Host和容器两个层次的监控数据,并且能够展示历史变化数据. # 实验环境:阿里云ECS主机(两台),CentOS 7.4 一.cAdvisor简介 为了解决容器的监控问题,Google开发了一款容器监控工具

Kubernetes 监控方案之 Prometheus Operator(十七)

目录 一.Prometheus 介绍 1.1.Prometheus 架构 1.2.Prometheus Operator 架构 二.安装部署 2.1.安装 一.Prometheus 介绍 Prometheus Operator 是 CoreOS 开发的基于 Prometheus 的 Kubernetes 监控方案,也可能是目前功能最全面的开源方案. Prometheus Operator 通过 Grafana 展示监控数据,预定义了一系列的 Dashboard 1.1.Prometheus 架构

14、Docker监控方案(Prometheus+cAdvisor+Grafana)

上一篇文章我们已经学习了比较流行的cAdvisor+InfluxDB+Grafana组合进行Docker监控.这节课来学习Prometheus+cAdvisor+Grafana组合. cAdvisor是专门用来采集数据的工具,也是google公司的一款开源产品,Grafana则是前端展示,支持多种数据源,定制非常灵活.而prometheus则作为数据源. 整体架构图如下: 一.prometheus 1.Prometheus介绍 Prometheus(普罗米修斯)是一个最初在SoundCloud上

Docker学习(12):Docker监控方案之Prometheus

Docker常用的监控方案 Prometheus Prometheus架构 Prometheus是一种很不错的监控方案,它提供了监控数据搜集.存储.处理.可视化和警告一套完整的解决方案,下面是Prometheus的架构 Prometheus Server Prometheus Server负责从Exporter拉取和存储监控数据,并提供一套灵活的查询语言(PromQL)供用户使用 Exporter Exporter负责收集目标对象(host,container...)的性能数据,并通过HTTP接

docker stack 部署 seafile(http)

=============================================== 2018/5/13_第1次修改                       ccb_warlock =============================================== 由于初步掌握了docker swarm的运行方式,故针对内部IT提供的公共服务也将进行容器化. 最近可能会部署seafile提供给某些同事使用,之前针对centos的部署已经整理了部署手册(http://ww

docker stack 部署 mssql

=============================================== 2019/12/8_第1次修改                       ccb_warlock =============================================== 因为最近的工作项目使用的是mssql(自从知道mssql之后,我几乎不再说起另一个累赘的名字:sql server),不得不去重新学习使用mssql. 我的理解是,使用mssql仅仅只是使用数据表时,用doc

docker stack 部署nginx

=============================================== 2018/7/29_第1次修改                       ccb_warlock =============================================== nginx作为市场占有率较高的http和反向代理服务,各种需要用到http和网页服务的项目经常需要用nginx做反代,故通过docker部署nginx也是最近的工作之一,故整理完部署后进行记录.  一.前提条