背景
随着游戏业务不断增多,业务使用的环境也越来越复杂。此时对于监控的难度也是逐步增大,一方面是监控的数据量大;另一方面是多云之间对于监控及时性的解决方案。腾讯游戏团队与腾讯云监控团队协作,深入研究如何持续解决游戏运维监控问题。最终我们通过构建 Prometheus 监控专项能力,提供免搭建的高效运维能力,降低了全球业务监控复杂度,提升了监控及时性等棘手问题。
上期我们介绍了 Prometheus 的基础,我简单回顾一下上期重点知识,Prometheus 的四个指标类型分为 Counter(计数器) Gauge(仪表盘), Histogram(直方图), Summary (摘要)。N 台主机向一台主机上报数据指标,推荐使用 Exporter 数据采集方式;N 台主机向一台主机上报指标,推荐使用 Pushgateway 数据采集方式。欢迎点击 腾讯游戏原来是这样使用 Prometheus 的!(上) 了解更多。
在实战之前,我们再来看一下 Prometheus 的架构图:
从上图中可以看出,监控数据采集有三种来源:
-
通过 Exporter 进行数据 Pull。
-
对于 short-lived jobs 通过 push 到 pushgateway,然后发送到 Prometheus server。
-
Service Discovery(自动发现)。
下文以腾讯游戏为实践案例,重点介绍 Pull 和 Push 的两种场景,ServiceDiscovery (服务发现)场景常用于 K8S 监控。
Exporter(Pull)
Exporter 方式是 Prometheus 最常用的监控方式。Prometheus 社区提供了丰富的 Exporter 实现,涵盖了从基础设施,中间件以及网络等各个方面的监控功能。这些 Exporter 可以实现大部分通用的监控需求。广义上讲所有可以向Prometheus 提供监控样本数据的程序都可以被称为一个 Exporter。而 Exporter 的一个实例称为 target,如下所示,Prometheus 通过轮询的方式定期从这些 target 中获取样本数据:
背景需求
某项目在全球统一部署时,采用大厅服和不同地区独立部署战斗服的架构,玩家通过就近接入战斗服的方式进行对战,所以大厅服和战斗服之间的稳定性非常重要,为了优化玩家体验,一般通过拉专线的方式来进行保障。而专线的网络质量,我们必须对其进行实时监控,一旦监控发现异常,可及时联系专线提供商进行处理,保障业务稳定运行。
解决方案
1. 大厅服实时探测各个战斗服之间网络质量,采用持续 Ping 方式
2. 大厅服将采集到的数据通过 tlog 落地
3. 使用 grok-exporter 插件解析 tlog 文件,并将结果上报到 Prometheus-agent,最终汇总到 Promethe-server 端。
架构图如下:
[点击查看大图]
实施过程
**1.**选取测试节点
我们需要实时监控大厅服和战斗服之间的网络质量,所以必须选择一个大厅服作为源节点,多个战斗服作为目标节点。以欧洲大厅为例:
**2.**搭建 tlog 服务
这里我们只需要前半段,也就是到数据采集这一段:
mkdir/data/home/tlog
上传 tlog.tar.gz 到 /data/home/tlog 目录并解压,修改配置文件 tlogd_bin_vec.xml ,重点修改2个地方即可:
<Url>udp://0.0.0.0:10001</Url>#1、侦听地址和端口
<Device>
<File>
<Pattern>/data/home/user00/tlog/logplat/log/tlogd_1/65535_%Y%m%d_%H00.log</Pattern>#2、文件存储路径
<BuffSize>1024000</BuffSize>
<SizeLimit>1024000001</SizeLimit>
<Precision>3600</Precision>
<MaxRotate>100</MaxRotate>
<SyncTime>0</SyncTime>
<NoFindLatest>0</NoFindLatest>
</File>
</Device>
启动 tlog 服务:
cd/data/home/user00/tlog/tlogd/&&bash start_tlogd_vec.sh
3. 大厅服部署网络质量采集脚本
catidc_list.txt
1.1.1.1 2.2.2.2 sgame_eu_xxx 1
1.1.1.1 2.2.2.2 sgame_eu_xxx 1
1.1.1.1 2.2.2.2 sga