乐趣区

关于云计算:容器监控薅光了头发这篇你再也不能错过

随着 Docker 和容器技术的一直倒退,越来越多的企业将 Docker 和容器利用到本身 IT 架构中,并投入测试和生产应用。这对企业的数据监测能力也提出了更高要求。

传统的监测计划会从每个服务器和运行利用中采集指标,这些服务器和利用个别是动态的,运行工夫长,一台主机可能只须要监测 150 个指标;但容器却不一样,短期存活、动静调度,具备本人的环境、虚构网络和不同的存储管理,哪怕在雷同的主机上也可能会调度短期存活的批处理命令和长期存活的过程。

因而,当容器利用到 IT 架构中后,除须要采集的容器自身指标外,还要对在容器上运行的组件进行采集。如果没有一个比较完善的指标监控形式,对主机上几十甚至上百个 Docker 容器进行管控,将是一个十分盛大且费时费力的事件。

这里咱们以 Linux 操作系统为例,给大家举荐几种常见的监测计划。

三种 Docker 监控指标的形式

1. 读取 CGroup 文件

此形式是通过读取 CGroup 文件的形式获取指标。

通常状况下,这些文件都在 /sys/fs/cgroup 目录下,例如 memory 相干指标会在 /sys/fs/cgroup/memory/docker/$CONTAINER\_ID/memory.stat,$CONTAINER\_ID 就是容器的 ID。

留神如果没有启动 Docker,在 memory 目录下是找不到 docker 这个目录的。

关上 memory.stat 这个文件,会显示以后工夫此容器的内存应用情况,包含各种指标等。

$> cat /sys/fs/cgroup/memory/docker/$CONTAINER_ID/memory.stat
cache 65925120
rss 104542208
rss_huge 0
shmem 0
mapped_file 30289920
dirty 8192
writeback 0
pgpgin 44034
pgpgout 2416
pgfault 32187
pgmajfault 312
inactive_anon 0
active_anon 73007104
inactive_file 91582464
active_file 5877760
unevictable 0
hierarchical_memory_limit 9223372036854771712
#...

依照 Linux 零碎中“所有皆文件”的说法,Docker 容器的所有指标数据都能够应用读文件的形式拿到。

  • 长处是根底指标齐全,八面玲珑,扩展性强,能够自行计算新指标
  • 毛病是太过硬核,不足汇总,很多指标意义艰涩难懂,大部分状况下都不会用到

2.DockerAPI

DockerAPI 官网文档
(https://docs.docker.com/engin…)。

应用 cURL 对 docker.sock 拜访(如果没有凋谢端口的话),url 中的参数能够在文档中找到,示例如下。

$> sudo curl --unix-socket /var/run/docker.sock http://localhost/containers/b8d0c34bcb6c6fad49ca4a9341e9b0b54d0eb2a714e55617dbfe5fd02d8dac27/stats?stream=false&one-shot=false | jq
{
 "id": "$CONTAINER_ID",
 "memory_stats": {
 "limit": 8358457344,
 "max_usage": 176467968,
 "stats": {
 "active_anon": 36376576,
 "active_file": 5877760,
 "cache": 46292992,
 "dirty": 0,
 "hierarchical_memory_limit": 9223372036854772000,
 "hierarchical_memsw_limit": 0,
 "inactive_anon": 0,
 "inactive_file": 108650496,
 "mapped_file": 30408704,
 "pgfault": 32220,
 "pgmajfault": 312,
 "pgpgin": 44380,
 "pgpgout": 7538,
 "rss": 104611840,
 "rss_huge": 0,
 #...
 },
 "usage": 156004352
 },
 #...
}

和读取 CGroup 文件的形式相比,这种形式显然可读性稍好一些,对各种根底畛域比方 CPU、内存、磁盘 I /O、网络 I / O 进行汇总,并且减少了 Docker 的一些根本信息,比方容器的开启工夫,容器名等。

  • 长处是对各项指标进行汇总,不用挨个儿去读文件,增加了一些人性化指标(容器工夫、容器名等)
  • 毛病是太过简短,该查问 API 会返回一个巨长的 JSON,而且可读性没有失去晋升,许多罕用指标仍然要本人计算

3.Docker 命令行

应用 Docker 命令是最简略快捷的形式,只须要在命令行中输出命令即可。

$> docker stats

作为最罕用的查看 Docker 容器运行指标的形式,docker stats 足够笨重和简略,然而或者它又有点太简略,如此罕用的命令只有寥寥 10 个指标,而且限于终端输入的形式,偶然看一下还不错,用来做 Docker 容器指标的长期监控仿佛有点有余。

如前所述,Docker 容器指标采集是一件很简单的事,要解决如下几个问题:

  • 指标数据足够齐全,须要定制一些可读性较高的指标
  • 数据存储
  • 指标数据的展现以及查问

DataFlux 监测计划

咱们这里向大家介绍第四种解决方案—— DataFlux,在一个平台上实现对多种数据源的对立实时监测。

在 DataFlux 中有专用于各种数据采集的工具—— DataKit,它提供了对 Docker 容器指标的采集能力。咱们仍旧以 Linux 平台为例,介绍 DataKit 采集器的根本应用。

首先,咱们查看官网提供的文档,依照操作步骤把采集器 DataKit 装置好。

官网教程:《如何装置 DataKit》
https://help.dataflux.cn/doc/…

装置好 DataKit 后,在 /usr/local/cloudcare/dataflux/datakit/conf.d/docker/ 目录下,复制一份 docker\_containers 采集配置

$ sudo cp docker_containers.conf.sample docker_containers.conf

编辑 docker\_containers.conf:

[[inputs.docker_containers]]
 endpoint = "unix:///var/run/docker.sock"
 interval = "5m"
 # 是否采集所有容器,包含 Exited 状态
 all = false
 # 还能够采集 K8S pod!
 [inputs.docker_containers.kubernetes]
 url = "http://127.0.0.1:10255"

至此,Docker 容器的指标采集就配置好了,重新启动一下
(https://help.dataflux.cn/doc/…
DataKit 的即可(留神:数据须要稍等一会能力在 Dataflux 平台看到)。

最初咱们在 DataFlux 后盾,点击左侧菜单栏“指标”-“标签”,即可看到对应的数据后果:

从图中能够看到,Docker 容器的各项指标曾经采集到,并且在图表中绘制进去。后续能够依据 container\_id 进行更多操作,比方跟 Docker 日志联结等等。

更多 DataFlux 的采集指标和视图模板,大家能够间接从官网文档中查看。
https://help.dataflux.cn/doc/…

退出移动版