コンピュータ

BOINCの稼働状況をGrafanaで一望する Exporter を作った

複数台のマシンで BOINC を回しているのですが、「いま各ホストがどのタスクをどこまで進めているのか」をまとめて確認する手段がなくて地味に不便だったので、Prometheus 互換の Exporter を作りました。

各ホストの BOINC クライアントに GUI RPC で接続してメトリクスを集め、Grafana で一枚のダッシュボードに集約できます。眺めているだけで自己満足できる、いい感じのやつができました✨

リポジトリはこちらです。

GitHub - surface0/boinc-exporter: A Prometheus / VictoriaMetrics exporter for BOINC that collects task status, credits, and project information via the BOINC GUI RPC interface.
A Prometheus / VictoriaMetrics exporter for BOINC that collects task status, credits, and project information via the BOINC GUI RPC interface. - surfa...
スポンサーリンク

背景

以前の記事で書いたとおり、Oracle Cloud の Always Free 枠(Ampere A1 と E2.1.Micro)を活用して、自宅以外にもいくつか BOINC のクライアントを動かしています。

UGREEN NAS DXP2800とOracle Cloud Always FreeでImmichを快適に運用する
以前、Raspberry Pi 5 + 自宅NASでImmichを動かそうとして断念した話を書きました。その後、構成を見直して UGREEN NAS DXP2800 と Oracle Cloud Always Free の組み合わせに移行したところ、かなり快適になった話です✨前回の記事はこちらをご覧...

ホストが1台だけなら BOINC Manager で十分なのですが、台数が増えてくると話が変わってきます。各ホストに個別につなぎ直して進捗を確認するのは面倒ですし、「今月どのプロジェクトにどれだけクレジットが積み上がったか」のような時系列の推移は Manager では追いにくいんですね。

そこで、全ホストの状況を一箇所で時系列付きで眺められるようにしたかった、というのが今回の動機です。

BOINC(Berkeley Open Infrastructure for Network Computing)は、自分のマシンの空きリソースを科学計算プロジェクトに提供できる分散コンピューティング基盤です。Asteroids@home や Einstein@Home など、参加するプロジェクトごとに「クレジット」が貢献度として積み上がっていきます。

仕組み

構成はシンプルです。boinc-exporter は BOINC クライアントと1対1で対応していて、各ホストごとに1つずつ立てます。そして、それらをまとめて収集・可視化するスタック(VictoriaMetrics + Grafana)を1箇所に置く形です。

  • boinc-exporter … BOINC クライアントに GUI RPC(TCP/31416)で接続し、そのクライアントのメトリクスを公開。ホストごとに1つ
  • VictoriaMetrics … 各 Exporter の /metrics をスクレイプして収集・保存(Prometheus 互換)
  • Grafana … 可視化
flowchart LR subgraph HOST1["ホスト1"] C1["BOINCクライアント"] -->|"GUI RPC"| E1["boinc-exporter"] end subgraph HOST2["ホスト2"] C2["BOINCクライアント"] -->|"GUI RPC"| E2["boinc-exporter"] end E1 -->|"/metrics"| VM["VictoriaMetrics"] E2 -->|"/metrics"| VM VM -->|"クエリ"| GRA["Grafana"]

ホストを増やすときは、そのホストに Exporter を1つ追加して、VictoriaMetrics のスクレイプ対象に加えるだけです。台数が増えても、そのまま全台ぶんがダッシュボードに並びます。

公開しているメトリクス

主なものはこのあたりです。タスクの進捗率からプロジェクト別・ホスト別のクレジット、ジョブの成功・失敗数まで取れます。

メトリクス 種別 説明
boinc_up Gauge クライアントへの接続状態(1=接続中、0=切断)
boinc_tasks_total{state} Gauge 状態別のタスク数
boinc_task_fraction_done{name,project_url} Gauge 実行中タスクの進捗率(0〜1)
boinc_project_total_credit{project,url} Gauge プロジェクトの累積クレジット
boinc_project_avg_credit{project,url} Gauge プロジェクトの直近1日平均クレジット
boinc_host_total_credit{project,url} Gauge このホストが貢献した累積クレジット
boinc_host_avg_credit{project,url} Gauge このホストが貢献した直近1日平均クレジット
boinc_project_jobs_success_total{project,url} Gauge 成功ジョブ数
boinc_project_jobs_error_total{project,url} Gauge 失敗ジョブ数

ダッシュボード

付属の Grafana ダッシュボードがこちらです。

ホスト別の稼働状況(UP/DOWN)、実行中タスクの進捗一覧、プロジェクト別クレジットの推移などが一画面にまとまっています。実行中タスクのタイムライン(state timeline)で、どのホストがいつ何タスク回していたかも追えるので、眺めていて割と楽しいです。

使い方

同梱の docker-compose には exporter・VictoriaMetrics・Grafana がすべて入っていて、まずローカルで一通り動かして試せるようになっています。GUI RPC パスワードを渡して起動するだけです。

git clone https://github.com/surface0/boinc-exporter.git
cd boinc-exporter

# gui_rpc_auth.cfg の中身を指定
export BOINC_PASSWORD=your_password

docker compose up -d

Exporter は BOINC クライアントに接続するので、クライアント側では cc_config.xml でリモート接続を許可しておきます。

<cc_config>
  <options>
    <allow_remote_gui_rpc>1</allow_remote_gui_rpc>
  </options>
</cc_config>

起動したら Grafana にアクセスして、付属のダッシュボードで状況を確認できます。

同梱の docker-compose はあくまでローカルでお試しする用です。複数ホストを実際に運用する構成や、本格的なセットアップ手順についてはリポジトリの README を参照してください。

DockerHub にもイメージを上げてあるので、自前でビルドせずに使うこともできます。

docker pull seizu/boinc-exporter

Grafana Cloud の無料プランでも使える

Exporter が吐くのは Prometheus 互換のメトリクスなので、ローカルの VictoriaMetrics + Grafana の代わりに、Grafana Cloud の無料プランに流し込んで使うこともできます。

可視化部分を自前でセルフホストしなくて済むので、手っ取り早く始めたい場合や、外出先からも気軽に状況を確認したい場合はこちらが便利です。付属のダッシュボード JSON(grafana/dashboards/boinc.json)をそのままインポートすれば動きます。

まとめ

複数ホストの BOINC をまとめて可視化したくて作った Exporter の紹介でした。OCI の Always Free と組み合わせて何台か回している身としては、全台の状況が一画面で見られるようになって満足度が高いです。

詳しい設定はリポジトリの README を参照してください。

GitHub - surface0/boinc-exporter: A Prometheus / VictoriaMetrics exporter for BOINC that collects task status, credits, and project information via the BOINC GUI RPC interface.
A Prometheus / VictoriaMetrics exporter for BOINC that collects task status, credits, and project information via the BOINC GUI RPC interface. - surfa...

ご意見・ご質問はお気軽にどうぞ😊

コメント

タイトルとURLをコピーしました