虚拟机指标
使用 PlayFab Multiplayer Servers 创建多人游戏服务器时,虚拟机指标提供有关作为 PlayFab 虚拟机生成的一部分创建的虚拟机 (VM) 资源的独特见解。 此功能提供对虚拟机的系统级别指标(如 CPU、RAM 等)的访问权限。 借助这些指标,可以做出关于最大化虚拟机资源利用率的明智决策。
性能指标可以支持多种开发场景。
- 使用 CPU 和内存利用率数据来衡量多人游戏服务器所需的资源,可以正确计算出特定虚拟机 SKU(类型)上最佳的游戏服务器数量
- 使用网络计数器来检测不正常的网络环境,例如尝试进行的 DDoS 攻击或其他网络拥塞
PlayFab Multiplayer Servers 服务通过虚拟机指标功能支持有限数量的系统指标。
用法
根据内部版本的创建方式,可以采用以下两种方式为其启用虚拟机指标:
- 可以使用“游戏管理器”来启用“新建内部版本”游戏管理器页面上的“虚拟机指标”复选框。
- 可以使用“PlayFab Multiplayer Servers API”将以下 API 对象中的属性“IsEnabled”设置为 TRUE。
- CreateBuildWithManagedContainer API 中的 InstrumentationConfiguration 调用包含容器的 Windows 内部版本
- CreateBuildWithProcessBasedServer API 中的 InstrumentationConfiguration 调用基于进程的 Windows 内部版本
- CreateBuildWithCustomContainer API 中的 LinuxInstrumentationConfiguration 调用 Linux 内部版本
内部版本一旦启用了虚拟机指标功能,则此功能在内部版本的整个生命周期内都将保持启用状态。 创建内部版本后,无法再为其启用/禁用虚拟机指标。
Windows
在 Windows 上,虚拟机指标集合是名为 VmAgent 的现有 PlayFab 容器/进程业务流程协调程序的一项功能。 VmAgent 每 10 秒定期运行一个任务,此任务将会查询以下系统性能计数器。
- 可用兆字节数
- 处理器时间百分比
- 用户时间百分比
- (驱动器 D:)的磁盘读取数/秒
- (驱动器 D:)的磁盘写入数/秒
- 收到的字节数/秒
- 发送的字节数/秒
收集的计数器值发送到我们在虚拟机上运行的内部指标收集器。 收集器会聚合这些值并将其发送到我们的内部后端,以便可以在“游戏管理器”展示给用户。
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 代理来收集以下指标:
- cpu_usage_system
- cpu_usage_user
- memory_available_percent
- net_bytes_recv_diff(eth0 收到的网络字节数)
- net_bytes_sent_diff(eth0 发送的网络字节数)
- diskio_reads_diff(sdb 的读取次数)
- diskio_writes_diff(sdb 的写入次数)
与 Windows 类似,telegraf 会将收集到的计数器值发送到我们的内部指标收集器。 收集器会聚合这些值并将其发送到我们的内部后端,以便可以在“游戏管理器”展示给用户。
分配百分比
在 Windows 和 Linux 虚拟机上,我们都发送一个名为“分配百分比”的指标。 用“活动”服务器的数量除以虚拟机上服务器的“总”数即可得出该指标的值。 在评估和解释报告的系统指标值时会用到该指标。 这是因为,具拥有大量 StandingBy 状态服务器的虚拟机相比,拥有大量“活动”状态服务器的虚拟机上的系统指标的值可能会不同。
查看虚拟机指标
为新的内部版本启用虚拟机指标后,一旦成功部署内部版本就会发送指标。 可以使用“游戏管理器”上的“虚拟机”(https://developer.playfab.com/en-US/<YOUR_TITLE_ID>/multiplayer/server/virtual-machines) 页面获取链接,来显示特定虚拟机的虚拟机指标。
还可以通过以下方式访问虚拟机指标:选择内部版本,转到服务器选项卡,然后点击与想要查看其指标的虚拟机同处一行的菜单,并选择“查看指标”。
如何提交有关此功能的反馈?
加入我们在#多人服务器频道上的 Discord,我们很乐意和大家交流,并倾听大家对于此功能的看法!