本文介绍如何监控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 兄弟线程的数量 |