亚马逊AWS官方博客

Gamelift 敏捷开发与实时日志监控解决方案

随着国内外对战类游戏越来越热门,为了应对游戏开发者们对敏捷开发的需求,除了在游戏客户端使用成熟的游戏引擎(Unreal,Unity,O3DE等)加速开发速度,亚马逊云科技提供的服务端侧的Gamelift越来越受到国内外游戏公司和工作室(育碧,贝塞斯达等)的青睐,不光可以加速开发速度,还能帮助降低后端服务器成本和开发风险。

一些关于Gamelift的介绍,本文不过多赘述,详情可以观看我之前的网络研讨会。

在陪伴诸多客户使用Gamelift开发了多款游戏的过程中,我发现,在整个开发过程中,虽然总体的时间缩短了,但是在基于托管服务在debug问题上总是不够方便。研发和调试的时间占比大概各占50%,这也给我们提出了一个挑战,如何压缩调试的时间,将整体的开发周期再进一步缩短成为了我们的目标。

现在我会介绍几个快速提升开发调试效率的实时日志监控解决方案,其中包括3个原生方法和1个客户自定义方法,能够帮大家将开发做的更加敏捷。

通常Amazon原生的Gamelift Debug方法有三个方法提供给各位用户:

  1. GameLift Service metrics: GameLift 提供了很多 Amazon CloudWatch metrics 对各种服务的监控指标,比如 game servers, Fleets, Queues和 这些指标在Gamelift和CloudWatch的控制台界面上都可以看到。 您可以创建 CloudWatch Alarms 去发送电子邮件, 手机短信, 或其他的报警推送. 还可以创建一个 CloudWatch Dashboards 去定制你的监控看板,更清晰的观察您关注的指标.

  1. Game server metrics: 因为Gamelift不会检测您的服务器内部程序,不能提供session-related以往的指标. 您可以使用 CloudWatch Agent,去上报您想要监控的指标。使用 StatsD agent , 您就可以在您的游戏服务器进程里发送数据到StatsD 客户端。当然,您也可以在您的游戏服务器包里面集成AWS SDK,使用SDK发送监控到CloudWatch。 您可以参考这个亚马逊云科技官方开源方案 this reference solution.

  1. Game server logs: GameLift Server SDK可以帮助收集game server session日志文件。 这写log文件会在session结束后上传到AWS后端,我们可以在Gamelift控制台上下载到。如果需要更,我们可以使用 CloudWatch Logs 去实时收集服务器上的日志。 使用CloudWatch Logs还有另一个好处,就是Gamelift本身不会对log进行定期删除rotation,而CloudWatch Log可以配置rotation 选项帮助清理服务器上的日志,以免磁盘用满。

除了以上3总种方法,开发者或者工作室可能有自己的监控系统,当然也可以将我们自己的监控和日志系统加入到Gamelift服务里面。以下就是操作方法:

我们以目前使用较为广泛的Prometheus 为例子:

第一步,定位到我们输出log的路径,在游戏服务端代码里面定义,比如下面这段代码,我们定义到游戏路径下/local/game/log/路径下,从而更新到Prometheus的配置文件中。

第二步,修改Gamelift镜像安装脚本:

这里我们需要理解一下Gamelift托管镜像原理:

上传游戏服务器运行包的同时还需要上传一个启动脚本install.sh或者install.bat,他们会被Gamelift保存到/local/game或者C:\game目录下

上传后Gamelift的build模块会根据上传的文件包和脚本制作一个AMIs游戏镜像,这样可以减少每次开机的下载和安装时间,方便游戏上线后弹性伸缩时快速启动使用。

所以,这个install.sh不是每次开启新服务器的时候都会运行的,因此,除了上传的文件里面要包含Prometheus的agent,我们要加入开机启动项,我建议将Prometheus的启动项加入Linux系统的rc.local文件里面:

#!/bin/bash
LOG=install.log
sudo yum install -y ncat jq &>>${LOG}

cd node_exporter
sudo tar xvfz node_exporter-1.1.2.linux-amd64.tar.gz

# note: add start node_exporter script to rc.local
echo 'sudo nohup /local/game/node_exporter/node_exporter-1.1.2.linux-amd64/node_exporter >/dev/null 2>&1 &' | sudo tee -a /etc/rc.d/rc.local

这样就能保证每次启动的时候,我们的监控客户端都可以正常启动了。

以上就是4种帮助Gamelift开发者敏捷开发的监控与日志解决方案,后面我们会更新更多关于游戏开发和Gamelift的博客内容,敬请期待。

如果您希望获取到更多关于Gamelift的资源,欢迎访问https://aws.amazon.com/cn/gamelift/ 页面,或者点击页面的联系我们,我们非常乐于帮主游戏开发者解决后端服务的痛点。

本篇作者

齐海澎

亚马逊云科技解决方案架构师,亚马逊云科技游戏技术社区中国区负责人,有多年Devops 经验,擅长各种类型游戏架构与运维解决方案,致力于AmazonGameTech 的推广,在 Gamelift 等游戏服务上有丰富的实践经验。