本文介绍如何监控Docker单机容器,以帮助企业更好地管理和维护容器化应用。
前提条件
-
已开通可观测监控Prometheus版。具体操作,请参见Prometheus 实例计费。
-
已创建ECS实例。具体操作,请参见通过控制台使用ECS实例(快捷版)。
-
已开通阿里云资源中心。具体操作,请参见开通资源中心。
步骤一:接入Docker单机容器监控
登录Prometheus控制台,在左侧导航栏单击接入中心。
-
单击Docker 单机容器监控卡片,然后根据控制台指引完成组件接入。下面对重点配置项进行说明。
配置项
说明
cAdvisor 安装方式
cAdvisor(Container Advisor)是Google开源的一款容器监控工具,可以收集容器的CPU、内存、网络和磁盘等资源使用情况。
-
自动安装:自动根据您提供的过滤策略对 ECS 实例进行服务发现,并向发现的主机中安装 cAdvisor 服务。
-
自助安装:需要你在接入前自行在 ECS 主机上安装 cAdvisor 服务,并开放对应的端口,开放 VPC 内访问。
说明ECS 白名单需要为 VPC 网段开放指定端口。
主机服务发现方式
如何选择要监控的ECS主机:
污点标签选择
ECS 污点标签:通过ECS实例的污点标签(反向选择)来匹配目标的实例。
无条件(选择当前VPC所有Linux实例)
-
标签选择
ECS 实例标签:通过ECS实例的标签来匹配目标的实例。
IP 域选择
ECS 网段(IP CIDR):该方提供一个网段,当ECS的IP地址匹配该网段时,即被选中。如果填写VPC对应的网段,即代表命中当前VPC下全部的 ECS。
实例ID
ECS 实例 ID:多个实例ID请使用英文半角逗号(,)分隔。
cAdvisor 服务端口
默认8080。
Metric 采集间隔(单位/秒)
默认15s。
自动配置安全组
开启该功能后,如果检查不通过会自动添加安全组规则。
自定义ECS Tag注入
可添加多个标签。指定ECS标签的Key,会自动将标签的键值对注入到Prometheus指标中。
-
步骤二:查看监控大盘
Prometheus默认内置了很多容器监控大盘,包括集群概览、核心组件、Node、Pod等监控能力,在容器服务控制台、ARMS控制台、Prometheus控制台都有透出。您可以通过以下方式查看监控大盘。
登录Prometheus控制台,在左侧导航栏单击接入管理。
-
在接入管理页面,单击大盘查询页签。在ECS环境中选择待查看的集群,即可查看对应的监控大盘。

步骤三:设置告警
登录Prometheus控制台,在左侧导航栏单击接入管理。
-
在接入管理页面,单击已接入环境页签。选择ECS环境,然后单击目标环境名称,进入ECS环境详情页面。
-
在组件管理页签,查看Prometheus内置的告警通知。单击组件管理页签,在左侧组件类型中选择Docker 单机容器监控,然后在右侧单击告警规则页签,可查看内置的告警规则,包括ContainerDown、HighMemoryUsage和HighCPUUsage三条默认规则,状态均为运行中。
-
内置的告警规则会产生告警事件,但是不会进行告警通知。如果您希望将告警通知发送到邮件或其他平台,可以单击编辑配置通知方式。
在告警配置页面,您也可以自定义告警阈值、持续时间、告警内容等,告警详细配置,请参见创建Prometheus告警规则。
在告警通知区域,选择普通模式。在快速指定通知策略下拉框中选择不指定通知策略。展开高级设置,将告警检查周期设置为1分钟。
采集指标说明
|
指标 |
类型 |
指标描述 |
|
container_blkio_device_usage_total |
COUNTER |
块 IO 设备字节使用量 |
|
container_cpu_cfs_periods_total |
COUNTER |
经过的强制执行周期间隔数 |
|
container_cpu_cfs_throttled_periods_total |
COUNTER |
限制的周期间隔数目 |
|
container_cpu_cfs_throttled_seconds_total |
COUNTER |
容器限制的总持续时间 |
|
container_cpu_load_average_10s |
GAUGE |
过去10秒钟的容器 CPU 平均负载值 |
|
container_cpu_schedstat_run_periods_total |
COUNTER |
cgroup 进程在 CPU 上运行的次数 |
|
container_cpu_schedstat_runqueue_seconds_total |
COUNTER |
容器进程在运行队列上等待总时长 |
|
container_cpu_schedstat_run_seconds_total |
COUNTER |
容器进程在 CPU 上运行总时长 |
|
container_cpu_system_seconds_total |
COUNTER |
累计系统 CPU 消耗时间 |
|
container_cpu_usage_seconds_total |
COUNTER |
累计 CPU 消耗时间 |
|
container_cpu_user_seconds_total |
COUNTER |
累计用户 CPU 消耗时间 |
|
container_file_descriptors |
GAUGE |
容器打开的文件描述符数量 |
|
container_fs_inodes_free |
GAUGE |
可用的 Inodes 数量 |
|
container_fs_inodes_total |
GAUGE |
总的 Inodes 数量 |
|
container_fs_io_current |
GAUGE |
当前正在进行的 I/O 数量 |
|
container_fs_io_time_seconds_total |
COUNTER |
累计 I/O 消耗的秒数 |
|
container_fs_io_time_weighted_seconds_total |
COUNTER |
累计加权的 I/O 时间 |
|
container_fs_limit_bytes |
GAUGE |
容器在该文件系统上可以消耗的字节数 |
|
container_fs_read_seconds_total |
COUNTER |
累计读取消耗的秒数 |
|
container_fs_reads_bytes_total |
COUNTER |
累计读取的字节数 |
|
container_fs_reads_merged_total |
COUNTER |
累计合并的读取次数 |
|
container_fs_reads_total |
COUNTER |
累计完成的读取次数 |
|
container_fs_sector_reads_total |
COUNTER |
累计完成的扇区读取次数 |
|
container_fs_sector_writes_total |
COUNTER |
累计完成的扇区写入次数 |
|
container_fs_usage_bytes |
GAUGE |
容器在该文件系统上已使用的字节数 |
|
container_fs_write_seconds_total |
COUNTER |
累计写入消耗的秒数 |
|
container_fs_writes_bytes_total |
COUNTER |
累计写入的字节数 |
|
container_fs_writes_merged_total |
COUNTER |
累计合并的写入次数 |
|
container_fs_writes_total |
COUNTER |
累计完成的写入次数 |
|
container_hugetlb_failcnt |
COUNTER |
hugepage 使用次数达到限制的次数 |
|
container_hugetlb_max_usage_bytes |
GAUGE |
记录的 hugepage 最大使用量 |
|
container_hugetlb_usage_bytes |
GAUGE |
当前的 hugepage 的使用量 |
|
container_last_seen |
GAUGE |
最后看到容器的时间 |
|
container_llc_occupancy_bytes |
GAUGE |
利用 RDT 内存带宽监控(MBM)统计的容器的 LLC 缓存使用情况 |
|
container_memory_bandwidth_bytes |
GAUGE |
利用 RDT 内存带宽监控(MBM)统计的容器的总内存带宽使用情况 |
|
container_memory_bandwidth_local_bytes |
GAUGE |
利用 RDT 内存带宽监控(MBM)统计的容器本地内存带宽使用情况 |
|
container_memory_cache |
GAUGE |
总页缓存 |
|
container_memory_failcnt |
COUNTER |
内存使用超过限制的次数 |
|
container_memory_failures_total |
COUNTER |
内存分配失败的累计次数 |
|
container_memory_mapped_file |
GAUGE |
内存映射文件的大小 |
|
container_memory_max_usage_bytes |
GAUGE |
最大内存使用量 |
|
container_memory_migrate |
GAUGE |
内存迁移状态 |
|
container_memory_numa_pages |
GAUGE |
每个 NUMA 节点上使用的页面数量 |
|
container_memory_rss |
GAUGE |
RSS的大小 |
|
container_memory_swap |
GAUGE |
容器的交换内存使用量 |
|
container_memory_usage_bytes |
GAUGE |
当前内存使用量 |
|
container_memory_working_set_bytes |
GAUGE |
当前工作集 |
|
container_network_advance_tcp_stats_total |
GAUGE |
容器的 Advanced TCP 连接统计 |
|
container_network_receive_bytes_total |
COUNTER |
累计接收的字节数 |
|
container_network_receive_errors_total |
COUNTER |
接收时遇到的错误累计次数 |
|
container_network_receive_packets_dropped_total |
COUNTER |
接收时丢弃的数据包累计次数 |
|
container_network_receive_packets_total |
COUNTER |
累计接收的数据包数 |
|
container_network_tcp6_usage_total |
GAUGE |
容器的 TCP6 连接统计 |
|
container_network_tcp_usage_total |
GAUGE |
容器的 TCP 连接统计 |
|
container_network_transmit_bytes_total |
COUNTER |
累计传输的字节数 |
|
container_network_transmit_errors_total |
COUNTER |
传输时遇到的错误累计次数 |
|
container_network_transmit_packets_dropped_total |
COUNTER |
传输时丢弃的数据包累计次数 |
|
container_network_transmit_packets_total |
COUNTER |
累计传输的数据包数 |
|
container_network_udp6_usage_total |
GAUGE |
容器的 UDP6 连接统计 |
|
container_network_udp_usage_total |
GAUGE |
容器的 UDP 连接统计 |
|
container_oom_events_total |
COUNTER |
观察到的容器内存溢出次数 |
|
container_perf_events_scaling_ratio |
GAUGE |
perf 事件计数的缩放比例 |
|
container_perf_events_total |
COUNTER |
perf 核心事件的缩放计数 |
|
container_perf_uncore_events_scaling_ratio |
GAUGE |
perf 非核心事件的缩放比例(事件可以通过事件标签来识别,PMU和socket标签表示测量事件的PMU和CPU socket) |
|
container_perf_uncore_events_total |
COUNTER |
perf 非核心事件的缩放计数(事件可以通过事件标签来识别,PMU和socket标签表示测量事件的PMU和CPU socket) |
|
container_processes |
GAUGE |
容器内运行的进程数量 |
|
container_referenced_bytes |
GAUGE |
基于 /proc/smaps 文件中的 Referenced 字段,在上一个测量周期内容器引用的字节数 |
|
container_sockets |
GAUGE |
容器的打开套接字数量 |
|
container_spec_cpu_period |
GAUGE |
容器的 CPU 周期 |
|
container_spec_cpu_quota |
GAUGE |
容器的 CPU 配额 |
|
container_spec_cpu_shares |
GAUGE |
容器的 CPU 份额 |
|
container_spec_memory_limit_bytes |
GAUGE |
容器的内存限制 |
|
container_spec_memory_reservation_limit_bytes |
GAUGE |
容器的内存保留限制 |
|
container_spec_memory_swap_limit_bytes |
GAUGE |
容器的内存交换限制 |
|
container_start_time_seconds |
GAUGE |
容器自 Unix 纪元以来的启动时间 |
|
container_tasks_state |
GAUGE |
给定状态中的任务数(睡眠、运行、停止、不可中断或I/O等待) |
|
container_threads |
GAUGE |
容器内运行的线程数量 |
|
container_threads_max |
GAUGE |
容器内允许的最大线程数 |
|
container_ulimits_soft |
GAUGE |
容器根进程的 soft ulimit 值 |
|
machine_cpu_cache_capacity_bytes |
GAUGE |
分配给 NUMA 节点和 CPU 核心的缓存大小(以字节为单位) |
|
machine_cpu_cores |
GAUGE |
逻辑 CPU 核心数 |
|
machine_cpu_physical_cores |
GAUGE |
物理 CPU 核心数 |
|
machine_cpu_sockets |
GAUGE |
CPU 插槽数 |
|
machine_dimm_capacity_bytes |
GAUGE |
各类型内存模块标记的总 RAM DIMM 容量值 |
|
machine_dimm_count |
GAUGE |
各类型内存模块标记的RAM DIMM数量 |
|
machine_memory_bytes |
GAUGE |
安装在机器上的内存容量 |
|
machine_swap_bytes |
GAUGE |
机器上可用的交换内存容量 |
|
machine_node_distance |
GAUGE |
NUMA 节点和目标 NUMA 节点之间的距离 |
|
machine_node_hugepages_count |
GAUGE |
分配给 NUMA 节点的 hugepage 数量 |
|
machine_node_memory_capacity_bytes |
GAUGE |
分配给 NUMA 节点的内存数量 |
|
machine_nvm_avg_power_budget_watts |
GAUGE |
NVM 平均功率预算 |
|
machine_nvm_capacity |
GAUGE |
NVM 容量值 |
|
machine_thread_siblings_count |
GAUGE |
CPU 兄弟线程的数量 |