> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# VM 計量

> PlayFab 多人遊戲伺服器 VM 的 VM 效能計量，公開 CPU、RAM 和系統層級計數器，以協助調整容量並監視裝載的遊戲伺服器。

當您使用 PlayFab 多人遊戲伺服器建立多人遊戲伺服器時，VM 計量可提供有關作為 PlayFab VM 組建一部分所建立之虛擬機器 (VM) 資源的獨特深入解析。此功能可讓您存取虛擬機器的系統層級計量，例如 CPU、RAM 等。透過這些計量，您可以做出明智的決策，以最大化 VM 資源的使用率。

效能計量可支援各種開發案例。

1. 使用 CPU 和記憶體使用率資料來測量多人遊戲伺服器的資源需求，以便正確計算特定虛擬機器 SKU (類型) 上最佳的遊戲伺服器數目
2. 使用網路計數器偵測不規則的網路環境，例如嘗試的 DDoS 攻擊或其他網路壅塞

PlayFab 多人遊戲伺服器服務透過 *VM 計量*功能支援有限數目的系統計量。

## 使用方式

根據組建的建立方式，可以透過兩種方式為組建啟用 VM 計量：

1. 使用 Game Manager，您可以在 Game Manager 的 "New Build" 頁面上啟用 "Virtual machine metrics" 核取方塊。
2. 使用 [PlayFab 多人遊戲伺服器 API](https://learn.microsoft.com/en-us/rest/api/playfab/multiplayer/)，您可以在下列 API 物件中將 **IsEnabled** 屬性設定為 **TRUE**。

* 對於使用容器的 Windows 組建，[CreateBuildWithManagedContainer API 呼叫中的 InstrumentationConfiguration](https://learn.microsoft.com/en-us/rest/api/playfab/multiplayer/multiplayer-server/create-build-with-managed-container#instrumentationconfiguration)
* 對於處理序型 Windows 組建，[CreateBuildWithProcessBasedServer API 呼叫中的 InstrumentationConfiguration](https://learn.microsoft.com/en-us/rest/api/playfab/multiplayer/multiplayer-server/create-build-with-process-based-server#instrumentationconfiguration)
* 對於 Linux 組建，[CreateBuildWithCustomContainer API 呼叫中的 LinuxInstrumentationConfiguration](https://learn.microsoft.com/en-us/rest/api/playfab/multiplayer/multiplayer-server/create-build-with-custom-container#linuxinstrumentationconfiguration)

為組建啟用 VM 計量功能後，它會在組建的整個存留期間保持啟用。組建建立後，就無法為其啟用/停用 VM 計量。

### Windows

在 Windows 上，VM 計量收集是現有 PlayFab 容器/處理序協調器 (稱為 *VmAgent*) 的一項功能。*VmAgent* 會定期 (每 10 秒) 執行一項工作，查詢下列系統效能計數器。

1. Available MBytes
2. % Processor Time
3. % User Time
4. Disk Reads/sec (針對磁碟機 D:)
5. Disk Writes/sec (針對磁碟機 D:)
6. Bytes Received/sec
7. Bytes Sent/sec

收集到的計數器值會傳送至在 VM 上執行的內部計量收集器。收集器會彙總這些值並傳送至我們的內部後端，以便在 [Game Manager](https://developer.playfab.com) 上向使用者呈現。

### Linux

在 Linux 上，我們使用開放原始碼的 [telegraf](https://github.com/influxdata/telegraf) 代理程式來收集和處理計量。Telegraf 每 10 秒收集一次計量，並每 60 秒將其發出至我們的內部收集器代理程式。如需參考，您可以在下方查看我們所使用之 [telegraf.conf](https://docs.influxdata.com/telegraf/v1.15/administration/configuration/#agent-configuration) 設定檔的內容。如需詳細資訊，請前往[官方 telegraf 文件](https://docs.influxdata.com/telegraf/v1.15)。

我們也使用名為 `telegraf-geneva-processor` 的內部公用程式，針對計數器層級計量 (例如 [net\_bytes\_recv](https://github.com/influxdata/telegraf/blob/master/plugins/inputs/net/NET_README.md#measurements--fields) 計量) 發出差異值。發出差異值而非實際計數器值，可在提供的 Game Manager 圖表中產生更好的視覺效果。

```
[agent]
  interval = "10s" 
  round_interval = true
  metric_batch_size = 1000
  metric_buffer_limit = 10000
  collection_jitter = "0s"
  flush_interval = "60s"
  flush_jitter = "0s"
  precision = ""
  debug = false
  omit_hostname = true
  
[global_tags]
  titleID = "TITLE_ID"
  buildID = "BUILD_ID"
  vmID = "VM_ID"

# consult man proc for details
# https://github.com/influxdata/telegraf/tree/master/plugins/inputs/cpu
[[inputs.cpu]]
  percpu = false
  totalcpu = true
  name_prefix = "telegraf_"
  fieldpass = ["usage_system", "usage_user"]

[[inputs.mem]] # https://www.linuxatemyram.com/
  fieldpass = ["available_percent"]
  name_prefix = "telegraf_"

[[inputs.net]] # /proc/net/dev
  fieldpass = ["bytes_sent", "bytes_recv"]
  name_prefix = "telegraf_"
  interfaces = ["eth0"]
  tagexclude = ["interface"]
  
# https://github.com/influxdata/telegraf/tree/master/plugins/inputs/diskio
[[inputs.diskio]] # /proc/diskstats
  fieldpass = ["reads", "writes"] # number of reads and writes on sdb device  
  devices = ["sdb"] # sdb device contains everything (including container storage) apart from /mnt
  name_prefix = "telegraf_" # which is the place where some of our shared folders are

# grab the allocated percentage from VmAgent. Be aware that this must be in influx format  
[[inputs.http]]
  urls = ["http://localhost:56001/v1/metrics/allocatedpercentage"]
  name_prefix = "telegraf_"
  data_format = "influx"
  tagexclude = ["url"]

# send all telegraf data to internal collector
[[outputs.socket_writer]]
  address = "unix:///var/etw/mdm_influxdb.socket"
  data_format = "influx"
  
# write this data to a file. This might be removed in the future  
[[outputs.file]]
  files = ["/tmp/PerformanceMetrics.csv"]
  data_format = "influx"
  rotation_max_size = "100MB"
  rotation_max_archives = 5
  
[[processors.execd]]
  command = [
    "/usr/bin/telegraf-geneva-processor", 
    "-configFile=/etc/telegraf/telegraf.geneva.processor.conf"
  ]
```

此 *telegraf.conf* 設定可讓 telegraf 代理程式收集下列計量：

1. cpu\_usage\_system
2. cpu\_usage\_user
3. memory\_available\_percent
4. net\_bytes\_recv\_diff (eth0 接收的網路位元組)
5. net\_bytes\_sent\_diff (eth0 傳送的網路位元組)
6. diskio\_reads\_diff (sdb 的讀取次數)
7. diskio\_writes\_diff (sdb 的寫入次數)

與 Windows 類似，telegraf 會將收集到的計數器值傳送至我們的內部計量收集器。收集器會彙總這些值並傳送至我們的內部後端，以便在 [Game Manager](https://developer.playfab.com) 上向使用者呈現。

### 配置百分比

在 Windows 和 Linux VM 中，我們都會發出名為*配置百分比*的計量。此計量的值是將 *Active* 伺服器數目除以 VM 上的伺服器*總*數計算而得。此計量旨在用於評估和解讀所回報的系統計量值。這是因為在有大量 Active 伺服器的 VM 上，系統計量的值可能與有大量 StandingBy 伺服器的 VM 不同。

## 檢視 VM 計量

當您為新組建啟用 VM 計量功能時，計量會在組建成功部署後立即發出。您可以使用 Game Manager 上的 "Virtual Machines" ([https://developer.playfab.com/en-US/\&lt;YOUR\_TITLE\_ID\&gt;/multiplayer/server/virtual-machines](https://developer.playfab.com/en-US/\&lt;YOUR_TITLE_ID\&gt;/multiplayer/server/virtual-machines)) 頁面，取得顯示指定 VM 之 VM 計量的連結。

您也可以選取您的組建，前往 servers 索引標籤，然後按下您想要查看其計量之 VM 所在列的功能表，並選取 "View Metrics" 來存取 VM 計量

<img src="https://mintcdn.com/microsoft-4404708b/U1LR64ZWxo45eXwl/images/playfab/multiplayer/servers/viewMetricsUpdate.PNG?fit=max&auto=format&n=U1LR64ZWxo45eXwl&q=85&s=3becf1b6953d4a313b344663c4eed239" alt="檢視 VM 計量" width="3839" height="1994" data-path="images/playfab/multiplayer/servers/viewMetricsUpdate.PNG" />

## 我該如何提交此功能的意見反應？

在 [Discord](https://aka.ms/msftgamedevdiscord) 的 #multiplayer-servers 頻道上加入我們，我們很樂意與您聯繫，並聽取您對此功能的想法！

## 另請參閱

* [封存和擷取多人遊戲伺服器記錄](/zh-TW/services/playfab/multiplayer/servers/archiving-and-retrieving-multiplayer-server-logs)


## Related topics

- [最佳做法與推出檢查清單](/zh-TW/services/playfab/multiplayer/servers/best-practices.md)
- [組建概觀頁面](/zh-TW/services/playfab/multiplayer/servers/build-overview.md)
- [定價計量](/zh-TW/services/playfab/pricing/meters/meters.md)
- [計量和術語](/zh-TW/services/playfab/data-analytics/learn-data/reports/metrics-and-terminology.md)
- [排行榜計量](/zh-TW/services/playfab/pricing/meters/leaderboard-meters.md)
