虚拟机指标

使用 PlayFab Multiplayer Servers 创建多人游戏服务器时,虚拟机指标提供有关作为 PlayFab 虚拟机生成的一部分创建的虚拟机 (VM) 资源的独特见解。 此功能提供对虚拟机的系统级别指标(如 CPU、RAM 等)的访问权限。 借助这些指标,可以做出关于最大化虚拟机资源利用率的明智决策。

性能指标可以支持多种开发场景。

  1. 使用 CPU 和内存利用率数据来衡量多人游戏服务器所需的资源,可以正确计算出特定虚拟机 SKU(类型)上最佳的游戏服务器数量
  2. 使用网络计数器来检测不正常的网络环境,例如尝试进行的 DDoS 攻击或其他网络拥塞

PlayFab Multiplayer Servers 服务通过虚拟机指标功能支持有限数量的系统指标。

用法

根据内部版本的创建方式,可以采用以下两种方式为其启用虚拟机指标:

  1. 可以使用“游戏管理器”来启用“新建内部版本”游戏管理器页面上的“虚拟机指标”复选框。
  2. 可以使用“PlayFab Multiplayer Servers API”将以下 API 对象中的属性“IsEnabled”设置为 TRUE

内部版本一旦启用了虚拟机指标功能,则此功能在内部版本的整个生命周期内都将保持启用状态。 创建内部版本后,无法再为其启用/禁用虚拟机指标。

Windows

在 Windows 上,虚拟机指标集合是名为 VmAgent 的现有 PlayFab 容器/进程业务流程协调程序的一项功能。 VmAgent 每 10 秒定期运行一个任务,此任务将会查询以下系统性能计数器。

  1. 可用兆字节数
  2. 处理器时间百分比
  3. 用户时间百分比
  4. (驱动器 D:)的磁盘读取数/秒
  5. (驱动器 D:)的磁盘写入数/秒
  6. 收到的字节数/秒
  7. 发送的字节数/秒

收集的计数器值发送到我们在虚拟机上运行的内部指标收集器。 收集器会聚合这些值并将其发送到我们的内部后端,以便可以在“游戏管理器”展示给用户。

Linux

在 Linux 上,我们使用开源“telegraf”代理来收集和处理指标。 Telegraf 每 10 秒收集一次指标,每 60 秒将收集到的指标发送到内部收集器代理。 有关参考,可参阅下面使用的 telegraf.conf 配置文件的内容。 有关更多详细信息,请转到 官方 telegraf 文档

此外,我们还使用名为“telegraf-geneva-processor”的内部实用工具来发送计数器级别指标的差异值(例如,“net_bytes_recv”指标)。 发送差异值而不是实际计数器值能够更好地在提供的“游戏管理器”图形中呈现出可视化效果。

[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 会将收集到的计数器值发送到我们的内部指标收集器。 收集器会聚合这些值并将其发送到我们的内部后端,以便可以在“游戏管理器”展示给用户。

分配百分比

在 Windows 和 Linux 虚拟机上,我们都发送一个名为“分配百分比”的指标。 用“活动”服务器的数量除以虚拟机上服务器的“”数即可得出该指标的值。 在评估和解释报告的系统指标值时会用到该指标。 这是因为,具拥有大量 StandingBy 状态服务器的虚拟机相比,拥有大量“活动”状态服务器的虚拟机上的系统指标的值可能会不同。

查看虚拟机指标

为新的内部版本启用虚拟机指标后,一旦成功部署内部版本就会发送指标。 可以使用“游戏管理器”上的“虚拟机”(https://developer.playfab.com/en-US/<YOUR_TITLE_ID>/multiplayer/server/virtual-machines) 页面获取链接,来显示特定虚拟机的虚拟机指标。

还可以通过以下方式访问虚拟机指标:选择内部版本,转到服务器选项卡,然后点击与想要查看其指标的虚拟机同处一行的菜单,并选择“查看指标”。

查看虚拟机指标

如何提交有关此功能的反馈?

加入我们在#多人服务器频道上的 Discord,我们很乐意和大家交流,并倾听大家对于此功能的看法!

另请参阅