docker stack 部署容器监控方案(cAdvisor、Prometheus、Grafana)
===============================================
2018/7/8_第1次修改 ccb_warlock
===============================================
最近正式业务终于开始上容器,虽然前期通过swarm解决了服务部署和扩展等问题,但是针对容器监控方面缺乏经验甚至是无从入手,因为没有监控数据我根本不知道目前给的资源限制是否合理,业务量激增的时候资源是否可以支撑负载等一系列问题。查资料的时候找到了cAdvisor+Prometheus+Grafana来构建容器的监控数据,而且发现有些做监控服务的公司也基于这个结构上再进行迭代。试验下来这套监控的思路和ELK类似,通过cAdvisor将业务服务器的进行数据收集,Prometheus将数据抓取后存放到自己的时序库中,Grafana则进行图表的展现。
试验过后可以满足当前阶段我对容器监控的需求,故空闲时整理了监控部署的手册。
一、前提条件
- 环境中已经部署了docker swarm(http://www.cnblogs.com/straycats/p/8978135.html)
- 最好也部署了portainer(http://www.cnblogs.com/straycats/p/8978201.html)
- 默认业务服务器为IP:192.168.12.1、监控服务器(prometheus、grafana)为:192.168.12.2
- 默认swarm创建了network:myswarm-net
二、部署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)进入。

参考资料:
docker stack 部署容器监控方案(cAdvisor、Prometheus、Grafana)的更多相关文章
- docker容器监控:cadvisor+influxdb+grafana
cadvisor+influxdb+grafana可以实现容器信息获取.存储.显示等容器监控功能,是目前流行的docker监控开源方案. 方案介绍 cadvisor Google开源的用于监控基础设施 ...
- 容器监控:cadvisor+influxdb+grafana
cAdvisor:Google开源的工具,用于监控Docker主机和容器系统资源,通过图形页面实时显示数据,但不存储:它通过宿主机/proc./sys./var/lib/docker等目录下文件获取宿 ...
- 第 10 章 容器监控 - 078 - Docker 最常用的监控方案
Docker 最常用的监控方案 当 Docker 部署规模逐步变大后,可视化监控容器环境的性能和健康状态将会变得越来越重要. Docker 自带的几个监控子命令: ps .top .stats 功能更 ...
- cAdvisor+Prometheus+Grafana监控docker
cAdvisor+Prometheus+Grafana监控docker 一.cAdvisor(需要监控的主机都要安装) 官方地址:https://github.com/google/cadvisor ...
- 【译】Kubernetes监控实践(2):可行监控方案之Prometheus和Sensu
本文介绍两个可行的K8s监控方案:Prometheus和Sensu.两个方案都能全面提供系统级的监控数据,帮助开发人员跟踪K8s关键组件的性能.定位故障.接收预警. 拓展阅读:Kubernetes监控 ...
- 你必须知道的容器监控 (2) cAdvisor
本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章.上一篇我们了解了docker自带的监控子命令以及开源监控工具Weave Scop ...
- Kubernetes 监控方案之 Prometheus Operator(十九)
目录 一.Prometheus 介绍 1.1.Prometheus 架构 1.2.Prometheus Operator 架构 二.Helm 安装部署 2.1.Helm 客户端安装 2.2.Tille ...
- 14、Docker监控方案(Prometheus+cAdvisor+Grafana)
上一篇文章我们已经学习了比较流行的cAdvisor+InfluxDB+Grafana组合进行Docker监控.这节课来学习Prometheus+cAdvisor+Grafana组合. cAdvisor ...
- Docker 最常用的监控方案 - 每天5分钟玩转 Docker 容器技术(78)
当 Docker 部署规模逐步变大后,可视化监控容器环境的性能和健康状态将会变得越来越重要. 在本章中,我们将讨论几个目前比较常用的容器监控工具和方案,为大家构建自己的监控系统提供参考. 首先我们会讨 ...
随机推荐
- 51nod 1353 树 | 树形DP经典题!
51nod 1353 树 | 树形DP好题! 题面 切断一棵树的任意条边,这棵树会变成一棵森林. 现要求森林中每棵树的节点个数不小于k,求有多少种切法. 数据范围:\(n \le 2000\). 题解 ...
- Android Paging库使用详解
Android分页包能够更轻易地在RecyclerView里面缓慢且优雅地加载数据. 许多应用从数据源消耗数据, 数据源里面有大量的数据, 但是一次却只展示一小部分. 分页包帮助应用观测和展示大量数据 ...
- 【CF472G】Design Tutorial: Increase the Constraints
Description 给出两个01序列\(A\)和\(B\) 要求回答\(q\)个询问每次询问\(A\)和\(B\)中两个长度为\(len\)的子串的哈明距离 哈明距离的值即有多少个位置不相等 ...
- 洛谷P3676 小清新数据结构题 【树剖 + BIT】
题目链接 洛谷P3676 题解 我们先维护\(1\)为根的答案,再考虑换根 一开始的答案可以\(O(n)\)计算出来 考虑修改,记\(s[u]\)表示\(u\)为根的子树的权值和 当\(u\)节点产生 ...
- BZOJ2800 [Poi2012]Leveling Ground 【扩展欧几里得 + 三分 + 堆】
题目链接 BZOJ2800 题解 区间加极难操作,差分之后可转化为两点一加一减 那么现在问题就将每个点暂时独立开来 先判定每个点是否被\((A,B)\)整除,否则无解 之后我们先将\(A,B\)化为互 ...
- JS的类型和值
1.类型 ECMAScript语言中所有的值都有一个对应的语言类型.ECMAScript语言类型包括Undefined.Null.Boolean.String.Number和Object. 对语言引擎 ...
- android上的默认Intent
android上的默认Intenthttp://www.verydemo.com/demo_c189_i276.html
- JDBC详解(一)
一.相关概念介绍 1.1.数据库驱动 这里驱动的概念和平时听到的那种驱动的概念是一样的,比如平时购买的声卡,网卡直接插到计算机上面是不能用的,必须要安装相应的驱动程序之后才能够使用声卡和网卡,同样道理 ...
- MVC4.0中cshtml中怎么解析html编码
http://bbs.csdn.net/topics/391060108?page=1 问题描述: 数据库中存储带有格式的文本,如 <span style="color:#333333 ...
- ASP.NET MVC开发,编辑页面和添加页面基本相同,我们控制器 Add Edit是共用同一个View吗?
http://q.cnblogs.com/q/51693/ 这种的话,一般公用就好了.,如下的写法: [HttpGet] public ActionResult UserManage(int user ...