Mineflux:构建 Telegraf 插件以从您的 Minecraft 服务器收集数据

导航到

作者:Ayrdrie Palmer & Adam Perlin

日文翻译 by Atsushi Fujiwara

概述

我们在InfluxData的第一周时间用来学习InfluxDB,这是InfluxData背后的数据库。我们被告知其他组件的使用很简单,所以我们决定通过编写一个Telegraf插件来验证这一说法,然后使用它来收集指标和事件,将其输入到InfluxDB中并在Chronograf中进行可视化。 Telegraf是一个Go代理,是InfluxData的一部分,负责收集、处理、聚合并将指标写入InfluxDB。我们很高兴这个机会让我们有机会锻炼我们的Go技能,但首先我们需要一些可以收集数据的东西。这个想法很快就出现在我们面前,因为在这里,Minecraft是我们选择在线游戏之一。我们甚至有一个公司Minecraft服务器,远程员工可以与总部员工互动。

尽管对普通玩家来说可能不明显,但Minecraft实际上充满了收集统计数据的机会。游戏本身有很多数值;可以测量从玩家的氧气水平到被杀牛的总数。我们认为编写一个Minecraft插件将是学习如何编写插件的一个简单起点,而且对整个办公室来说都会很有趣。如果你对设置用于测量Minecraft统计信息的TICK堆栈感兴趣,请继续阅读!

如何编写Telegraf插件

首先,我们必须弄清楚如何从Minecraft中提取数据。我们决定使用RCON协议(将在下面简要介绍)。该协议允许客户端从服务器上刮取特定游戏内命令的输出。然而,这些输出并没有以方便的方式格式化,我们很快意识到编写插件的大部分工作将是在解析这些数据。数据处理是构建Telegraf插件困难的部分。

使用Telegraf本身很容易。一旦编写了数据处理代码,我们只需将我们的代码转移到Telegraf可以识别的接口中,并创建一个包含必要插件选项的配置文件。

Minecraft Telegraf插件是如何工作的?

Minecraft Telegraf plugin architecture

该插件使用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

这会将目标镐子添加到游戏中,并跟踪玩家使用铁镐的次数。

以下是“通用”计分板统计信息的列表

……以及所有计分板标准的详细列表

如何跟踪我的Minecraft统计数据?

对于这个博客,您需要安装以下一组二进制文件:InfluxDB Telegraf Chronograf

InfluxDB、Telegraf和Chronograf都可以下载到您各自的平台上。

本博客假设您已经在$PATH中安装了所有三个二进制文件。

步骤 1:准备您的Minecraft服务器

您需要采取一些步骤以确保Minecraft服务器准备好进行RCON连接。

将以下内容(将占位符字段password和port替换为实际数据)添加到您的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://127.0.0.1:8089"] # UDP endpoint example
 urls = ["https://127.0.0.1:8086"] # required

urls更改为您的influxd实例运行的IP/端口。如果您直接在本地机器上运行influxd,则默认的localhost:8086应该足够好,但如果您有不同的配置,您必须将此字段更改为集群/容器/远程服务器的IP。

接下来,导航到配置文件的[[inputs.minecraft]]部分,并填写serverportpassword字段。确保通过删除“#”取消注释它们。配置文件的这部分应包含与您的minecraftserver.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实例,您就可以创建一些仪表板。在这里,我们在仪表板上创建了三个图表。它们分别衡量玩家的氧气水平、玩家的饥饿水平和玩家死亡次数。有关如何创建仪表板的优秀指南,请参阅这里

Chronograf Dashboard以下是一个构建查询以测量玩家跳跃次数的示例:Query Builder

关于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