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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 一、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、Y-Min:0

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/


相关实践学习
通过可观测可视化Grafana版进行数据可视化展示与分析
使用可观测可视化Grafana版进行数据可视化展示与分析。
目录
相关文章
|
3月前
|
Prometheus 监控 Cloud Native
基于Prometheus和Grafana的监控平台 - 环境搭建
基于Prometheus和Grafana的监控平台 - 环境搭建
|
2天前
|
Prometheus 监控 数据可视化
Grafana 插件生态系统:扩展你的监控能力
【8月更文第29天】Grafana 是一个流行的开源平台,用于创建和共享统计数据的仪表板和可视化。除了内置的支持,Grafana 还有一个强大的插件生态系统,允许用户通过安装插件来扩展其功能。本文将介绍一些 Grafana 社区提供的插件,并探讨它们如何增强仪表盘的功能性。
8 1
|
2天前
|
存储 Prometheus 监控
Grafana 与 Prometheus 集成:打造高效监控系统
【8月更文第29天】在现代软件开发和运维领域,监控系统已成为不可或缺的一部分。Prometheus 和 Grafana 作为两个非常流行且互补的开源工具,可以协同工作来构建强大的实时监控解决方案。Prometheus 负责收集和存储时间序列数据,而 Grafana 则提供直观的数据可视化功能。本文将详细介绍如何集成这两个工具,构建一个高效、灵活的监控系统。
14 1
|
2天前
|
Prometheus 监控 Cloud Native
Grafana 入门指南:快速上手监控仪表盘
【8月更文第29天】Grafana 是一款开源的数据可视化和监控工具,它允许用户轻松地创建美观的仪表盘和图表,以便更好地理解和监控数据。无论您是需要监控系统性能指标、应用程序日志还是业务关键指标,Grafana 都能提供灵活而强大的解决方案。本指南将带领您快速上手 Grafana,包括安装、配置以及创建第一个监控面板。
13 1
|
24天前
|
存储 Linux 数据库
性能工具之JMeter + Grafana + InfluxDB 性能平台搭建
【8月更文挑战第7天】性能工具之JMeter + Grafana + InfluxDB 性能平台搭建
37 1
性能工具之JMeter + Grafana + InfluxDB 性能平台搭建
|
17天前
|
Prometheus Kubernetes 监控
Kubernetes(K8S) 监控 Prometheus + Grafana
Kubernetes(K8S) 监控 Prometheus + Grafana
63 2
|
22天前
|
存储 运维 Linux
运维系列.在Docker中使用Grafana(一)
运维系列.在Docker中使用Grafana(一)
26 5
|
22天前
|
存储 Linux 数据库
运维系列.在Docker中使用Grafana(二)
运维系列.在Docker中使用Grafana(二)
33 4
|
2月前
|
Kubernetes Cloud Native 持续交付
云原生架构的核心组成部分通常包括容器化(如Docker)、容器编排(如Kubernetes)、微服务架构、服务网格、持续集成/持续部署(CI/CD)、自动化运维(如Prometheus监控和Grafana可视化)等。
云原生架构的核心组成部分通常包括容器化(如Docker)、容器编排(如Kubernetes)、微服务架构、服务网格、持续集成/持续部署(CI/CD)、自动化运维(如Prometheus监控和Grafana可视化)等。
|
2月前
|
监控 数据可视化 关系型数据库
PolarDB产品使用问题之如何使用Grafana采集PolarDB的指标并进行可视化监控
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
下一篇
云函数