当前位置: 首页 > news >正文

Docker监控:cAdvisor+Prometheus+Grafana实战指南

docker监控

随着线上服务的全面容器化,对Docker容器的监控就很重要了。传统的监控系统是物理机的监控,在一个物理机跑多个容器的情况 下 , 我 们 是 没 法 从 一 个 监 控 图 表 里 面 区 分 各 个 容 器 的 资 源 占 用 情 况 的 。 为 了 更 好 的 监 控 容 器 运 行 情 况 , 建 议 采 用cAdvisor+Prometheus+Grafana组合进行Docker监控,或者采用cAdvisor+InfluxDB+Grafana组合进行Docker监控。首先我们先学习Docker自带的几个监控子命令:ps、top和stats。Docker 自带的监控子命令如下:

1、docker ps是我们早已熟悉的命令了,方便我们查看当前运行的容器,示例如下

[root@docker ~] docker ps
CONTAINER ID 	IMAGE 		COMMAND 				CREATED          STATUS        PORTS   NAMES
f8e680582b11 	nginx:latest "/docker-entrypoint.…"   3 minutes ago    Up 3 minutes  80/tcp  cynginx4
6a8f771dc0a9 	nginx 		"/docker-entrypoint.…"    25 minutes ago   Up 25 minutes 80/tcp  cy1
02efda756aa1 	centos:7 	"/bin/bash" 			 17 minutes ago   Up 17 minutes         cy3

2、如果想知道某个容器中运行了哪些进程,可以执行docker top命令,示例如下

[root@docker ~] docker top cy1
UID 	PID 	PPID 	C 	 STIME 	  TTY 	 TIME 	 	CMD
root    10551    10533   0    19:22    pts/0   00:00:00   nginx: master process nginx -g daemonoff;
101 	10604 	10551 	0 	 19:22    pts/0   00:00:00   nginx: worker process

3、docker stats用于显示每个容器各种资源的使用情况,示例如下

[root@docker ~] docker stats
CONTAINER ID 	NAME 	   CPU % 	MEM USAGE / LIMIT 	MEM % 	NET I/O 	 BLOCK I/O 	  PIDS
f8e680582b11 	cynginx4   0.00% 	1.41MiB / 3.84GiB 	0.04% 	656B / 0B 	 0B / 6.66kB   2
02efda756aa1 	cy3 	   0.00%  	388KiB / 3.84GiB 	0.01% 	698B / 0B 	 0B / 0B 	  1
d08393c1e1f3 	cy2 	   0.00%  	8.762MiB / 3.84GiB 	0.22% 	1.2kB / 0B 	 0B / 0B 	  82
6a8f771dc0a9 	cy1	   	   0.00%     1.41MiB / 3.84GiB 	 0.04% 	2.98kB / 0B   0B / 5.12kB  2

默认会显示一个实时变化的列表,展示每个容器的CPU使用率,内存使用量和可用量

注意:容器启动时如果没有特别指定内存limit,stats命令会显示Docker host的内存总量,但这并不意味 着每个容器都能使用到这么多的内存

除此之外docker stats 命令还会显示容器网络和磁盘的 IO 数据

ps,top, stats 这几个命令是Docker自带的,优点是运行方便,很适合想快速了解容器运行状态的场景。 其缺点是输出的数据有限,而且都是实时数据,无法反应历史变化和趋势

docker监控解决方案

因此,我们需要一张图能显示所有容器的运行状态,本次采用现在比较流行的cAdvisor+Prometheus+Grafana组合进行Docker监控。cAdvisor是专门用来采集数据的工具,也是google公司的一款开源产品,Grafana则是前端展示,支持多种数据源,定制非常灵活。而Prometheus则作为数据源,同时存储从cAdvisor获取到的数据。监控解决方案,如图所示

在这里插入图片描述

cAdvisor部署

1、cAdvisor是google开发的容器监控工具,下面部署cAdvisor,示例如下,基于docker部署cAdvisor,对外提供8080服务端口号

[root@docker ~] docker pull google/cadvisorUsing default tag: latest
latest: Pulling from google/cadvisor
ff3a5c916c92: Pull complete
44a45bb65cdf: Pull complete
0bbe1a2fe2a6: Pull complete
Digest: sha256:815386ebbe9a3490f38785ab11bda34ec8dacf4634af77b8912832d4f85dca04
Status: Downloaded newer image for google/cadvisor:latest
docker.io/google/cadvisor:latest[root@docker ~] docker run -d -v /:/rootfs:ro -v /var/run:/var/run:ro -v /sys:/sys:ro -v /var/lib/docker/:/var/lib/docker:ro -v /dev/disk/:/dev/disk:ro -p 8080:8080 --detach=true --name=cadvisor --privileged --device=/dev/kmsg google/cadvisor5c907ea16cb39365031019ce781e5218437ea48b2d44294d760ab59e9b47bc2a

部署完毕后,访问http://ip:8080/containers/docker,即可看到监控界面。如图1所示,显示的是Docker host的监控。如图2所示,显示的是docker容器的监控

在这里插入图片描述

在这里插入图片描述

以上就是cAdvisor的主要功能,总结起来主要两点:

  1. 展示Dockerhost和容器两个层次的监控数据
  2. 展示历史变化数据

由于cAdvisor提供的操作界面略显简陋,而且需要在不同页面之间跳转,并且只能监控一个Docker host,实用性缺陷不足。但cAdvisor的一个亮点是它可以将监控到的数据导出给第三方工具,由这些工具进一步加工处理

我们可以把cAdvisor定位为一个监控数据收集器,收集和导出数据是它的强项,而非展示数据。 cAdvisor支持很多第三方工具,其中就包括下一节要重点学习的Prometheus

prometheus概述

Prometheus(普罗米修斯)是一套开源的监控、报警和时间序列数据库的组合,起始是由SoundCloud公司开发的。随着发展,越来越多公司和组织接受采用Prometheus,社区也十分活跃,他们便将它独立成开源项目,并且有公司来运作。Google SRE的书内也曾提到跟他们BorgMon监控系统相似的实现是Prometheus。现在最常见的Kubernetes容器管理系统中,通常会搭配Prometheus进行监控。

Prometheus基本原理是通过HTTP协议周期性抓取被监控组件的状态,这样做的好处是任意组件只要提供HTTP接口就可以接入监控系统,不需要任何SDK或者其他的集成过程。这样做非常适合虚拟化环境比如VM或者Docker 。

Prometheus应该是为数不多的适合Docker、Mesos、Kubernetes环境的监控系统之一。输出被监控组件信息的HTTP接口被叫做exporter 。目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux 系统信息 (包括磁盘、内存、CPU、网络等等),具体支持的源看:https://github.com/prometheus

1、基于docker部署Prometheus,需要先编写Prometheus配置文件,将cAdvisor数据源添加进来,然后做好时钟同步,示例如下

[root@docker ~] mkdir -p /etc/prometheus
[root@docker ~] vim /etc/prometheus/prometheus.yml
global:scrape_interval: 15sevaluation_interval: 15s
alerting:alertmanagers: - static_configs:- targets:
rule_files:
scrape_configs:- job_name: 'prometheus' static_configs: - targets: ['localhost:9090'] - job_name: 'cadvisor'static_configs: - targets: ['172.25.0.100:8080']
[root@docker ~] chmod 777 /etc/prometheus/prometheus.yml
[root@docker ~] systemctl restart chronyd
[root@docker ~] systemctl enable chronyd

2、部署Prometheus,将编辑好的文件映射到容器中,启动时加上–web.enable-lifecycle的作用是启用远程热加载配置文件,在修改prometheus配置文件后不用重启容器即可生效

[root@docker ~] docker pull prom/prometheus
[root@docker ~] docker run -itd --name=prometheus -p 9090:9090 -v /etc/prometheus/prometheus.yml
:/etc/prometheus/prometheus.yml prom/prometheus:latest --config.file=/etc/prometheus/prometheus.yml --web.enable-lifecycle

如图所示,部署完毕后,访问http://ip:9090/targets,可以看到两个数据源已经UP,其中一个就是cAdvisor

在这里插入图片描述

Grafana部署

Grafana是一个可视化面板(Dashboard),有着非常漂亮的图表和布局展示,功能齐全的度量仪表盘和图形编辑器,支持Graphite、zabbix、InfluxDB、Prometheus和OpenTSDB作为数据源。Grafana主要特性:灵活丰富的图形化选项;可以混合多种风格;支持白天和夜间模式;多个数据源。其项目官方地址为https://grafana.com

1、基于Daocker部署Grafana,示例如下

[root@docker ~] docker pull grafana/grafana
[root@docker ~] docker run -itd --name=grafana -p 3000:3000 grafana/grafana
0ed8d147183ec78568047b351052c69cdf15233867599446fcbd7a6654fbf296

2、部署完毕后,访问http://ip:3000/login,默认账号密码都是admin,如图所示。接下来Grafana会强制用户重新设置登陆密码,如图所示

在这里插入图片描述

在这里插入图片描述

3、如图所示,登陆成功后,点击Adddatasource,创建数据源。或者点击左侧设置图标,也可以创建数据源

在这里插入图片描述

4、如图所示,点击第一个Prometheus

在这里插入图片描述

5、如图所示,填写数据源信息,在URL填写http://ip:9090,点击Save&Test

在这里插入图片描述

6、如图所示,添加仪表盘,鼠标移到左侧的加号位置,点击Import,输入ID号:193

在这里插入图片描述

7、如图所示,点击空白处,就会自动从Grafana官网下载所对应的仪表盘,在prometheus处,选择数据源,点击Import

在这里插入图片描述

8、接下来既可以看到docker容的监控画面,会显示每个容器对CPU、内存和IO的使用情况,如图所示

在这里插入图片描述

总结

  1. 为了更好的监控容器运行情况,建议采用cAdvisor+Prometheus+Grafana组合进行Docker监控
  2. cAdvisor是专门用来采集数据的工具,也是google公司的一款开源产品,Grafana则是前端展示,支持多种数据源,定制非常灵活。而Prometheus则作为数据源,同时存储从cAdvisor获取到的数据
  3. 我们可以把cAdvisor定位为一个监控数据收集器,收集和导出数据是它的强项,而非展示数据
  4. 对于linux系统工程师而言,Docker监控很重要,我们能够通过监控掌握每个容器的当前运行情况。还可以通过监控的历史纪录分析每个容器的运行状况
  5. cAdvisor是专门用来采集数据的工具,也是google公司的一款开源产品,Grafana则是前端展示,支持多种数据源,定制非常灵活。而Prometheus则作为数据源,同时存储从cAdvisor获取到的数据
    linux系统工程师而言,Docker监控很重要,我们能够通过监控掌握每个容器的当前运行情况。还可以通过监控的历史纪录分析每个容器的运行状况
  6. cAdvisor是专门用来采集数据的工具,也是google公司的一款开源产品,Grafana则是前端展示,支持多种数据源,定制非常灵活。而Prometheus则作为数据源,同时存储从cAdvisor获取到的数据
  7. 如果在Grafana仪表盘中看不到数据,很有可能是Dockerhost与你的台式机或者笔记本时间不一致
http://www.dtcms.com/a/477407.html

相关文章:

  • Redis-持久化之AOF
  • Python Redis 教程
  • R语言绘制热图
  • GPU微架构
  • Vue-- Axios 交互(二)
  • 中煤浙江基础建设有限公司网站曹妃甸网站建设
  • phpcms做汽车网站wordpress如何关注博客
  • 读《华为基本法》,聚焦可复用的方法论
  • CAD多面体密堆积_圆柱体试件3D V1.1版本更新
  • JavaScript变量完全指南:从基础定义到高级用法
  • 什么是VR?什么是AR?
  • NineData云原生智能数据管理平台新功能发布|2025年9月版
  • 基于AR技术交互式设备维修的技术方案剖析|阿法龙XR云平台
  • 利用 Meshery 提升云原生管理效率
  • [3dmax自研插件]——3ds Max 智能材质检查器
  • 5G+AR:开启航空维修的智能新时代
  • 长春火车站人工电话企业做响应式网站好吗
  • 竹子林附近网站建设移动互联网技术
  • 基于物联网的体温心率监测系统设计(论文+源码)
  • 股指10月想法
  • 融资业务类型、AMS 的通用支持能力、各业务在 AMS 中的流程实现
  • 波音引领航空维修变革:AR技术重塑行业未来
  • 零基础快速上手Playwright自动化测试
  • ArcGIS Pro 修改单个波段的值并组合输出新的影像数据
  • Vue 脚手架(Vue CLI)
  • 自己建设网站需要花多少钱爱南宁app下载官网最新
  • 蓝牙物联网多个核心应用场景开发与应用细化分析
  • 百度装修网站郑州建设局官网
  • 服务器在线安装插件失败/离线安装VSIX
  • 大连制作网站软件厦门网站建设外贸