Starlink(スターリンク)のAPI + Prometheus + Grafanaで可視化しよう

2023年10月25日 水曜日


【この記事を書いた人】
谷口 崇

結構長くゲーム業界に出向していましたが、2022年秋に戻ってきました。ゲーム業界での経験も生かしながらIIJのエンジニアとしてちょっと面白いことを提供できていければいいなぁと思っています。格闘ゲームの世界チャンピオン(Evo2017)になった従兄弟がいますが彼にゲームを教えたのは僕ではありません。マスターリーグ大変そう、あと取締役就任おめでとう!

「Starlink(スターリンク)のAPI + Prometheus + Grafanaで可視化しよう」のイメージ

Starlinkを個人で利用している範囲ではあまり問題になりませんが、複数の人で使うようになると状態のチェックや記録をつけたくなります。「現在の」状態やネットワーク統計は公式アプリで取得できますが、確認できるのは過去15分、停止情報は過去12時間までしか蓄積がありません。アンテナを再起動すると過去情報は消えてしまいます。

Starlinkの状態や統計情報はアンテナのAPIにアクセスする事で取得できます、これは一般に仕様が公開されているものではありませんが、独自に解析して作成されたツールがいくつも公開されています。そこでどの様な情報が取得できているのか調べ、可視化できるか確認してみたいと思います。

これまで過去投稿の一覧を書いていましたが、記事が増えてきたので、タグでまとめた先のリンクにします。IIJのスターリンク関係の記事が集まっていますので活用してください。
動画も公開していますので、よろしければそちらもあわせてご覧ください。

StarlinkのAPIについて

ブラウザで http://192.168.100.1/ にアクセスするとアンテナの管理画面にアクセスする事ができることは以前のブログで紹介しました。

Starlink(スターリンク)がやってきたのでネットワークを調べました

実は同じIPアドレスでgRPCを使ったAPIサービスが動いており、ローカルネットワークに繋いだStarlinkの公式アプリは各種指示や情報の取得・設定変更に使っているようです。

そしてアンテナはLAN側からのAPIアクセスに無防備なので、企業などで本格的につかう場合には別途フィルタリングしていく等の対策は必要になると思います。

starlink-grpc-tools

StarlinkのAPI関連ツールを調べてみるといくつか公開されていました。今回は比較的最近も更新されている記録がある、

https://github.com/sparky8512/starlink-grpc-tools

を使ってみる事にしました。これはPythonを使ったスクリプト集でStarlinkアプリのデバック情報と同等の内容を取得する他に、再起動などの操作ができるようになっています。

このツールは共通部分と用途別の専用スクリプトが用意されていて、その中にはPrometheus 用のテレメトリ情報を提供するものがあります。これを用いてPrometheus + Grafana を用いた可視化までやってみたいとおもいます。

インストール

インストールはUbuntu22.04の環境で行いました。githubからコードを取得後、starlink-grpc-toolsのディレクトリ配下で

pip install --upgrade -r requirements.txt

を実行すると環境が構築されます。

使用例

次はいくつかコマンドを実行してみましょう。

python3 dish_grpc_text.py -v status

APIで取得できる情報について

dish_grpc_text.pyのstatusコマンドを使うとこのように現在のアンテナのステータスが出力されます。-v オプションをつけているので人が見やすいように整形されますが、オプションなしだとcsvフォーマットで出力されます。

この他にも obstruction_detail  や alert_detail といったものもあります。前者はアンテナの障害物検出、アンテナに発生している警告のレポートといった機能があります。この例では障害部はなく、「警告なし」なのでFalseと出力されています。

項目の意味の詳細は starlink_grpc.py ファイルの中にコメントされていますので興味がある方は参考にされるといいと思います。

Prometheus に取り込み Grafana で可視化

テレメトリー情報の可視化ツールの定番ともいえる、Prometheus と Grafana を組み合わせをやってみたいと思います。使うツールは dish_grpc_prometheus.py です。このスクリプトを起動するとPrometeusで扱えるデータを出力するサーバになります。

PrometheusやGrafanaは以下のサイトの情報を参考にインストールしました。

Prometheus : インストール
Grafana : インストール

Prometheusは以下の設定を追加してStarlinkの状態を取り込めるようにしておきます。

/etc/prometheus/prometheus.yml

以下を追加
  - job_name: starlink
    static_configs:
      - targets: ['localhost:8080']

dish_grpc_prometheus.py を起動するとport:8080でPrometheus用のサービスが立ち上がります。Prometheusの設定をしているので自動的にデータが取り込まれていくのが確認できます。

この例ではシェルから起動していますが、実際の利用ではsystemdで管理できるように追加の作業が必要になります。

python3 dish_grpc_prometheus.py status

取り込んだデータは、Prometheusの管理インタフェースで確認できます。

最後にGrafanaに登録します。Prometheus + Grafana に取り込めればあとは自分の馴染みのツールで管理していくことができるようになるかと思います。

Starlinkの公式サイトがリニューアル

このブログを書いている途中で公式サイトがリニューアルされました。大きく変わった所として、個人とビジネスという形でサイトが大きく2系統に分かれました。それぞれで提供されるサービスの内容はあまり変わっていませんが、ビジネス向けにDIRECT TO CELL(携帯からの直接通信)が追加されたのが興味深いです。実際の登場までにはまだ1年以上ありそうですが、世界レベルでみてもこの技術への期待は大きいのだと思います。

リニューアルにともなって、サービスプランのページが新たに追加されました。全体を俯瞰的に見ることができるページですが、初見では理解が進まないかもしれません(笑)。

アンテナ関係のトピックとしては「高性能」と呼ばれるアンテナの提供が終了しています。「高性能」は「フラット高性能」が代わりに提供されます。なおネットでは「新型の高性能アンテナ」と「ミニアンテナ」が認証を通過したという情報が流れています。新型高性能アンテナは標準アンテナより若干大きいサイズになり、ミニアンテナは標準アンテナの半分ぐらいのサイズになります。アンテナの写真などの情報はまだ流れてきていませんが、ミニのサイズ感や価格に期待したいところですね。ただ日本で使えるようになるには、さらに認証が必要ですから先ですねぇ。

 

谷口 崇

2023年10月25日 水曜日

結構長くゲーム業界に出向していましたが、2022年秋に戻ってきました。ゲーム業界での経験も生かしながらIIJのエンジニアとしてちょっと面白いことを提供できていければいいなぁと思っています。格闘ゲームの世界チャンピオン(Evo2017)になった従兄弟がいますが彼にゲームを教えたのは僕ではありません。マスターリーグ大変そう、あと取締役就任おめでとう!

Related
関連記事