本文介绍如何监控Docker单机容器,以帮助企业更好地管理和维护容器化应用。
前提条件
- 已开通可观测监控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内置的告警通知。  
- 内置的告警规则会产生告警事件,但是不会进行告警通知。如果您希望将告警通知发送到邮件或其他平台,可以单击编辑配置通知方式。 - 在告警配置页面,您也可以自定义告警阈值、持续时间、告警内容等,告警详细配置,请参见创建Prometheus告警规则。  
采集指标说明
| 指标 | 类型 | 指标描述 | 
| 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 兄弟线程的数量 |