Skip to content

feat(metrics-exporter): add Prometheus metrics plugin#7

Open
sor4chi wants to merge 1 commit into
mainfrom
ci/spotless-lint-format
Open

feat(metrics-exporter): add Prometheus metrics plugin#7
sor4chi wants to merge 1 commit into
mainfrom
ci/spotless-lint-format

Conversation

@sor4chi

@sor4chi sor4chi commented Jun 8, 2026

Copy link
Copy Markdown
Member

どういう変更か

  • metrics-exporter/ を追加し、Paper サーバーから Prometheus 形式の /metrics を HTTP 公開する MaximumMetricsExporter-Paper を実装(Phase 1: プレイヤー数・TPS・ワールド状態・join/quit/kick/death・JVM hotspot)
  • core / bukkit / paper の 3 層構成。配布 JAR は :paper のみ
  • buildSrc に Release 用 convention(mcRelease, mcPluginShadow)を追加。GHA の plugin 名分岐を廃止
  • Prometheus 依存は Shadow で同梱 + relocate。server-name の Maximum 固有デフォルトを削除
  • ADR 0005(metrics-exporter)、0006(Release 配布物宣言)を追加

なぜ変更するのか

  • Paper サーバーの運用指標を既存 Prometheus + Grafana へ統合するため、Bukkit/Paper API から pull できる exporter が必要
  • プラグイン / runtime が増えても Release workflow を触らない Gradle 側の宣言に寄せたい
  • Prometheus 同梱は MC プラグイン界隈の定石(shade / Shadow + relocate)。根拠は下記 <details> 参照

追加の情報

  • マージ後 main HEAD から metrics-exporter-v0.1.0 タグを push して Release 作成
MC 用語: Paper / Bukkit / モジュール名 `bukkit`・`paper`
  • Bukkit API: MC サーバープラグイン向けの共通 Java API(イベント等)
  • Paper: Bukkit 互換サーバー。TPS など Paper 固有 API あり。本番は Paper
  • metrics-exporter/bukkit/: Bukkit API だけで取れる指標(library。Release 対象外
  • metrics-exporter/paper/: Paper 固有 API(TPS 等)+ 配布 JAR の入口

「サーバー実装 = Paper」と「Gradle モジュール名 = bukkit/paper」は別概念(ADR 0004

なぜ Shadow か(配布 JAR の作り方・根拠付き)

前提

MC プラグインは plugins/*.jar 1 ファイルで配布する。Prometheus client は Paper が同梱しないため、プラグイン JAR 内に lib を入れる必要がある。

検討した案

判断 理由
A. jar + runtimeClasspath の zipTree のみ metrics では不採用 同梱はできるが relocate なし。別 plugin も同 lib を同梱すると衝突しうる(下記ソース)
B. plugin.ymllibraries: 本 repo では不採用 Spigot の preview、Maven Central 限定。利用者が lib を個別管理する前提になり、汎用 plugin repo としての配布物完結性が落ちる
C. Shadow + relocate 採用 MC / Java 界隈の定石。Gradle なら Shadow(Maven なら shade plugin と同種)

login-notify は外部 Maven 依存がないため、Shadow は 同梱の統一手段として使うだけ(relocate 不要)。

relocate が要る理由(metrics-exporter)

複数 plugin が同じパッケージ(例: io.prometheus.*)を relocate せず fat JAR 同梱すると、先に読み込まれた plugin のクラスが使われ、バージョン差で壊れる——Spigot 側の説明:

If more than one plugins access that package, it'll fall back to the first plugin that has it inside it. This can cause conflicts, especially if different versions are required.

SpigotMC: multiple plugins sharing the same Maven dependency (Solved)

本 PR では io.prometheusvc.maximum.mc.metricsexporter.lib.prometheus へ移す(Maven Shade: class relocation / Shadow: relocation と同趣旨)。

buildSrc convention の位置づけ

Shadow 自体は外部 plugin。McPluginShadowPluginJAR 名・relocate 宣言・Release 対象タスクを配布 subproject ごとにコピペしないための薄いラッパ(ADR 0006)。

参考リンク

@sor4chi sor4chi changed the title feat(metrics-exporter): add plugin and Spotless CI feat(metrics-exporter): add Prometheus metrics plugin Jun 8, 2026
@sor4chi sor4chi force-pushed the ci/spotless-lint-format branch from 53b9de7 to b3155c3 Compare June 8, 2026 15:01
@sor4chi sor4chi force-pushed the ci/spotless-lint-format branch from 58edffc to a825c93 Compare June 8, 2026 15:31
@sor4chi sor4chi marked this pull request as ready for review June 8, 2026 15:39
…ventions

Add metrics-exporter (core/bukkit/paper) with Phase 1 Prometheus metrics,
mcRelease/mcPluginShadow build conventions, and ADR 0005/0006. Release
workflow discovers distribution artifacts via Gradle; Prometheus is shaded
and relocated. Drop Maximum-specific server-name defaults.

Co-authored-by: Cursor <cursoragent@cursor.com>
@sor4chi sor4chi force-pushed the ci/spotless-lint-format branch from 1a3e32e to 397c3b2 Compare June 8, 2026 16:04
@sor4chi sor4chi requested a review from a01sa01to June 8, 2026 16:16
@a01sa01to

a01sa01to commented Jun 8, 2026

Copy link
Copy Markdown
Member

😅 しばしお待ちを

@sor4chi

sor4chi commented Jun 8, 2026

Copy link
Copy Markdown
Member Author

そんなに急いでないし破壊的なものでもないから大丈夫w

@sor4chi sor4chi requested a review from nomanoma121 June 8, 2026 16:24
@nomanoma121

Copy link
Copy Markdown

自分も時間かかるかもです🙇

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants