本文介紹如何監控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等監控能力,在Container Service控制台、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 兄弟線程的數量 |