菜鸟科技网

Docker监控命令有哪些?如何高效使用?

下面我将从基础命令系统级监控专业监控方案三个层面,为你详细介绍 Docker 的监控方法。

Docker监控命令有哪些?如何高效使用?-图1
(图片来源网络,侵删)

Docker 基础监控命令

这些是直接与 Docker 交互的命令,用于快速了解单个或多个容器的运行状态。

查看容器列表

docker ps 是最常用的命令,用于查看正在运行的容器。

# 查看正在运行的容器
docker ps
# 查看所有容器(包括已停止的)
docker ps -a
# 只显示容器ID
docker ps -q
# 查看最后创建的N个容器
docker ps -n 5

常用选项:

  • -a: 显示所有容器
  • -q: 静默模式,只显示容器ID
  • --format: 自定义输出格式,非常适合脚本化
    # 以表格形式显示容器ID、名称和状态
    docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Status}}"

查看容器详细信息

docker inspect 可以获取容器或镜像的详细 JSON 配置信息。

Docker监控命令有哪些?如何高效使用?-图2
(图片来源网络,侵删)
# 查看指定容器的所有详细信息
docker inspect <container_id_or_name>
# 只查看容器的 IP 地址
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <container_id_or_name>
# 只查看容器的日志路径
docker inspect --format='{{.LogPath}}' <container_id_or_name>

查看容器资源使用情况

docker stats 提供了实时的容器资源消耗数据,非常直观。

# 实时查看所有运行中容器的资源使用情况
docker stats
# 只查看指定容器的资源使用
docker stats <container_id_or_name>
# 以非交互式模式运行,适合重定向到文件
docker stats --no-stream

输出列说明:

  • CONTAINER ID: 容器ID
  • NAME: 容器名称
  • CPU %: CPU使用率百分比
  • MEM USAGE / LIMIT: 内存使用量 / 内存限制
  • MEM %: 内存使用率百分比
  • NET I/O: 网络输入/输出量
  • BLOCK I/O: 块设备输入/输出量
  • PIDS: 进程数

查看容器日志

docker logs 用于查看容器的标准输出和标准错误。

# 查看容器的所有日志
docker logs <container_id_or_name>
# 实时跟踪日志输出(类似 `tail -f`)
docker logs -f <container_id_or_name>
# 只显示最新的N行日志
docker logs --tail 50 <container_id_or_name>
# 显示带时间戳的日志
docker logs --timestamps <container_id_or_name>

查看系统级资源限制

docker info 显示 Docker 服务器和系统的整体信息,包括资源限制。

docker info

在输出中,你可以找到 Total Memory, CPU Count, Storage Driver 等关键信息。


系统级监控命令

容器运行在宿主机上,因此宿主机的系统状态同样重要,这些命令不直接调用 Docker,但对于排查问题至关重要。

CPU 监控

# 查看所有CPU核心的实时负载
top
# 查看CPU使用情况(按CPU使用率排序)
htop
# 查看CPU的详细统计信息
mpstat 1 5  # 每1秒刷新一次,共5次
# 查看特定进程的CPU使用情况
ps aux --sort=-%cpu

内存监控

# 查看内存使用概况
free -h
# 查看详细的内存使用情况
top
# 查看特定进程的内存使用情况
ps aux --sort=-%mem

磁盘 I/O 监控

# 查看磁盘使用情况
df -h
# 查看磁盘I/O统计
iostat -xz 1
# 查看目录大小
du -sh /var/lib/docker  # 查看Docker数据目录大小

网络监控

# 查看网络连接状态
netstat -tuln
# 查看网络接口的流量统计
iftop
# 查看容器的网络命名空间
nsenter -t <container_pid> -n ip a

专业监控方案

对于生产环境,手动执行命令是不够的,我们需要一个自动、集中、可视化的监控解决方案,主流方案分为两类:

基于 Docker 自带功能的方案

a) Docker Stats + 日志收集

这是最简单的方案,使用 docker statsdocker logs 的输出来收集数据,然后发送到中央存储。

  • 工具推荐: cadvisor (Google开源)。
  • 工作原理: cadvisor 作为容器在宿主机上运行,它会自动收集本机和所有容器的资源使用数据(CPU、内存、磁盘、网络)。
  • 优点: 开箱即用,无需修改现有容器。
  • 缺点: 功能相对简单,通常需要配合其他工具(如 InfluxDB, Prometheus, Grafana)才能形成完整的监控体系。

基于 Prometheus 的方案 (业界标准)

这是目前最流行、功能最强大的监控方案,尤其适合 Kubernetes 环境。

  • 核心组件:

    1. Prometheus: 时序数据库,负责抓取和存储监控数据。
    2. Node Exporter: 部署在每个宿主机上,收集宿主机的系统级指标(CPU、内存、磁盘、网络)。
    3. cadvisor: 部署在每个宿主机上,收集容器级别的资源指标。
    4. Alertmanager: 处理告警规则,并管理告警的发送(如邮件、Slack)。
    5. Grafana: 数据可视化工具,用于创建仪表盘。
  • 工作流程:

    1. Prometheus 配置抓取 Node Exportercadvisor 的数据。
    2. 数据存储在 Prometheus 的时序数据库中。
    3. 在 Grafana 中连接 Prometheus 数据源,创建丰富的可视化仪表盘。
    4. 在 Prometheus 中配置告警规则,当指标超过阈值时,触发 Alertmanager 发送通知。
  • 优点: 生态强大、查询语言强大(PromQL)、高可用、可扩展。

  • 缺点: 架构相对复杂,需要一定的学习成本。

商业/云原生监控方案

许多云厂商和商业公司提供了成熟的 Docker/Kubernetes 监控服务。

  • Datadog: 功能全面的 APM 和监控平台,对 Docker 和 Kubernetes 支持非常好。

  • New Relic: 另一个强大的 APM 和监控平台。

  • Sysdig: 专注于容器和云原生安全与监控。

  • 云厂商服务:

    • AWS: Amazon CloudWatch
    • Google Cloud: Cloud Monitoring
    • Azure: Azure Monitor
  • 优点: 开箱即用,功能强大,通常包含告警、日志、追踪等功能,提供专业支持。

  • 缺点: 通常是付费服务,可能存在厂商锁定。


总结与建议

场景 推荐方案 优点 缺点
开发/测试环境 docker stats + docker logs 简单、快速、无需额外组件 功能有限,无法持久化,不适合生产
小型生产环境 cadvisor + InfluxDB + Grafana 轻量级,可视化效果好,功能足够 需要自己组装和配置,扩展性不如 Prometheus
中大型/云原生环境 Prometheus 生态 (Node Exporter, cAlertmanager, Grafana) 业界标准,功能强大,高可用,可扩展 架构复杂,学习成本高
企业级/追求省心 商业监控工具 (Datadog, New Relic) 或云厂商服务 功能全面,开箱即用,有专业支持 付费,可能存在厂商锁定

入门建议: 如果你刚开始,可以先从 docker statsdocker logs 开始,熟悉基本概念,然后尝试搭建一个 cadvisor + InfluxDB + Grafana 的组合,这是体验专业监控的最佳起点,如果你的环境是 Kubernetes,那么直接学习 Prometheus 生态是必然的选择。

分享:
扫描分享到社交APP
上一篇
下一篇