广告
返回顶部
首页 > 资讯 > 数据库 >Docker容器监控方案怎么选
  • 860
分享到

Docker容器监控方案怎么选

2024-04-02 19:04:59 860人浏览 安东尼
摘要

本篇文章给大家分享的是有关Docker容器监控方案怎么选,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。随着线上服务的全面docker化,对do

本篇文章给大家分享的是有关Docker容器监控方案怎么选,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

随着线上服务的全面docker化,对docker容器的监控就很重要了。SA的监控系统是物理机的监控,在一个物理机跑多个容器的情况下,我们是没法从一个监控图表里面区分各个容器的资源占用情况的。为了更好的监控容器运行情况,更重要的是为了后续的容器动态调度算法需要的大量运行时数据的搜集,经过调研后,基于CAdvisor + InfluxDB + Grafana搭建了这套容器监控系统。

1、容器监控方案选择

在调研容器监控系统的时候,其实是有很多选择的,比如docker自带的docker stats命令,Scout,Data Dog,Sysdig Cloud,Sensu Monitoring Framework,CAdvisor等。通过docker stats命令可以很方便的看到当前宿主机上所有容器的CPU,内存以及网络流量等数据。但是docker stats命令的缺点就是统计的只是当前宿主机的所有容器,而获取的监控数据是实时的,没有地方存储,也没有报警功能。

而Scout(链接:https://scoutapp.com/)、Sysdig Cloud,Data Dog虽然都提供了较完善的服务,但是它们都是托管的服务而且都收费,于是也不在考虑范围之内。Sensu Monitoring Framework(链接:Https://sensu.io/)集成度较高,也免费,但是部署过于复杂。最后,我们选择了CAdvisor做容器监控工具。CAdvisor谷歌出品,优点是开源产品,监控指标齐全,部署方便,而且有官方的docker镜像。缺点是集成度不高,默认只在本地保存2分钟数据。不过在调研之后发现可以加上InfluxDB存储数据,对接Grafana展示图表,比较便利地搭建好了容器监控系统,数据收集和图表展示效果良好,对系统性能也几乎没有什么影响。

2、容器资源监控-CAdvisor

2.1 部署与运行

CAdvisor是一个容器资源监控工具,包括容器的内存,CPU,网络IO,磁盘IO等监控,同时提供了一个WEB页面用于查看容器的实时运行状态。CAdvisor默认存储2分钟的数据,而且只是针对单物理机。不过,CAdvisor提供了很多数据集成接口,支持InfluxDB,Rediskafkaelasticsearch等集成,可以加上对应配置将监控数据发往这些数据库存储起来。

由于CAdvisor已经容器化,部署和运行很简单,执行如下命令即可:

运行之后,就可以在浏览器打开http://ip:8080查看宿主机的容器监控数据了。

2.2 集成InfluxDB

如前面说到,CAdvisor默认只在本机保存最近2分钟的数据,为了持久化存储数据和统一收集展示监控数据,需要将数据存储到InfluxDB中。InfluxDB是一个时序数据库,专门用于存储时序相关数据,很适合存储CAdvisor的数据。而且,CAdvisor本身已经提供了InfluxDB的集成方法,在启动容器时指定配置即可。我们使用了管理容器来管理CAdvisor,修改后的启动配置如下。主要指定了存储引擎为InfluxDB,以及指定InfluxDB的HTTP api的地址(这里用到了自建DNS的域名 influxdb.service.consul以避免暴露外部端口),还有对应的数据库和用户名密码。

{    "binds": [          "/:/rootfs:ro",          "/var/run:/var/run:rw",          "/sys:/sys:ro",          "/home/docker/var/lib/docker/:/var/lib/docker:ro"    ],    "image": "forum-cadvisor",    "labels": {        "type": "cadvisor"    },    "command": " -docker_only=true -storage_driver=influxdb  -storage_driver_db=cadvisor  -storage_driver_host=influxdb.service.consul:8086  -storage_driver_user=testuser  -storage_driver_passWord=testpwd",    "tag": "latest",    "hostname": "cadvisor-{{lan_ip}}"}

注意到我们使用了一个自己的forum-cadvisor镜像来代替官方的cadvisor镜像,这是为了修复cadvisor一些问题以及基于管理方便性的考虑。

2.3 CAdvisor存在的问题

1)运行报错问题

运行最新的CAdvisor容器的时候,发现容器有如下的错误日志

这个问题是因为没有安装 findutils 工具导致的。

2)统计不到容器内存数据

Debian默认没有开启 CGroup Memory的支持,CAdvisor默认情况下无法统计到容器内存数据,需要修改GRUB启动参数,修改文件/etc/default/grub,加入下面这行:

GRUB_CMDLINE_linux=" cgroup_enable=memory"

然后更新grub2重启即可。

3)网络流量监控数据错误问题

在CAdvisor上线一段时间后,顺安发现容器的网络数据跟实际情况不符,并查找资料后发现问题是因为CAdvisor默认只统计第一个网卡的流量,而在我们的容器中是有多个overlay网络的,需要统计容器中所有的网卡流量。于是我修改了CAdvisor统计网络流量部分的代码并重新编译了一个版本在线上使用,修改的代码在这里。

最后,我们自定义的镜像文件 forum-cadvisor.Dockerfile 是这样的(src/cadvisor是修改后重新编译的cadvisor可执行文件):

2.4 CAdvisor原理简介

CAdvisor运行时挂载了宿主机根目录,docker根目录等多个目录,由此可以从中读取容器的运行时信息。docker基础技术有Linux namespace,Control Group(CGroup),AUFS等,其中CGroup用于系统资源限制和优先级控制的。

宿主机的/sys/fs/cgroup/目录下面存储的就是CGroup的内容了,CGroup包括多个子系统,如对块设备的blkio,cpu,内存,网络IO等限制。Docker在CGroup里面的各个子系统中创建了docker目录,而CAdvisor运行时挂载了宿主机根目录和 /sys目录,从而CAdvisor可以读取到容器的资源使用记录。

比如下面可以看到容器b1f257当前时刻的CPU的使用统计。CGroup详细介绍可以参见DOCKER基础技术:LINUX CGROUP(链接https://coolshell.cn/articles/17049.html

# cat /sys/fs/cgroup/cpu/docker/b1f25723c5c3a17df5026cb60e1d1e1600feb293911362328bd17f671802dd31/cpuacct.statuser 95191system 5028

而容器网络流量CAdvisor是从/proc/PID/net/dev中读取的,如上面的容器b1f257进程在宿主机的PID为6748,可以看到容器所有网卡的接收和发送流量以及错误数等。CAdvisor定期读取对应目录下面的数据并定期发送到指定的存储引擎存储,而本地会默认存储最近2分钟的数据并提供UI界面查看。

# cat /proc/6748/net/devInter-|   Receive                                                |  Transmit face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed  eth0: 6266314     512    0    0    0     0          0         0    22787     292    0    0    0     0       0          0  eth2:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0    lo: 5926805    5601    0    0    0     0          0         0  5926805    5601    0    0    0     0       0          0

3 、容器监控数据存储-InfluxDB

InfluxDB(链接:https://docs.influxdata.com/influxdb/v1.3/)是一个开源的分布式时序数据库,使用Go语言开发。特别适合用于时序类型数据存储,CAdvisor搜集的容器监控数据用InfluxDB存储就很合适,而且CAdvisor本身就提供了InfluxDB的支持,集成起来非常方便。

由于线上服务都docker化了,所以InfluxDB我们也是选择用容器来跑,通过容器管理系统统一管理。容器运行时的核心配置如下,主要挂载了数据库目录,以及配置了consul的服务注册,这样,CAdvisor由于和InfluxDB处于同一个overlay子网中,不需要再开放端口给外部访问,CAdvisor直接通过influxdb.service.consul:8086即可连接到InfluxDB。

为了存储CAdvisor的数据,需要预先创建好数据库并配置用户名密码以及相关权限。InfluxDB提供了一套influx的CLI,跟Mysql client很相似。另外,InfluxDB的数据库操作语言InfluxQL跟sql语法也基本一致。进入InfluxDB容器,运行下面命令创建数据库和用户密码并授权。

# influxConnected to http://localhost:8086 version 1.3.5InfluxDB shell version: 1.3.5> create database cadvisor  ## 创建数据库cadvisor> show databasesname: databasesname----_internalcadvisor> CREATE USER testuser WITH PASSWORD 'testpwd' ## 创建用户和设置密码> GRANT ALL PRIVILEGES ON cadvisor TO testuser ## 授权数据库给指定用户> CREATE RETENTION POLICY "cadvisor_retention" ON "cadvisor" DURATION 30d REPLICATION 1 DEFAULT ## 创建默认的数据保留策略,设置保存时间30天,副本为1

配置成功后,可以看到CAdvisor会通过InfluxDB的HTTP API自动创建好数据表,并将数据发送到InfluxDB存储起来。

3.2 InfluxDB重要概念

influxdb有一些重要概念:database,timestamp,field key, field value, field set,tag key,tag value,tag set,measurement, retention policy ,series,point,下面简要说明一下:database:数据库,如之前创建的数据库 cadvisor。InfluxDB不是CRUD数据库,更像是一个CR-ud数据库,它优先考虑的是增加和读取数据而不是更新删除数据的性能。timestamp:时间戳,因为InfluxDB是时序数据库,它的数据里面都有一列名为time的列,存储记录生成时间。如 rx_bytes 中的 time 列,存储的就是时间戳。fields: 包括field key,field value和field set几个概念。field key是字段名,在rx_bytes表中,字段名为 value。field value是字段值,如 17858781633,1359398等。而field set是字段集合,由field key和field value构成,如rx_bytes中的字段集合如下:

value = 17858781633value

tags:包括tag key, tag value, tag set几个概念。tag key是标签名,在rx_bytes表中container_name,game,Machine,namespace,type都是标签。tag value就是标签的值了。tag set就是标签集合,由tag key和tag value构成。InfluxDB中标签是可选的,不过标签是有索引的。如果查询中经常用的字段,建议设置为标签而不是字段。标签相当于传统数据库中有索引的列。retention policy: 数据保留策略,cadvisor的保留策略为cadvisor_retention,存储30天,副本为1。一个数据库可以有多个保留策略。measurement:类似传统数据看的表,是字段,标签以及time列的集合。series:共享同一个retention policy,measurement以及tag set的数据集合。

3.3 InfluxDB的特色功能

InfluxDB作为时序数据库,相比传统数据库它有很多特色功能,比如独有的一些特色函数和连续查询功能。关于InfluxDB的更多详细内容可以参见官方文档。

    特色函数:有一些聚合类函数如FILL()用于填充数据, INTEGRAL()计算字段所覆盖的曲面面积,SPREAD()计算表中最大与最小值的差值, STDDEV()计算字段标准差,MEAN()计算平均值, MEDIAN()计算中位数,SAMPLE()函数用于随机取样以及DERIVATIVE()计算数据变化比等。

    连续查询:InfluxDB独有的连续查询功能可以定期的缩小取样,就原数据库的数据缩小取样后存储到指定的新的数据库或者新的数据表中,在历史数据统计整理时特别有用。

4 、容器监控数据可视化-Grafana

通过CAdvisor搜集容器的监控数据,存储到InfluxDB中,接下来就剩数据可视化的问题了。毕竟,一个可视化的图表可以很方便快速的看到容器的一些问题。图表展示我选择的是Grafana。Grafana是一个开源的数据监控分析可视化平台,支持多种数据源配置(支持的数据源包括InfluxDB,mysql,Elasticsearch,OpenTSDB,Graphite等)和丰富的插件及模板功能,支持图表权限控制和报警。Grafana同样也是以容器方式运行,容器启动配置如下,主要是挂载了grafana的数据和日志目录,设置了管理员的密码,并开放了8888端口作为grafana的访问端口:

启动之后就可以在http://IP:8888/页面去配置数据源了,一个示例如下:

配置完数据源,就可以添加Panel来实现数据可视化了。Grafana的图表功能十分强大,在配置数据查询语句的时候也是十分智能,会对数据源,数据表,数据字段自动提示,而且对InfluxDB的所有函数都有分类可以直接选取配置。需要注意的一点就是在配置字节类数据(比如网卡接收流量 rx_bytes 和 内存使用量 memory_usage)的时候单位要选 data(IEC)这个类别。


使用CAdvisor+InfluxDB+Grafana构建容器资源监控系统,是可行而且是较为简便的方式。这三个组件全部以容器的方式运行,也符合我们线上服务皆为容器的理念。目前已经全面上线该监控系统,运行正常,数据可视化效果良好。除了用于可视化监控之外,这些数据后续还会用于系统异常检测算法和容器智能调度算法中。

以上就是Docker容器监控方案怎么选,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: Docker容器监控方案怎么选

本文链接: https://www.lsjlt.com/news/61711.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Docker容器监控方案怎么选
    本篇文章给大家分享的是有关Docker容器监控方案怎么选,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。随着线上服务的全面docker化,对do...
    99+
    2022-10-18
  • Docker容器内存监控怎么实现
    本篇内容主要讲解“Docker容器内存监控怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Docker容器内存监控怎么实现”吧!linux内存监控要明白docker容器内存是如何计算的,首...
    99+
    2023-06-19
  • Docker容器中怎么部署Zabbix监控系统
    本篇文章给大家分享的是有关Docker容器中怎么部署Zabbix监控系统,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1.安装docker。y...
    99+
    2022-10-18
  • Docker容器的自动化监控实现方法
    这篇文章主要讲解了“Docker容器的自动化监控实现方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Docker容器的自动化监控实现方法”吧!文章摘要 近年来容器技术不断成熟并得到应用。D...
    99+
    2023-06-19
  • 怎么监控docker容器运行状态shell脚本
    这篇文章将为大家详细讲解有关怎么监控docker容器运行状态shell脚本,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。场景公司项目部署在docker中,由于未知原因容器偶尔会停止,需要写一个脚本监控 容...
    99+
    2023-06-14
  • 使用zabbix怎么对docker容器状态进行监控
    这篇文章给大家介绍使用zabbix怎么对docker容器状态进行监控,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。首选,zabbix_agentd 配置  vim /usr/local/zabbix/etc/...
    99+
    2023-06-07
  • Docker容器可视化监控中心的搭建方法
    小编给大家分享一下Docker容器可视化监控中心的搭建方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!准备镜像adviser:负责收集容器的随时间变化的数据in...
    99+
    2023-06-07
  • 云服务器挑选方案怎么选
    云服务器挑选方案可以按照以下几个步骤进行: 确定您的业务需求:首先应该确定您的云服务器需要处理什么类型的业务,以及这些业务对存储和计算资源的需求是什么。这可以通过查看您的客户端或应用程序的使用率、流量情况和性能来确定。 评估云服务供应商...
    99+
    2023-10-26
    服务器 方案
  • 云服务器挑选方案怎么选的
    云服务器挑选方案可以按照以下几个方面进行考虑: 性能:服务器的性能是用户对云服务器选择的重要考虑因素,因为它直接影响客户端访问云服务器服务的速度和稳定性。选择能够满足用户要求的服务器,以及选择能够提供高性能的服务器可以有效地提高云服务器...
    99+
    2023-10-27
    服务器 方案
  • 云服务器挑选方案怎么选择
    云服务器可以根据不同的应用场景和要求进行选择,以下是一些常见的云服务器选购方案: 私有云:以企业内部私有云或者混合云形式为主。这类云服务器通常具备较高的灵活性和弹性,能够根据实际情况进行快速扩容和缩减容量。 公有云:以公共云平台(如AW...
    99+
    2023-10-27
    服务器 方案
  • docker容器怎么使用GPU方法实现
    这篇文章主要介绍“docker容器怎么使用GPU方法实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“docker容器怎么使用GPU方法实现”文章能帮助大家解决问题。1、无nvidia-docker...
    99+
    2023-06-30
  • 云服务器怎么选配置方案
    云服务器是一种虚拟化软件,用于托管和管理大量的计算资源。以下是一些选购云服务器的基本信息和配置方案。 基础配置:了解云服务器的基础设置,包括CPU、内存、存储空间、网络带宽等。可以根据自己的需求和预算来选择云服务器的配置方案。 性能配置...
    99+
    2023-10-26
    服务器 方案
  • 云服务器怎么选择配置方案的文件类型和内容
    云服务器可以选择配置文件的类型和内容。以下是一些可能有用的选项: Copy-on-Write(复制)选项:在选择了配置文件格式后,可以将任何数据复制到云服务器中,以便后续可以使用相同的数据进行处理。此选项适合用于多种数据格式和数据处理需...
    99+
    2023-10-26
    文件类型 服务器 方案
  • 阿里云服务器实例选购方案怎么选
    首先,考虑云服务器的类型和应用。目前,市场上主流的云服务器类型有云服务器、负载均衡器、弹性伸缩等。不同的云服务器适用于不同的应用场景,需要根据具体的需求来选择。例如,对于一些高性能的应用场景,可以选择云服务器来提供更高的性能和更强的扩展性;...
    99+
    2023-10-27
    阿里 实例 服务器
  • 云服务器怎么选配置方案的
    云服务器是一种虚拟化软件,允许企业将计算资源和存储资源分布在不同的云服务提供商上,以提高资源利用率、减少管理负担。选择一个合适的云服务器配置方案需要考虑以下几个方面: 资源需求:根据自己的业务需求和预算选择云服务器的数量和规模,以及每个...
    99+
    2023-10-27
    服务器 方案
  • 云服务器怎么选择配置方案
    云服务器可以根据不同的应用场景和要求进行选择配置方案。以下是一些常见的配置方案:方案一:传统硬件方案 该方案通常是由云计算供应商为客户提供的硬件设备和软件服务。这种方案可以满足大量用户对云服务器的需求,但需要支付高昂的硬件费用和维护费用。方...
    99+
    2023-10-25
    服务器 方案
  • 多台云服务器组网方案怎么选
    使用 VPC 的方案。VPC 可以通过虚拟化技术将多个云主机虚拟成虚拟机,每个虚拟机就像是一个独立的物理服务器。当用户在同一台云服务器上创建应用程序时,只需要在应用程序中添加 VPC 服务器即可。 使用 VPN 的方案。如果您不想使用虚拟...
    99+
    2023-10-26
    多台 服务器 方案
  • 云服务器怎么选择配置方案的
    云服务器可以根据不同的应用场景和要求来选择配置方案,以下是一些常见的选择方案: 方案一:使用单独的服务器硬件。 这个方案的优点在于,用户可以根据他们的业务需求和预算来决定他们应该使用哪种云服务器。这样可以确保云服务器可以支持他们的业务需求...
    99+
    2023-10-26
    服务器 方案
  • 多台云服务器组网方案怎么选的
    选择一台性能好、可靠的云服务器,比如AWS、Google Cloud、Ubuntu等; 选择一台高度灵活的云服务器,可以根据自己的业务需要和预算来选择,可以根据业务需求随时进行扩容; 考虑使用云服务器的稳定性和安全性,可以考虑使用虚拟防火...
    99+
    2023-10-26
    多台 服务器 方案
  • 多台云服务器组网方案怎么选择
    选择一台性能好、可靠的云服务器,以便在多台云服务器之间进行快速的负载分配。 在多台云服务器之间进行网络传输时,考虑网络稳定性和流量控制等因素,以确保高速、稳定和可靠的网络传输。 考虑云服务器的安全措施,以确保数据安全和隐私不会受到任何损失...
    99+
    2023-10-26
    多台 服务器 方案
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作