统一指标

统一指标

功能齐全的 Minecraft 服务器指标收集代理。支持 Prometheus 和 InfluxDB。

UnifiedMetrics

License Issues Workflow Status Discord

UnifiedMetrics 是一款功能齐全、免费且开源的 Minecraft 服务器指标收集插件。本项目基于 GNU LGPLv3 许可协议授权。

Grafana Dashboard 开箱即用的仪表盘! 点击此处查看实时预览!

特性

  • 平台无关且兼容主流平台。在任何受支持的平台上获得相同的指标和功能。
  • 使用 Prometheus/InfluxDB 实时监控你的服务器,并提供 Grafana 仪表盘。
  • 高性能的指标收集。对服务器性能几乎无影响。
  • 免费且开源。代码免费开放,任何人都可以审计和贡献。

兼容性

服务器:

  • 1.8+ Spigot 服务器 (包括基于 Spigot 的分支)
  • 1.16+ Fabric 服务器
  • Minestom
  • Velocity
  • BungeeCord

指标:

  • Prometheus
  • InfluxDB

快速开始

阅读 wiki 了解如何开始使用。

指标

指标表格(点击展开)
收集器 描述 平台 默认值
systemGc 垃圾回收持续时间和释放的字节数 全部 true
systemMemory 已用、已提交、最大和初始内存 全部 true
systemProcess CPU 负载、秒数和进程启动时间 全部 true
systemThread 当前、守护、已启动和峰值线程数 全部 true
events 登录、加入、退出、聊天和 ping 事件计数器 全部 true
server 插件数量和玩家数量 全部 true
tick Tick 持续时间直方图 Bukkit、Minestom true
world 世界实体、玩家和区块数量 Bukkit、Minestom true

特别鸣谢

Bloom Host 慷慨地为 UnifiedMetrics 提供了开发服务器。Bloom 内置服务器拆分功能,使得构建监控栈变得极其简单。通过此链接在 Bloom 获取高性能服务器。

Bloom logo

YourKit 通过创新且智能的工具支持开源项目,用于监控和分析 Java 和 .NET 应用程序。YourKit 是 YourKit Java Profiler、YourKit .NET Profiler 和 YourKit YouMonitor 的创造者。

YourKit Logo

从源码构建

说明(点击展开)

要求:

  • JDK 8+(Fabric 需 16+,Minestom 需 17+)
  • Git(可选)

要构建 UnifiedMetrics,你需要先获取源代码。你可以从 GitHub 下载源码或使用 Git CLI。

$ git clone https://github.com/Cubxity/UnifiedMetrics && cd UnifiedMetrics

在克隆的目录中打开终端并运行以下命令。以下命令将构建所有子项目。

$ ./gradlew assemble -x signArchives

除非你已经配置了签名,否则需要 -x signArchives 来跳过签名

要构建特定的子项目,可以在前面加上子项目路径。例如:

$ ./gradlew :unifiedmetrics-platform-bukkit:assemble -x signArchives

输出的构建产物可以在 subproject/build/libs 中找到。

API

说明(点击展开)

示例

示例插件可以在 examples 目录下找到。

Gradle (Kotlin)

repositories {
    mavenCentral()
    maven("https://s01.oss.sonatype.org/content/repositories/snapshots/")
}
dependencies {
    // ...
    compileOnly("dev.cubxity.plugins", "unifiedmetrics-api", "0.3.3-SNAPSHOT")
}

使用方法

将 :unifiedmetrics-api 添加为依赖项(compileOnly/provided)。如有可能,优先使用平台的服务管理器。

import dev.cubxity.plugins.metrics.api.UnifiedMetricsProvider

/* ... */

val api = UnifiedMetricsProvider.get()