Docker 容器监控,这四个命令你必须知道!

  1. docker logs 洞察容器内部活动

  2. docker top 透视容器进程世界

  3. docker stats全方位资源监控

  4. docker inspect容器的详细档案

今天要介绍命令均服务于容器运行状态的观察、诊断和性能分析,通过获取日志输出、进程列表和资源使用统计,可以帮助用户排查容器内部的问题、优化资源分配或进行容量规划。由于它们聚焦于容器运行时的监控与调试,合并在同一起介绍有利于形成完整的监控视角。

1. docker logs洞察容器内部活动

docker logs 命令在容器运维、故障排查、监控告警、审计合规、性能分析、业务洞察、开发测试以及容器生命周期管理等多个方面发挥着核心作用,是管理和理解 Docker 容器运行状态的重要工具。

➜  ~ docker run -d -p 3000:3000 --name hello-go hello-go:default
5d301eb6b03f5c6397096fb6efb4193f9970a876a93fbf3a16bf26249fa79efb
➜  ~ docker logs hello-go
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.

[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
 - using env:   export GIN_MODE=release
 - using code:  gin.SetMode(gin.ReleaseMode)

[GIN-debug] GET    /                         --> main.main.func1 (3 handlers)
[GIN-debug] GET    /ping                     --> main.main.func2 (3 handlers)
[GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.
Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-proxies for details.
[GIN-debug] Listening and serving HTTP on :3000
[GIN] 2024/04/13 - 04:06:33 | 200 |      33.754µs |   192.168.31.47 | GET      "/"
[GIN] 2024/04/13 - 04:06:33 | 404 |         903ns |   192.168.31.47 | GET      "/favicon.ico"

运行一个hello-go容器,-d后台运行,-p 3000:3000宿主机3000与容器内3000映射,--name hello-go命名容器为hello-go,最后跟hello-go:default指定我们启动容器所基于的镜像。

通过命令docker logs [容器名称 or 容器id],可以查看容器内应用的运行日志,方便诊断应用运行期间的问题。应用日志文件会写入日志文件进行存储,建议使用挂在卷的方式持久化存储,防止因容器停止或删除,丢失数据。

可以在加-f,用于实时跟踪指定容器的日志输出,实时打印容器新增的日志条目。docker logs hello-go -f

2. docker top透视容器进程世界

docker top 命令主要用于实时监控容器内部进程状态、资源使用情况,以及进行故障排查、安全审计、资源分配优化、自动化监控等任务,是管理和运维 Docker 容器过程中必不可少的诊断和分析工具。

➜  ~ docker top hello-go
UID                 PID                 PPID                C                   STIME               TTY
TIME                CMD
root                1232                1213                0                   00:06               ?
00:00:00            ./app

使用docker top hello-go命令,根据输出容器内部只有一个运行中的进程(PID 为 1232),该进程以 root 用户身份运行,其父进程为 PID 1213。进程启动于6分钟前,未关联任何终端,且自启动以来未显著占用CPU时间。进程的主要任务是执行当前目录下的 app 可执行文件。

输出解释

  • UID: 表示在容器内部运行进程的用户标识符(User ID)。
  • PID: 进程标识符(Process ID)。
  • PPID: 父进程标识符(Parent Process ID)。
  • C: CPU 使用优先级或nice值。数值越小,优先级越高,占用CPU资源的可能性越大。此处为 0,表示该进程具有普通(默认)的CPU使用优先级。
  • STIME: 进程启动时间。显示为 00:06,表示该进程在当前时间的前6分钟启动。
  • TTY: 终端类型。符号 ? 表示该进程没有关联到终端(non-TTY process),通常后台服务或守护进程会有这样的标记。运行容器加-t会为容器分配伪TTY。
  • TIME: 进程累计占用CPU时间。显示为 00:00:00,表示该进程自启动以来,尚未占用过CPU时间或者统计周期内未占用CPU时间。
  • CMD: 执行的命令及参数。此处为 ./app,表示该进程正在运行一个名为 app 的可执行文件,该文件位于当前工作目录(.)下。

3. docker stats全方位资源监控

docker stats 命令是监控容器资源使用情况、进行性能分析与调优、容量规划、故障排查、智能调度、合规审计以及自动化运维的核心工具,对于有效管理大规模容器化环境、保障服务质量和降低成本具有重要意义。会显示指定容器(或所有正在运行的容器)的 CPU、内存、网络和磁盘 I/O 的使用统计信息。

使用命令docker stats hello-go

➜  ~ docker stats hello-go
CONTAINER ID   NAME       CPU %     MEM USAGE / LIMIT     MEM %     NET I/O           BLOCK I/O     PIDS
5d301eb6b03f   hello-go   0.00%     8.191MiB / 3.823GiB   0.21%     6.64kB / 4.04kB   7.11MB / 0B   6

输出解释

  1. CONTAINER ID: 容器的唯一标识符,一个长字符串,如 5d301eb6b03f
  2. NAME: 容器的名称,如 hello-go。这是您在创建容器时通过 --name 参数指定的名称,或者 Docker 自动赋予的名称。
  3. CPU %: 容器当前使用的 CPU 占比。这里始终显示为 0.00%,说明在采样时刻,容器几乎未使用 CPU 资源。
  4. MEM USAGE / LIMIT: 容器当前使用的内存(MEM USAGE)及其内存限制(LIMIT)。如 8.191MiB / 3.823GiB 表示容器使用了 8.191 MiB 内存,其内存限制为 3.823 GiB。后面的 0.21% 是内存使用量相对于限制的百分比,说明容器的内存使用非常低。
  5. NET I/O: 容器的网络输入(I/O)和输出(O)流量。如 6.64kB / 4.04kB 表示容器接收了 6.64 kB 的数据,发送了 4.04 kB 的数据。这些值都很小,说明容器在网络通信方面几乎没有活动。
  6. BLOCK I/O: 容器对存储(磁盘)的读取(I/O)和写入(O)量。如 7.11MB / 0B 表示容器向磁盘写入了 7.11 MB 的数据,没有从磁盘读取数据。写入量稍大,但总体来看,容器的磁盘活动也相当有限。
  7. PIDS: 容器内当前运行的进程数。这里始终显示为 6,表示容器内部有 6 个进程正在运行。

综上所述,docker logsdocker topdocker stats这三个命令构成了Docker容器日志与监控的核心工具集,分别从日志输出、进程信息和资源使用三个维度为运维人员提供了全面的容器观测手段。熟练运用这些命令,不仅能提升日常运维效率,还能在问题发生时迅速定位根源,确保容器化环境的稳定运行和高效利用。实现容器监控,为容器化应用的长期稳健运行保驾护航。

4. docker inspect容器的详细档案

docker inspect 命令是Docker容器管理中的一个重要工具,用于获取指定容器的详细配置、状态及元数据信息。这些信息以JSON格式输出,包含容器的创建参数、运行状态、网络配置、存储挂载、资源限制、环境变量等诸多细节。

以下是使用 docker inspect 命令查询 hello-go 容器详细信息的示例:

➜  ~ docker inspect hello-go

在这条命令中,hello-go 是您要查询详细信息的容器名称或ID。执行命令后,Docker 会返回一个详细的JSON对象,包含容器的所有相关信息。由于JSON输出通常较为冗长且结构化,不在展示,请运行命令查看。

通过 docker inspect -f '{{json .<field>}}' <container> 可以只输出指定字段的信息。

例如,查询容器IP地址:docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' hello-go

输出解释

  • Id: 容器的唯一标识符(长哈希字符串)。
  • Name: 容器的名称,即创建时通过 --name 参数指定的名称或Docker自动分配的短名称。
  • State: 容器当前运行状态,包括 RunningPausedRestartingDead 等状态以及相关的详细信息,如启动时间、退出代码、是否可以自动重启等。
  • Config: 容器创建时的配置信息,如命令、入口点、环境变量、工作目录、用户、资源限制(CPU、内存)等。
  • NetworkSettings: 容器的网络配置,包括网络模式(桥接、主机、none、自定义网络)、端口映射、IP地址、DNS配置等。
  • Mounts: 容器挂载的数据卷或绑定挂载信息,包括源路径、目标路径、类型(volume、bind、tmpfs)等。
  • Image: 容器基于的镜像信息,包括镜像ID、镜像名称、标签等。
  • Labels: 容器上设置的标签(键值对),用于组织和筛选容器。
  • HostConfig: 与主机相关的配置,如内存、CPU限制、设备映射、特权模式、日志驱动、重启策略等。

综上所述,docker logsdocker topdocker statsdocker inspect这四个命令构成了Docker容器日志与监控的核心工具集,分别从日志输出、进程信息和资源使用、容器的详尽配置信息四个维度为运维人员提供了全面的容器观测手段。熟练运用这些命令,不仅能提升日常运维效率,还能在问题发生时迅速定位根源,确保容器化环境的稳定运行和高效利用。实现容器监控,为容器化应用的长期稳健运行保驾护航。

忍不住要加个关注!不是我吹,但你会后悔没关注的!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,525评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,203评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,862评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,728评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,743评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,590评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,330评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,244评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,693评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,885评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,001评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,723评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,343评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,919评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,042评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,191评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,955评论 2 355

推荐阅读更多精彩内容