利用谷歌开源工具cAdvisor 结合influxdb存储+Grafana前端展示进行Docker容器的监控

简介: 一、Docker 监控方式1.利用docker 的 docker stats API 命令: docker stats [容器ID/容器名称][root@docker ~]# docker stats ...

一、Docker 监控方式

1.利用docker 的 docker stats API 

命令: docker stats [容器ID/容器名称]

复制代码
[root@docker ~]# docker stats --help

Usage:    docker stats [OPTIONS] [CONTAINER...]

Display a live stream of container(s) resource usage statistics

  -a, --all          Show all containers (default shows just running)
  --help             Print usage
  --no-stream        Disable streaming stats and only pull the first result
复制代码

参数:-a, --all   表示查看所有容器包括已经exit状态的

     --no-stream  表示仅拉取第一次的请求结果后就结束

示例:查看下某个容器的状态

[root@docker ~]# docker stats --no-stream cadvisor
CONTAINER           CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O
cadvisor            1.48%               62.48 MB / 3.977 GB   1.57%               4.902 MB / 378 MB   18.93 MB / 0 B

从上面可以看到容器的资源使用,包括CPU、内存、内存使用率、网络入口IO、磁盘IO、及内存LIMIT。该方式比较简单明了,就像系统自带的top命令一样。

 

2.利用谷歌开源工具cAdvisor(官网

创建容器,如果docker主机上没有该容器,可能需要喝杯热茶的时间(去docker hub上下载镜像,视网速)

[root@docker ~]# docker run   --volume=/:/rootfs:ro   --volume=/var/run:/var/run:rw   --volume=/sys:/sys:ro   --volume=/var/lib/docker/:/var/lib/docker:ro   --publish=8080:8080   --detach=true   --name=cadvisor-test   google/cadvisor:latest

创建完成后,可以访问http://主机ip:8080/,如下图

 

3.利用独立开源项目Prometheus监控工具(官网),后续有时间会专门对其进行系统学习下。

 

来自官网资料:Prometheus及其一些生态系统组件的总体架构

 

二、本文案例开源工具介绍

1.cAdvisor (Container Advisor)该程序是由Google 开源的一个项目。提供了给使用容器的用户对其主机上运行容器的资源使用情况和性能的了解,它是一个以容器方式运行的守护进程,用来数据采集、汇聚、可视化和导出运行中容器的信息。具体来说,对于每个容器,它保留资源的隔离参数,历史资源使用,完整历史资源使用的直方图,和网络统计。此数据由机器上的容器输出。

2.InfluxDB(官网)是一个由Go编写的开源数据库,专门用于处理具有高可用性和高性能要求的时间序列数据。InfluxDB安装没有外部依赖,可以在几分钟内完成,然而它的灵活性、可扩展性足够复杂的部署。具有实时分析、历史分析、预测分析、异常检测等特点。

3.Grafana(官网)提供了一个强大而优雅的方式来创建、探索,并可以共享仪表板和数据。也是用于查询、可视化时间序列和指标的主要工具。支持的数据源有Graphite、Prometheus、Elasticsearch、InfluxDB、OpenTSDB、AWS CloudWatch等,并且在4.0及更高版本中加入了警报功能(but现在只支持一些数据源。它们包括Graphite,Prometheus,InfluxDB和OpenTSDB)。目前报警规则只有Graph面板支持,Table和Singlestat会在未来版本中出现。支持的通知方式有Email、即时通讯工具Slack、Webhook等。

三、监控部署

1.创建第一个容器influxdb

[root@docker ~]# docker run -d -p 8083:8083 -p 8086:8086 --expose 8090 --expose 8099 --name influxsrv -e PRE_CREATE_DB=cadvisor tutum/influxdb:0.13

注:默认情况下,InfluxDB使用以下网络端口:

  TCP端口8083用于InfluxDB的管理面板
  TCP端口8086用于通过InfluxDB的HTTP API进行客户端 - 服务器的通信

创建完成后,打开浏览器,访问http://ip:8083,默认用户名,密码是root、root,如下图


2.创建cAdvisor容器并将其link到InfluxDB容器

[root@docker ~]# docker run --volume=/:/rootfs:ro --volume=/var/run:/var/run:rw --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:ro --publish=8080:8080 --detach=true --link influxsrv:influxsrv --name=cadvisor google/cadvisor:v0.24.1 -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=influxsrv:8086


3.创建Grafana容器并将其链接到InfluxDB容器:

docker run -d -p 3000:3000 -e INFLUXDB_HOST=localhost -e INFLUXDB_PORT=8086 -e INFLUXDB_NAME=cadvisor -e INFLUXDB_USER=root -e INFLUXDB_PASS=root --link influxsrv:influxsrv --name grafana grafana/grafana:3.1.1

4.打开浏览器,访问http://ip:3000/ Grafana界面

        如有转载,请注明原文出处。飞走不可http://www.cnblogs.com/hanyifeng/p/6233851.html

5.登录上去后,将Influxdb设置为Grafana的数据源,按照下图添加:

之后点击Add data source,add增加。信息如下:

最后保存测试连接。

6.我们使用Grafana设置我们的第一个Dashboard,并可视化来自cAdvisor的数据。

首先,添加一个Dashboard:

然后新建一个graph,如下图:

先设置Graph中的每个标题选项,如下:

General:

  Title:Memory

  Height:300px

Metrics:输入查询语句及选择数据源,default 已经是influxdb,可以不用设置(点击 可切换模式 )。

  query 1: SELECT mean("value") FROM "memory_usage" WHERE container_name='cadvisor' AND container_name='cadvisor' AND $timeFilter GROUP BY time($interval), "container_name" fill(previous)

  ALIAS BY:$tag_container_name.memory

  Format as:Time series

Axes:主要修改一下Y轴的 显示单位

  Left Y-->Unit:bytes、

Legend:可以在图标左下方显示统计的最大、最小、及平均值等。

Display:主要修改下显示的波浪线或者点,还可以修改区域的显示深度(可以按个人喜好)

  Mode Options-->Fill:4、LineWidth:2

修改设置完成后,记得点击正上面的保存按钮。完整的一个dashboard就出来了。如下图:

点击ADD ROW ,可以增加其它监控Graph、Table、Text等。剩下需要监控的如CPU、磁盘IO、网络IO。创建方式和上面基本一致,除了左Y轴那里需要注意下单位。

7.完整的几个图,以及查询语句如下:

cpu 查询:

SELECT derivative(mean("value"), 10s) FROM "cpu_usage_total" WHERE container_name='cadvisor' AND $timeFilter GROUP BY time($interval), container_name fill(previous)

 

网络 i/o 查询:
tx:

SELECT derivative(mean("value"), 10s)/8 FROM "tx_bytes" WHERE container_name='cadvisor' AND $timeFilter GROUP BY time($interval), container_name fill(previous)

rx:

SELECT derivative(mean("value"), 10s)/8 FROM "rx_bytes" WHERE container_name='cadvisor' AND $timeFilter GROUP BY time($interval), container_name fill(previous)

 

文件系统使用及limit:

fs

SELECT mean("value") FROM "fs_usage" WHERE container_name='cadvisor' AND container_name='cadvisor' AND $timeFilter GROUP BY time($interval), "container_name" fill(previous)

limit

SELECT mean("value") FROM "fs_limit" WHERE container_name='cadvisor'  AND $timeFilter GROUP BY time($interval), "container_name" fill(previous)

 

 

四、总结一下

   Docker 容器的监控不容忽视,毕竟里面是有业务程序在跑的,有了监控,还要有相关预警规则,及报警的处理动作,就像zabbix 一样。不知道cAdvisor监控Docker 集群有木有其它的开源技术方案,毕竟Dcoker 服务器是集群存在的。下次我找到好的技术方案,再来分享。

  如果文中有错误,还望大家不吝赐教。

 

如有转载,请注明原文出处。飞走不可http://www.cnblogs.com/hanyifeng/p/6233851.html

 

 

 

参考资料:

https://segmentfault.com/a/1190000002527178

https://www.brianchristner.io/how-to-setup-docker-monitoring/


目录
相关文章
|
存储 前端开发 安全
前端如何存储数据:Cookie、LocalStorage 与 SessionStorage 全面解析
本文全面解析前端三种数据存储方式:Cookie、LocalStorage与SessionStorage。涵盖其定义、使用方法、生命周期、优缺点及典型应用场景,帮助开发者根据登录状态、用户偏好、会话控制等需求,选择合适的存储方案,提升Web应用的性能与安全性。(238字)
1310 0
|
JSON 前端开发 JavaScript
惊艳!阿里开源 15.2k Star 企业级低代码引擎揭秘,如何变革前端开发方式?
阿里巴巴开源的 LowCodeEngine 是一款企业级低代码引擎,具备可视化编排、UI 渲染、代码生成等全链路能力。支持 React、Vue、Rax 等框架,提供高扩展性与类型安全,助力高效开发,降低维护成本,适用于后台系统、多端同步等场景。
1845 1
|
JSON 监控 前端开发
AMIS:百度开源的前端低代码神器,18.4k star 背后的开发效率提升利器
AMIS(前端低代码框架)是百度开源的低代码前端框架,基于纯 JSON 配置即可生成完整后台页面,包括表单、表格、图表、CRUD 列表,支持可视化拖拽编辑。,星标数已达 18.4k,百度内部已沉淀超过 5 万个页面,广泛应用于审核系统、数据管理后台、模型监控等落地场景
1898 0
|
人工智能 自然语言处理 前端开发
DeepSite:基于DeepSeek的开源AI前端开发神器,一键生成游戏/网页代码
DeepSite是基于DeepSeek-V3模型的在线开发工具,无需配置环境即可通过自然语言描述快速生成游戏、网页和应用代码,并支持实时预览效果,显著降低开发门槛。
2160 93
DeepSite:基于DeepSeek的开源AI前端开发神器,一键生成游戏/网页代码
|
Web App开发 前端开发 关系型数据库
GitHub 2.8k star 开源既封神,“Liquid‑Glass‑React”,让你前端界面瞬间拥有苹果级液态玻璃效果!
Liquid-Glass-React 是一款开源前端组件,旨在将 Apple iOS 26 的“液态玻璃”视觉效果引入 React 应用。凭借逼真折射、多种反射模式、响应式交互及高度可配置性,它已获得 2.8k stars,成为提升 UI 质感的热门工具。
1511 0
|
Prometheus 监控 Cloud Native
Prometheus+Grafana(docker安装)
本文档详细介绍了如何使用Docker容器快速部署Prometheus监控系统和Grafana数据可视化平台。该方案适用于需要快速搭建监控环境的开发测试场景,具备部署简单、资源占用低、易于维护等特点。
|
人工智能 前端开发 数据可视化
天都塌了,17K+ Star 的AI开源神器!Onlook 如何颠覆前端开发与设计协作?怎么办
Onlook是一款开源的视觉优先代码编辑器,结合Figma直观操作与VS Code强大功能,支持浏览器中实时构建、编辑和部署React应用。项目已获17K+Star,提供快速创建Next.js应用、所见即所得的可视化编辑、AI驱动开发工具及一键部署协作等功能,是前端开发与设计协作的理想选择。
1498 0
|
JSON 前端开发 数据可视化
前端开发者狂喜!30K star开源组件库,界面美观度/开发速度双碾压!
嗨,大家好,我是小华同学。Layui 是一款开源前端 UI 组件库,具有极简设计、强大功能和卓越性能,支持布局、表单、表格、弹层等六大模块,组件高度可定制。它无需复杂构建工具,直接面向浏览器开发,极大提升开发效率与界面美观度。适合新手和老手,快来试试吧!
926 0
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
1696 14
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
1107 0

推荐镜像

更多