複数台のマシンで BOINC を回しているのですが、「いま各ホストがどのタスクをどこまで進めているのか」をまとめて確認する手段がなくて地味に不便だったので、Prometheus 互換の Exporter を作りました。
各ホストの BOINC クライアントに GUI RPC で接続してメトリクスを集め、Grafana で一枚のダッシュボードに集約できます。眺めているだけで自己満足できる、いい感じのやつができました✨
リポジトリはこちらです。

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

ホストが1台だけなら BOINC Manager で十分なのですが、台数が増えてくると話が変わってきます。各ホストに個別につなぎ直して進捗を確認するのは面倒ですし、「今月どのプロジェクトにどれだけクレジットが積み上がったか」のような時系列の推移は Manager では追いにくいんですね。
そこで、全ホストの状況を一箇所で時系列付きで眺められるようにしたかった、というのが今回の動機です。
仕組み
構成はシンプルです。boinc-exporter は BOINC クライアントと1対1で対応していて、各ホストごとに1つずつ立てます。そして、それらをまとめて収集・可視化するスタック(VictoriaMetrics + Grafana)を1箇所に置く形です。
- boinc-exporter … BOINC クライアントに GUI RPC(TCP/31416)で接続し、そのクライアントのメトリクスを公開。ホストごとに1つ
- VictoriaMetrics … 各 Exporter の
/metricsをスクレイプして収集・保存(Prometheus 互換) - 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 にアクセスして、付属のダッシュボードで状況を確認できます。
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 を参照してください。

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



コメント