Mineflux:构建 Telegraf 插件以从您的 Minecraft 服务器收集数据
作者:Adam Perlin / 产品, 用例, 开发者
2017年8月10日
导航至
作者:Ayrdrie Palmer & Adam Perlin
概述
我们在 InfluxData 的第一周是学习 InfluxDB,InfluxData 背后的数据库。我们被告知其他组件使用起来非常简单,因此我们决定通过编写 Telegraf 插件来测试这一说法,然后使用它来收集指标和事件,以馈送到 InfluxDB 并在 Chronograf 中可视化。Telegraf 是 Go 代理,是 InfluxData 的一部分,负责收集、处理、聚合和将指标写入 InfluxDB。我们很高兴这个机会能让我们有机会锻炼我们的 Go 技能,但首先我们需要一些东西来收集数据。而且这个想法很快就出现在我们脑海中,因为在 InfluxData,Minecraft 是最受欢迎的在线游戏之一。我们甚至有一个公司 Minecraft 服务器,远程员工可以与总部的员工互动。
虽然对于普通玩家来说可能不明显,但 Minecraft 实际上充满了收集统计数据的机会。游戏本身有很多数字;可以测量从玩家的氧气水平到杀死的牛的总数等任何东西。我们认为为 Minecraft 编写插件将是学习如何编写插件的简单开始,并且整个办公室都可以使用它,这将很有趣。如果您有兴趣设置 TICK 堆栈来衡量您的 Minecraft 统计数据,请继续阅读!
如何编写 Telegraf 插件
首先,我们必须弄清楚如何从 Minecraft 中提取数据。我们决定使用 RCON 协议(稍后将对此进行描述)。该协议允许客户端抓取服务器上特定游戏内命令的输出。但是,此输出的格式不方便,我们很快意识到,编写插件的大部分工作将是解析此数据。这种数据处理是构建 Telegraf 插件的难点。
简单部分是使用 Telegraf 本身。一旦数据处理代码编写完成,我们所要做的就是将我们的代码转移到一个 Telegraf 可以识别的接口中,并创建一个包含必要插件选项的配置文件。
Minecraft Telegraf 插件如何工作?
该插件使用 RCON(远程控制台) 协议,以便从 Minecraft 服务器收集数据。RCON 最初由 Valve 开发,用于其自己的游戏服务器,但已成为广泛采用的游戏服务器通信方法。RCON 允许服务器所有者即使无法访问服务器本身也可以使用游戏内控制台。
它在 Minecraft 中的使用方式也相同。Minecraft 已经有一个先进的游戏内控制台系统(很多人都知道它,因为它就是作弊的方式!),允许玩家输入命令来改变世界的行为。例如,以下命令将当前时间设置为黎明
/time set 0
当受到讨厌的怪物攻击时非常有用。
除了这些改变世界的命令外,Minecraft 还有一个内置的记分板,可以使用 /scoreboard
系列命令在游戏中访问。
Minecraft 记分板允许服务器管理员以多种不同的方式跟踪玩家的成就。例如,管理员可以选择跟踪每个玩家的击杀数,或者玩家库存中钻石镐的数量。
服务器管理员还可以添加对特定统计数据(在游戏中称为“目标”)的跟踪,Minecraft 将在内部跟踪这些统计数据并添加到记分板中。
要添加一个跟踪玩家跳跃次数的目标,您可以使用以下命令
/scoreboard objectives add jump stat.jump
/scoreboard objectives add … …
允许管理员将目标插入记分板。
上面命令中的下一个参数 jump
是要跟踪的统计数据的别名。最后一个参数是实际的统计数据本身。
另一个例子可能是
/scoreboard objectives add pickaxe stat.useItem.iron_pickaxe
这将添加目标 pickaxe,跟踪玩家使用铁镐的次数。
以下是 “通用”记分板统计数据列表
... 以及所有 记分板标准的详细列表
如何追踪我自己的 Minecraft 统计数据?
对于本博客,您将需要安装以下二进制文件集:InfluxDB Telegraf Chronograf
InfluxDB、Telegraf 和 Chronograf 可以为您的相应平台下载。
本博客假设您的 $PATH
中包含所有三个二进制文件。
步骤 1:准备您的 Minecraft 服务器
您需要执行几个步骤来确保您的 Minecraft 服务器已准备好进行 RCON 连接。
将以下内容(用实际数据替换虚拟字段密码和端口)添加到您的 Minecraft 服务器的 server.properties
文件中。
enable-rcon=true
rcon.password=
rcon.port=<1-65535>
这会启用 RCON 协议,设置客户端进行身份验证的密码,并选择 RCON 侦听的端口。
步骤 2:运行 InfluxDB
假设 InfluxDB 已在本地安装并在您的路径中,您可以通过简单地运行来启动它
$ influxd
查看此 指南,了解如何将 InfluxDB 启动并作为服务运行。它将指导您如何安装它(如果您尚未安装)。
步骤 3:设置 Telegraf
为您的 TICK 堆栈找到合适的目录,然后运行以下命令以生成启用 Minecraft 插件的模板配置文件
$ telegraf --sample-config --input-filter minecraft --output-filter influxdb > minecraft.conf
接下来,您需要根据您的需求填写配置文件。
导航到配置文件的 [[outputs.influxdb]]
部分
[[outputs.influxdb]]
## The HTTP or UDP URL for your InfluxDB instance. Each item should be
## of the form:
## scheme "://" host [ ":" port]
##
## Multiple urls can be specified as part of the same cluster,
## this means that only ONE of the urls will be written to each interval.
# urls = ["udp://localhost:8089"] # UDP endpoint example
urls = ["http://localhost:8086"] # required
将 urls
更改为您正在运行的 influxd 实例的 ip/端口。如果您直接在本地计算机上运行 influxd,则默认的 localhost:8086
应该可以,但是如果您有不同的设置,则必须将此字段更改为您的集群/容器/远程服务器的 IP。
接下来,向下导航到配置文件的 [[inputs.minecraft]]
部分,并填写 server
、port
和 password
字段。确保通过删除“#”来取消注释它们。配置文件的这一部分应包含与您的 Minecraft server.properties
文件相同的许多信息。
[[inputs.minecraft]]
# server address for minecraft
server = "localhost"
# port for RCON
port = "25575"
# password RCON for mincraft server
password = "replace_me"
修改配置文件以满足您的需求后,运行以下命令。这将启动 Telegraf 服务,并将 Minecraft 插件作为数据输入。
$ telegraf --input-filter minecraft --config minecraft.conf
如果在此时遇到任何错误,则 influxd 未运行,或者您在配置文件中未正确设置它。
从此时开始,Telegraf 服务将不断轮询您的 Minecraft 服务器记分板,并将这些数据点写入 InfluxDB。
步骤 4:查看您的数据!
要查看/分析您的 Minecraft 数据,您可以使用 Chronograf。如果您一直关注本博客,您应该已经安装了它。有关 Chronograf 设置的详细演练,请查看 文档。
一旦 Chronograf 连接到您的 InfluxDB 实例,您就可以创建一些仪表板。在这里,我们在仪表板上创建了三个图表。它们分别衡量玩家的氧气水平、玩家的饥饿水平和玩家死亡次数。有关 如何创建仪表板的优秀指南。
这是一个构建查询以衡量玩家跳跃次数的示例:
关于 Minecraft 数据如何在数据库中存储的说明
数据按 Minecraft 服务器和玩家索引,字段与您添加目标时设置的统计别名共享相同的名称。
InfluxDB 行协议中的一个数据点示例可能如下所示
minecraft,player=notch,server=127.0.0.1:25575 jumps=178i 1498261397000000000
关于 Telegraf 易用性的说明
我们最初不熟悉 TICK 堆栈的组件,但我们能够在短短 5 天内编写一个 Telegraf 插件,其中大部分时间都花在了编写数据处理代码上,而不是弄清楚如何使用 Telegraf。此外,Minecraft 服务器返回的数据格式不太适合存储在任何数据库中,因此我们必须进行大量解析才能抓取重要的部分。如果没有这种额外的样板代码,插件可能可以在 3 天或更短的时间内编写完成。我们认为,这种经验证明 Telegraf 提供了一个最小的接口,该接口不引人注目且易于围绕其构建,从而使这项看似困难的任务变得更加简单。
步骤 5:尽情享用!
根据需要添加任意数量的目标。如果您愿意,可以在 Chronograf 中跟踪所有目标。此插件纯粹旨在演示 Telegraf 是一个易于使用的框架,并且可以与 TICK 堆栈无缝集成。虽然收集 Minecraft 统计数据的使用案例可能不是很明显,但我们认为这将是一个有趣的方式来展示 Telegraf 的强大功能。
如果您有兴趣了解有关 TICK 堆栈的更多信息,请免费下载并亲自试用。
Telegraf InfluxDB Chronograf Kapacitor
如果您对插件代码本身感兴趣,请查看我们的 github 存储库(并随时贡献)
https://github.com/influxdata/telegraf/tree/master/plugins/inputs/minecraft