共用方式為


OpenTelemetry 客體作業系統度量 (預覽)

在 Microsoft,我們透過採用和支援儲存在 Azure 監視器工作區 (AMW) 中的 OpenTelemetry 計量來採用開放標準,而 Prometheus 查詢語言 (PromQl) 是我們跨所有 AMW 計量的基本計量查詢語言。

在閱讀本文之前,建議使用者先了解 虛擬機器上主機作業系統與客體作業系統效能計數器之間的差異。

本文說明使用者必須加入才能收集的客體作業系統效能計數器,可以透過具有 DCR 的 Azure 監視器代理程式、具有 DCR 的 VM Insights,或使用者使用 OTelCollector 收集,做為 OTel 檢測程式庫的一部分。 建議使用者將所有計量儲存在計量最佳化的 Azure 監視器工作區中,其中的查詢成本比 Log Analytics 工作區更便宜且更快。

本文為使用者提供以下資訊:

OpenTelemetry 客體 OS 效能計數器目前處於公開預覽狀態。

效能計數器

Windows 和 Linux 都為用戶提供與 CPU 使用率、內存消耗、磁盤 I/O、網絡等相關的操作系統級指標,以幫助診斷性能問題。 您現在可以在 Windows 上使用 效能監視器 (perfmon) 或在 Linux 上使用 perf 命令 ,輕鬆地在本機電腦上查看範例。

可用的 OS 效能計數器總數是動態的,Windows 預設會提供 ~1846 個 OS 效能計數器 ,並根據本機電腦可用的硬體、軟體和追蹤點事件提供更多可用的計數器。

OpenTelemetry 指標的子集稱為 系統指標。 系統計量基本上是效能計數器的另一個名稱;它們是開放原始碼標準,用於一致地命名和格式化效能計數器,而且不會新增任何全新的作業系統效能計數器。

OpenTelemetry 的優點

跨作業系統可觀察性 系統計量的 OpenTelemetry 語意慣例可將 Windows 和 Linux 效能計數器融合成一致的命名慣例和計量資料模型,以簡化跨 OS 終端使用者體驗。 這可讓使用者使用一組用於 Windows 或 Linux OS 映像的查詢,更輕鬆管理其整個機群的虛擬機器/節點。 相同的程式碼配置(如 ARM/Bicep 範本、Terraform 等)使用相同的 PromQl 查詢,可用於任何採用 OpenTelemetry 系統指標的主機資源。

更多效能計數器 OpenTelemetry 收集器主機計量接收器收集的效能計數器比 Azure 監視器目前透過 DCR 收集的效能計數器還要多得多,並以 Log Analytics 工作區作為目的地。 例如,用戶現在可以監控每個進程的 CPU 利用率、磁盤 I/O、內存使用情況等。

較少的效能計數器 在許多案例中,現有的效能計數器已簡化為單一 OTel 系統計量,並具有度量維度 (資源屬性), 可簡化使用者體驗。

例如,不同狀態的 CPU 時間可以在 Windows 中顯示為下列三個效能計數器:

  • \處理器資訊(_Total )% 處理器時間
  • \Processor Information(_Total)% Privileged Time
  • \Processor Information(_Total)% User Time 或做為 Linux 中的下列七個效能計數器:
  • CPU/使用者使用率
  • Cpu/usage_system
  • Cpu/usage_idle
  • Cpu/usage_active
  • Cpu/usage_nice
  • Cpu/usage_iowait
  • CPU/usage_irq

在 OpenTelemetry 中,所有這些計數器都會變成單一效能計數器:system.cpu.time,而在每個狀態 (例如使用者、系統、閒置) 所花費的時間現在只要篩選維度 State 即可找到。

Azure 監視器工作區的優點

儲存在 Azure 監視器工作區中的計量比儲存在 Log Analytics 工作區中時更便宜且查詢速度更快,因為支援這些不同資料存放區的資料模型不同。

除了這些一般優點之外,使用者不會再遇到 Perf 和 Insights 資料表之間的結構描述不相符。 傳送至 AMW 的 VM Insights (v2) 會使用我們提供給使用者的 OpenTelemetry 系統指標子集,從而提供跨使用者同類群組的無縫相容性。 具有應用程式小組且混合使用 VM Insights 和非 VM Insights Guest OS 效能計數器監視的大型企業,可以針對相同 OTel 計量使用相同的 PromQl 查詢、儀表板和警示。

效能計數器名稱

下列效能計數器是由適用於 Windows 和 Linux 虛擬機器的 Azure 監視器代理程式收集。 預設取樣頻率為 60 秒,但在建立或更新資料收集規則時,可以變更此頻率。

OTel 效能計數器 類型 單位 Aggregation 單調 尺寸 Description
系統.CPU.利用率 量測計 1 N/A FALSE cpu:從0開始的邏輯CPU數(值:Any Str)
state:按類型劃分的 CPU 使用率明細(值:idle、interrupt、nice、softirq、steal、system、user、wait)
自上次測量後,將每個邏輯 CPU 的 system.cpu.time 差異除以所經過的時間(範圍為 0 至 1)。
system.cpu.time 總和 s 累積 TRUE cpu:從0開始的邏輯CPU數(值:Any Str)
state:按類型劃分的 CPU 使用率明細(值:idle、interrupt、nice、softirq、steal、system、user、wait)
每個邏輯 CPU 在每個模式上花費的總秒數。
system.cpu.physical.count 總和 {中央處理器} 累積 FALSE (無) 可用的實體 CPU 數目。
系統. CPU. 邏輯處理器. 數量 總和 {中央處理器} 累積 FALSE cpu:從0開始的邏輯CPU數(值:Any Str) 可用的邏輯 CPU 數目。
system.cpu.load_average.5m 量測計 {thread} N/A FALSE (無) 超過 5 分鐘的平均 CPU 負載。
system.cpu.load_average.1m 量測計 {thread} N/A FALSE (無) 超過 1 分鐘的平均 CPU 負載。
system.cpu.load_average.15m 量測計 {thread} N/A FALSE (無) 超過 15 分鐘的平均 CPU 負載。
system.cpu.frequency 量測計 赫茲 N/A FALSE (無) CPU 核心的目前頻率,以 Hz 為單位。
process.uptime 量測計 s N/A FALSE (無) 程序執行的時間。
process.threads 總和 {線程} 累積 FALSE (無) 進程執行緒數量。
process.signals_pending 總和 {信號} 累積 FALSE (無) 處理程序的擱置訊號數目 (僅限 Linux)。
process.paging.faults 總和 {錯誤} 累積 TRUE type:故障類型(值:主要、次要) 進程所犯的頁面錯誤數目 (僅限 Linux)。
process.open_file_descriptors 總和 {count} 累積 FALSE (無) 處理程序正在使用的檔案描述子數目。
處理程序.記憶體.虛擬 總和 依據 累積 FALSE (無) 虛擬記憶體大小。
進程記憶體使用率 量測計 1 N/A FALSE (無) 進程所使用的實體記憶體總計百分比。
進程.記憶體.用量 總和 依據 累積 FALSE (無) 使用中的實體記憶體數量。
system.disk.weighted_io_time 總和 s 累積 FALSE device:磁碟名稱(值:Any Str) 啟動耗費的時間磁碟乘以佇列長度。
system.disk.pending_operations 總和 {操作} 累積 FALSE device:磁碟名稱(值:Any Str) 待處理 I/O 作業的佇列大小。
系統.磁碟作業 總和 {操作} 累積 TRUE device:磁碟名稱(值:Any Str)
direction:流動方向(值:讀取、寫入)
磁碟作業次數。
系統.磁碟.操作時間 總和 s 累積 TRUE device:磁碟名稱(值:Any Str)
direction:流動方向(值:讀取、寫入)
磁碟讀寫作業時間。
系統.磁碟.已合併 總和 {操作} 累積 TRUE device:磁碟名稱(值:Any Str)
direction:流動方向(值:讀取、寫入)
磁碟讀取/寫入合併為單一實體作業。
system.disk.io_time 總和 s 累積 TRUE device:磁碟名稱(值:Any Str) 啟用磁碟所花費的時間。
system.disk.io 總和 依據 累積 TRUE device:磁碟名稱(值:Any Str)
direction:流動方向(值:讀取、寫入)
傳輸的磁碟位元組。
process.handles 總和 {count} 累積 FALSE (無) 開啟控制代碼數目 (僅限 Windows)。
process.disk.operations 總和 {操作} 累積 TRUE direction:流動方向(值:讀取、寫入) 進程所執行的磁碟作業。
process.disk.io 總和 依據 累積 TRUE direction:流動方向(值:讀取、寫入) 傳輸的磁碟位元組。
處理程序 CPU 使用率 量測計 1 N/A FALSE state:CPU 使用率明細(值:system、user、wait) 自上次抓取後,程序使用的總 CPU 時間百分比 (0-1)。
process.cpu.時間 總和 s 累積 TRUE state:CPU 使用率明細(值:system、user、wait) 按狀態細分的 CPU 總秒數。
process.context_switches 總和 {count} 累積 TRUE type:上下文開關的類型(值:任何 Str) 處理程序已切換內容的次數(僅限 Linux)。
系統記憶體使用率 量測計 1 N/A FALSE state:記憶體使用明細(值:緩衝、快取、非作用中、可用、slab_reclaimable、slab_unreclaimable、已使用) 使用中的記憶體位元組百分比。
系統.記憶體.使用 總和 依據 累積 FALSE state:記憶體使用明細(值:緩衝、快取、非作用中、可用、slab_reclaimable、slab_unreclaimable、已使用) 使用中的記憶體位元組數。
system.memory.page_size 量測計 依據 N/A FALSE (無) 系統設定的頁面大小。
系統內存限制 總和 依據 累積 FALSE (無) 可用的記憶體位元組總數。
system.linux.memory.dirty 總和 依據 累積 FALSE (無) 髒記憶體量 (/proc/meminfo)。
system.linux.memory.available(系統.linux.記憶體.可用) 總和 依據 累積 FALSE (無) 可用記憶體的估計值 (僅限 Linux)。
系統.網路.封包 總和 封包 累積 TRUE 裝置:網路介面名稱(值:任何 Str)
direction:流動方向(值:接收、發送)
傳輸的封包數。
system.network.io 總和 依據 累積 TRUE (無) 傳輸和接收的位元組數。
系統.網路錯誤 總和 {錯誤} 累積 FALSE 裝置:網路介面名稱(值:任何 Str)
direction:流動方向(值:接收、發送)
遇到的錯誤數目。
system.network.dropped 總和 封包 累積 TRUE 裝置:網路介面名稱(值:任何 Str)
direction:流動方向(值:接收、發送)
捨棄的封包數目。
system.network.conntrack.max 總和 {條目} 累積 FALSE (無) conntrack 表中的條目限制。
system.network.conntrack.count 總和 {條目} 累積 FALSE (無) conntrack 表中的條目計數。
系統.網路連線 總和 {連接} 累積 FALSE protocol:網路協定(值:tcp)
state:連線狀態(值:Any Str)
連線數。
系統正常運行時間 量測計 s N/A FALSE (無) 系統運行的時間。
system.processes.created 總和 {進程} 累積 TRUE (無) 已建立的處理程序總數。
system.processes.count 總和 {進程} 累積 FALSE 狀態:程序狀態 (值:blocked、daemon、detached、idle、locked、orphan、paging、running、sleeping、stopped、system、unknown、zombies) 每個狀態中的進程總數。
系統分頁利用率 量測計 1 N/A FALSE device:頁面檔案名稱(值:Any Str)
state:分頁使用類型(值:快取、免費、已使用)
交換 (Unix) 或分頁檔 (Windows) 使用率。
system.paging.usage 總和 依據 累積 FALSE device:頁面檔案名稱(值:Any Str)
state:分頁使用類型(值:快取、免費、已使用)
交換 (Unix) 或分頁檔 (Windows) 使用量。
system.paging.operations 總和 {操作} 累積 TRUE direction:頁面流程(值:page_in、page_out)
type:故障類型(值:major、minor)
分頁作業。
系統分頁錯誤 總和 {錯誤} (無) TRUE type:故障類型(值:major、minor) 頁面錯誤數。
system.filesystem.utilization (系統檔案系統使用率) 量測計 1 N/A FALSE device:檔案系統識別碼
mode:掛載模式(值:ro、rw)
mountpoint:路徑
type:檔案系統類型(值:ext4、tmpfs等)
檔案系統儲存空間使用率。
system.filesystem.usage(系統檔案系統使用情況) 總和 依據 累積 FALSE device:檔案系統識別碼
mode:掛載模式
mountpoint:路徑
type:檔案系統類型
state:使用類型(值:free、reserved、used)
使用的檔案系統位元組。
system.filesystem.inodes.usage 總和 {inode} 累積 FALSE device:檔案系統識別碼
mode:掛載模式
mountpoint:路徑
type:檔案系統類型
state:使用類型(值:free、reserved、used)
使用的檔案系統 Inode。

小提示

請隨時分享您對新效能計數器或您想要看到的功能的意見反應,方法是張貼到我們的 GitHub 社群 或透過 入口網站意見反應

資源屬性

OpenTelemetry 資源語義約定仍在開發中。 我們正在積極與 OSS 社群合作,以針對各種案例改進和標準化此命名慣例 - 請分享您的意見反應,以協助我們持續改善您的體驗。

一般而言,透過 Azure 監視器代理程式 + 資料收集規則收集並傳送至 Azure 監視器工作區的 OpenTelemetry 計量會自動新增下列雲端資源屬性做為維度,以支援資源範圍的查詢:

  • Microsoft.resourceid
  • Microsoft.subscriptionid
  • Microsoft.資源群組名稱
  • Microsoft.Resource 類型
  • Microsoft.amwresourceid

OpenTelemetry 每個進程 指標 都有自己的特殊資源 屬性集。 下表顯示 Azure 監視器代理程式自動升級為維度的資源屬性。

名稱 Description 價值觀 已啟用
處理程序.命令 用於啟動進程的命令(即命令名稱)。 在基於 Linux 的系統上,可以將proc/[pid]/cmdline中的字串設定為第零個。 在 Windows 上,可以設定為從 GetCommandLineW提取的第一個參數。 Any Str true
process.executable.name 進程的可執行檔名稱。 在基於 Linux 的系統上,可以設定為 Name in proc/[pid]/status。 在 Windows 上,可以設定為 GetProcessImageFileNameW 的基底名稱。 Any Str true
process.owner 擁有程式之使用者的帳戶名稱。 Any Str true
process.pid 進程識別碼 (PID)。 任何整數 true
process.cgroup cgroup 與進程相關聯(僅限 Linux)。 Any Str 假的
process.command_line 完整命令用來啟動處理程序,作為代表完整命令的單一字串。 在 Windows 上,可以將其設定為 GetCommandLineW 的結果。 如果您必須為了監控而組裝它,請不要設置此設置;使用 process.command_args 代替。 Any Str 假的
process.executable.path 程序可執行檔的完整路徑。 在 Linux 型系統上,可以設定為目標 proc/[pid]/exe。 在 Windows 上,可以將其設定為 GetProcessImageFileNameW 的結果。 Any Str 假的
process.parent_pid 父進程識別碼 (PPID)。 任何整數 假的

process.command_line 屬性可以包含數千個字元的極長字串,因此不適合作為一般度量維度。 我們可能會根據提交給產品小組的客戶使用者案例,找到不同的方式來顯示此屬性。

後續步驟

使用各種服務的自訂指標: