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)进入。
参考资料:
最新文章
- ORACLE绑定变量隐式转换导致性能问题
- Windows Server 2012及以上安装IIS的步骤
- oracle 多级菜单查询 。start with connect by prior
- WPF总结
- [AngularJS] angular-formly: Default Options
- nginx优化 突破十万并发(转)
- 如何将excel文件中的数百万条数据在1分钟内导入数据库?
- 树莓派玩耍笔记4 -- 树莓派ssh党必备的配置
- java-redis集合数据操作示例(三)
- Scikit-learn:分类classification
- centos7下编译安装nginx-1.16.0
- Java中的一个类型转换问题
- 【PHP篇】运算及流程控制
- 整理了一周的Python资料,包含各阶段所需网站、项目,收藏了慢慢来
- 一脸懵逼学习Zookeeper(动物园管理员)---》高度可靠的分布式协调服务
- Perfect Service [POJ 3398]
- (转)C# WebApi 跨域问题解决方案:CORS
- centos 7.5 安装mysql
- JQuery元素控制方法汇总
- VC++ 实现窗口抖动
热门文章
- linux内核分析 第六周读书笔记
- 构建工具----gradle---可能遇到的问题----Could not reserve enough space for object heap
- 响应式开发(五)-----Bootstrap CSS----------Bootstrap 网格系统
- 2017 3 11 分治FFT
- [THUSC 2016] 补退选 (Trie树)
- vmware中centos7设置静态IP
- Apache+tomcat配置动静分离(一个apache一个tomcat,没有做集群)
- Python完成RF测试用例
- 浏览器json数据格式化
- 数据科学的完整学习路径—Python版(转载)