您当前的位置:首页 > 电脑百科 > 程序开发 > 容器

Docker容器监控:cAdvisor+InfluxDB+Grafana

时间:2022-03-11 09:16:15  来源:  作者:蜀小陈

简介

容器监控三剑客:cAdvisor监控收集 + InfluxDB存储数据 + Grafana展示图表

我们在主机上部署了很多个容器,要想监控它们该怎么办,通常我们使用原生命令 Docker ps 或 docker stats 就可以查看到容器的状态。

如下:

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE                           COMMAND             CREATED          STATUS          PORTS                                                                                            NAMES
2a10d91cae48   portainer/portainer-ce:2.11.1   "/portainer"        17 minutes ago   Up 17 minutes   0.0.0.0:8000->8000/tcp, :::8000->8000/tcp, 0.0.0.0:9443->9443/tcp, :::9443->9443/tcp, 9000/tcp   portainer
554e72db6ef0   billygoo/Tomcat8-jdk8           "catalina.sh run"   29 hours ago     Up 59 seconds   0.0.0.0:8082->8080/tcp, :::8082->8080/tcp                                                        tomcat82
9e7e05d78b86   billygoo/tomcat8-jdk8           "catalina.sh run"   29 hours ago     Up 57 seconds   0.0.0.0:8081->8080/tcp, :::8081->8080/tcp                                                        tomcat81
[root@localhost ~]# docker stats
CONTAINER ID   NAME        CPU %     MEM USAGE / LIMIT     MEM %    .NET I/O           BLOCK I/O     PIDS
2a10d91cae48   portainer   0.00%     17.2MiB / 1.777GiB    0.95%     2.52MB / 6.98MB   0B / 2.02MB   5
554e72db6ef0   tomcat82    0.17%     92.44MiB / 1.777GiB   5.08%     1.1kB / 0B        165MB / 0B    42
9e7e05d78b86   tomcat81    0.15%     88.45MiB / 1.777GiB   4.86%     836B / 0B         11.6MB / 0B   42

通过docker stats命令可以很方便的看到当前宿主机上所有容器的CPU,内存以及网络流量等数据,一般小公司够用了。。。。但是,docker stats统计结果只能是当前宿主机的全部容器,数据资料是实时的,没有地方存储、没有健康指标过线预警等功能。

如何解决,那就要用到接下来所要讲的方案:cAdvisor+InfluxDB+Grafana

是什么

容器监控三剑客:cAdvisor监控收集 + InfluxDB存储数据 + Grafana展示图表

Docker容器监控:cAdvisor+InfluxDB+Grafana

 

cAdvisor

cAdvisor 是一个容器资源监控工具,包括容器的内存、CPU、网络IO、磁盘IO等监控,同时提供了一个Web页面用于查看容器的实时运行状态。

cAdivisor 默认存储2分钟的数据,而且只是针对单物理机。不过,cAdivisor提供了很多数据集成接口,支持InfluxDB、redis、Kafka、Elasticsearch等集成,可以加上对应配置将监控数据发往这些数据库存储起来。

cAdvisor 功能主要有两点:

  • 展示Host和容器两个层次的监控数据。
  • 展示历史变化数据。

InfluxDB

InfluxDB 使用Go语言编写的一个开源分布式时许、时间和指标数据库,无需外部依赖。

cAdvisor 默认旨在本机保存最近2分钟的数据,为了持久化存储数据和统一收集展示监控数据,需要将数据存储到InfluxDB中。InfluxDB是一个时许数据库,专门用于存储时许相关数据,很适合存储CADvisor的数据,而且,CAdvisor本身已经提供了InfluxDB的集成方法,启动容器时指定配置即可。

InfluxDB主要功能:

  • 基于时间序列,支持与时间有关的相关函数(如最大、最小、求和等);
  • 可度量性:你可以实时对大量数据进行计算;
  • 基于事件:它支持任意的事件数据。

Grafana

Grafana 是一个开源的数据监控分析可视化平台,支持多种数据源配置(支持的数据源包括InfluxDB、MySQL、Elasticsearch、OpenTSDB、Graphite等)和丰富的插件及模块功能,支持图表权限控制和报警。

Grafana主要特性:

  • 灵活丰富的图形化选项;
  • 可以混合多种风格;
  • 支持白天和夜间模式;
  • 多个数据源。

环境搭建

方式一:分别安装

通常在进行监控的时候是需要一台单独机器作为监控主机的,这里我们创建一台新的监控主机(192.168.92.148),在监控主机上部署InfluxDB+Grafana,然后在被监控主机(192.168.92.149)上部署cAdvisor

部署InfluxDB(监控主机)

这里预先定义了创建一个初始数据库:

INFLUXDB_DB=cadvisor # 初始数据库名称
INFLUXDB_USER=root # 初始数据库用户名
INFLUXDB_USER_PASSword=root123456 # 初始数据库密码

docker run -d -p 8086:8086 --restart=always --name influxdb 
-e INFLUXDB_DB=cadvisor 
-e INFLUXDB_USER=root 
-e INFLUXDB_USER_PASSWORD=root123456 
-v influxdb_data:/var/lib/influxdb 
influxdb:1.8

部署Grafana(监控主机)

docker run -d -p 3000:3000 --restart=always --name grafana 
-v grafana_data:/var/lib/grafana 
grafana/grafana

部署cAdvisor(被监控主机)

这里注意填入在部署influxdb时设置的数据库、用户名、密码

-storage_driver_db=cadvisor # influxdb的数据库名称
-storage_driver_host=192.168.92.148:8086 # influxdb的主机地址
-storage_driver_user=root # influxdb的用户名
-storage_driver_password=root123456 # influxdb的密码

docker run -d -p 8080:8080 --restart=always --name cadvisor 
-v /:/rootfs:ro 
-v /var/run:/var/run:rw 
-v /sys:/sys:ro 
-v /var/lib/docker/:/var/lib/docker:ro 
google/cadvisor 
-storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=192.168.92.148:8086 -storage_driver_user=root -storage_driver_password=root123456

方式二:Compose容器编排一套带走

如果你想将cAdvisor+InfluxDB+Grafana以及其他的容器都安装到同一台主机上,那使用这个compose一套带走方案就可以了。

新建目录

mkdir -p /data/cig

新建3件套组合的 docker-compose.yml 文件

cd /data/cig/

vim docker-compose.yml

文件内容如下:

version: '3.1'

services:    
  influxdb:
    image: influxdb:1.8
    restart: always
    environment:
      - INFLUXDB_DB=cadvisor
      - INFLUXDB_USER=root
      - INFLUXDB_USER_PASSWORD=root123456
    ports:
      - "8086:8086"
    volumes:
      - influxdb_data:/var/lib/influxdb
  
  cadvisor:
    image: google/cadvisor
    depends_on:
      - influxdb
    command: -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=influxdb:8086 -storage_driver_user=root -storage_driver_password=root123456
    restart: always
    ports:
      - "8080:8080"
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:rw
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro
      
  grafana:
    user: "104"
    image: grafana/grafana
    restart: always

    depends_on:
      - influxdb
    ports:
      - "3000:3000"
    volumes:
      - grafana_data:/var/lib/grafana

volumes:
  influxdb_data: {}
  grafana_data: {}

检查语法:

没有输出则正常。

docker-compose config -q

启动:

docker-compose up -d

查看是否都启动:

[root@localhost cig]# docker ps
CONTAINER ID   IMAGE                           COMMAND                  CREATED         STATUS         PORTS                                                                                            NAMES
06dffc78e480   grafana/grafana                 "/run.sh"                3 seconds ago   Up 2 seconds   0.0.0.0:3000->3000/tcp, :::3000->3000/tcp                                                        cig_grafana_1
bdee27fbd3c8   google/cadvisor                 "/usr/bin/cadvisor -…"   3 seconds ago   Up 2 seconds   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp                                                        cig_cadvisor_1
a328796c8d2a   tutum/influxdb:0.9              "/run.sh"                4 seconds ago   Up 3 seconds   0.0.0.0:8083->8083/tcp, :::8083->8083/tcp, 0.0.0.0:8086->8086/tcp, :::8086->8086/tcp             cig_influxdb_1

访问测试

1. 浏览CAdvisor收集服务:http://被监控主机的IP:8080/

2. 浏览Grafana展现服务:http://部署Grafana的主机IP:3000/

配置Grafana

添加数据源:

如果是使用 docker-compose 部署的,这里URL直接写 http://influxdb:8086 即可;

如果是单独安装的,这里URL要写 http://influxdb的主机IP:8086

Docker容器监控:cAdvisor+InfluxDB+Grafana

 

滚动到下面,填写部署influxdb时初始化的数据库cadvisor、用户名root、密码root123456,点击Save &Test.

Docker容器监控:cAdvisor+InfluxDB+Grafana

 

添加 dashboard:

Docker容器监控:cAdvisor+InfluxDB+Grafana

 


Docker容器监控:cAdvisor+InfluxDB+Grafana

 

点击右上角 Save 保存。

还可以点击右上角添加新的图表,监控其他项目,如:CPU、网络、磁盘等,需要具体去看看查询语法获取正确的值制作图表。

Docker容器监控:cAdvisor+InfluxDB+Grafana

 



Tags:Docker   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
Docker 和传统虚拟机有什么区别?
我有一个程序员朋友,他每年情人节都要送女朋友一台服务器。他说:“谁不想在过节当天收到一台 4核8g 的服务器呢?”“万一对方不要,我还能留着自己用。” 给他一次过节的机会,他能...【详细内容】
2024-03-26  Search: Docker  点击:(13)  评论:(0)  加入收藏
掌握Docker网络驱动程序:优化容器通信
Docker为在容器内包装、交付和运行应用程序提供了一个强大的平台,从而彻底改变了容器化。网络是容器化的重要组成部分,Docker提供了各种网络驱动程序来支持容器之间的通信以...【详细内容】
2024-03-22  Search: Docker  点击:(13)  评论:(0)  加入收藏
如何基于Docker镜像逆向生成Dockerfile
引言你是否曾经遇到过一个想要使用的 Docker 镜像,但却无法修改以适应你的特定需求?或者你可能发现了一个喜欢的 Docker 镜像,但想要了解它是如何构建的?在这两种情况下,将 Docke...【详细内容】
2024-03-07  Search: Docker  点击:(24)  评论:(0)  加入收藏
Docker与Docker Compose入门:释放你应用部署的威力
今天给大家介绍一项强大而有趣的技能,那就是使用 Docker 和 Docker Compose 来释放你的应用部署的威力!无论你是一名开发人员还是系统管理员,掌握这个技能都将为你的工作带来巨...【详细内容】
2024-01-17  Search: Docker  点击:(68)  评论:(0)  加入收藏
Docker镜像与容器的交互及在容器内部执行代码的原理与实践
Docker作为一种流行的容器技术,已经成为现代应用程序开发和部署的重要工具。在Docker中,镜像是构建和运行容器的基础,而容器则是基于镜像创建的可执行实例。Docker镜像与容器的...【详细内容】
2024-01-10  Search: Docker  点击:(83)  评论:(0)  加入收藏
如何在 Ubuntu 上安装 Docker
使用 Docker 意味着开启一个新的计算领域,但如果你刚刚开始使用 Docker,安装可能看起来是一项艰巨的任务。在 Ubuntu 上安装 Docker 有两种推荐的方法: 从 Ubuntu 的仓库安装 D...【详细内容】
2024-01-04  Search: Docker  点击:(126)  评论:(0)  加入收藏
七个杀手级Docker命令
Docker是一个容器化平台,通过操作系统级别的虚拟化技术,实现软件的打包和容器化运行。借助Docker,开发人员能够将应用程序以容器的形式进行部署,但在此之前需要构建Docker镜像。...【详细内容】
2023-12-22  Search: Docker  点击:(151)  评论:(0)  加入收藏
Docker容器如何打包应用程序的代码和依赖项?
Docker容器通过将应用程序的代码和所有依赖项打包到一个独立的软件包中,实现了应用程序的快速部署和移植。下面是Docker容器实现这一目标的步骤:打包应用程序:使用Docker工具将...【详细内容】
2023-12-20  Search: Docker  点击:(132)  评论:(0)  加入收藏
DBA视角:把数据库放入Docker是一个馊主意
对于无状态的应用服务而言,容器是一个相当完美的开发运维解决方案。然而对于带持久状态的服务 —— 数据库来说,事情就没有那么简单了。生产环境的数据库是否应当放...【详细内容】
2023-12-18  Search: Docker  点击:(201)  评论:(0)  加入收藏
Docker容器编排技术解析
一、容器编排介绍容器编排是现代云原生应用管理的核心,它涉及在大规模的环境中自动化部署、管理、扩展和网络配置容器。随着微服务架构的兴起和应用的复杂性增加,容器编排成为...【详细内容】
2023-12-15  Search: Docker  点击:(257)  评论:(0)  加入收藏
▌简易百科推荐
Docker 和传统虚拟机有什么区别?
我有一个程序员朋友,他每年情人节都要送女朋友一台服务器。他说:“谁不想在过节当天收到一台 4核8g 的服务器呢?”“万一对方不要,我还能留着自己用。” 给他一次过节的机会,他能...【详细内容】
2024-03-26  小白debug  微信公众号  Tags:Docker   点击:(13)  评论:(0)  加入收藏
掌握Docker网络驱动程序:优化容器通信
Docker为在容器内包装、交付和运行应用程序提供了一个强大的平台,从而彻底改变了容器化。网络是容器化的重要组成部分,Docker提供了各种网络驱动程序来支持容器之间的通信以...【详细内容】
2024-03-22    51CTO  Tags:Docker   点击:(13)  评论:(0)  加入收藏
Containerd容器管理
Nginx 指定容器名称 使用 ctr container create 命令创建容器后,容器并没有处于运行状态,其只是一个静态的容器。容器基本操作容器基本操作主要是 ctr image 命令,查看命令帮...【详细内容】
2024-03-20  云原生运维圈  微信公众号  Tags:容器   点击:(15)  评论:(0)  加入收藏
如何基于Docker镜像逆向生成Dockerfile
引言你是否曾经遇到过一个想要使用的 Docker 镜像,但却无法修改以适应你的特定需求?或者你可能发现了一个喜欢的 Docker 镜像,但想要了解它是如何构建的?在这两种情况下,将 Docke...【详细内容】
2024-03-07  云原生运维圈  微信公众号  Tags:Docker   点击:(24)  评论:(0)  加入收藏
Kubernetes是什么?主要特点是什么?
Kubernetes是什么?Kubernetes,也称为K8s,是一个开源的容器编排系统,由Google首次开发和维护。它允许容器化的应用程序在集群中自动部署、扩展和管理。Kubernetes提供了一种容器...【详细内容】
2024-02-01    简易百科  Tags:Kubernetes   点击:(171)  评论:(0)  加入收藏
我们一起聊聊容器资源自愈
在企业实际在使用容器这类资源的时候,除了技术本身,要考虑的其他问题也会很多。企业管理的容器有千千万万,出于效率考虑,对于有特殊需求的容器如何进行批量创建和管理呢,这就需要...【详细内容】
2024-01-30  匠心独运维妙维效  微信公众号  Tags:容器   点击:(51)  评论:(0)  加入收藏
Docker与Docker Compose入门:释放你应用部署的威力
今天给大家介绍一项强大而有趣的技能,那就是使用 Docker 和 Docker Compose 来释放你的应用部署的威力!无论你是一名开发人员还是系统管理员,掌握这个技能都将为你的工作带来巨...【详细内容】
2024-01-17  waynblog  微信公众号  Tags:Docker   点击:(68)  评论:(0)  加入收藏
Docker镜像与容器的交互及在容器内部执行代码的原理与实践
Docker作为一种流行的容器技术,已经成为现代应用程序开发和部署的重要工具。在Docker中,镜像是构建和运行容器的基础,而容器则是基于镜像创建的可执行实例。Docker镜像与容器的...【详细内容】
2024-01-10  编程技术汇  今日头条  Tags:Docker   点击:(83)  评论:(0)  加入收藏
如何在 Ubuntu 上安装 Docker
使用 Docker 意味着开启一个新的计算领域,但如果你刚刚开始使用 Docker,安装可能看起来是一项艰巨的任务。在 Ubuntu 上安装 Docker 有两种推荐的方法: 从 Ubuntu 的仓库安装 D...【详细内容】
2024-01-04    Linux中国  Tags:Docker   点击:(126)  评论:(0)  加入收藏
从Kubernetes的探针到DevOps
今天在群里又看有人问如何设置 Kubernetes 的探针,感觉要补充的话太多了,结合我们在一些 DevOps 项目中痛苦的体验,今天一劳永逸的全部说完,此外,也为大家展现一下为什么 DevOps...【详细内容】
2023-12-27  云云众生s  微信公众号  Tags:Kubernetes   点击:(121)  评论:(0)  加入收藏
站内最新
站内热门
站内头条