自宅の Jetson で動いている WebRTC Native Client Momo を外出先でいい感じに監視する方法
やりたいこと
- 自宅の Jetson Xavier NX 上で動かしている WebRTC Native Client Momo を外出先からでも監視したい
- 自宅のネットワークを外部に開放したくない
- Momo を動かしているマシンの CPU/Memory/Disk/Network と chrome://webrtc-internals で見ることができる WebRTC Stats を監視したい
- 監視サーバーやダッシュボードツールは既に知見がある Prometheus と Grafana (の Managed 版である Grafana Cloud) を使いたい
やったこと
Momo を改造して、RTCConnection.GetStats() の結果を HTTP API 経由でとれるようにした
Momo Release 2020.9 の時点では、RTCConnection.GetStats()
は Sora につないだ時の ping メッセージの応答でしか取得できないので、これを test, ayame, sora 全てで取得できるように Momo を改造して、Metrics APIを実装した。
Momo Release 2020.11 以降の公式バイナリは Metrics API が実装済み。
ポート番号は --metrics-port
オプションで指定可能。
例えば、次のオプション付きで起動した場合、http://localhost:8081/metrics
が Metrics API のエンドポイントになる。
$ momo --metrics-port 8081 test
この API は Prometheus 形式ではなく、JSON を返すので、Prometheus 以外のモニタリングツールや自作プログラムなどとも連携できる。
Momo Metrics API API を叩く Prometheus Exporter を作った
Momo の Metrics API のレスポンスは JSON で Prometheus から直接 Scraping できないので、Momo Exporter を Go で書いた。これは少し前までの HAProxy Exporter と同じコンセプトでの実装である。
なぜこうした方かというと、主には以下の2点。
- Momo は C++ で書かれているので、Prometheusクライアント組み込みとかをすると、ビルドの難易度が上がってしまう
- WebRTC Stats はまだドラフトの状態で、そこそこ変更が入るので、そのたびに Momo の改造をしていくのは面倒である
現時点では、一部の stats しか実装していない上に、label の実装がいまいちな点があるが、、今後使っていきながら改善していきたい。Prometheus の Go Client は良くできているので、実装も楽だった。
Prometheus - New Relic - Grafana Cloud 連携
自宅ネットワークを開放したくないので、なんらかの形で Prometheus のデータを外部に Push しないといけない。はじめは Push Gateway を利用する方法も考えていたのだが、タイミングよく New Relic の Telemetry Data Platform が Prometheus の Remote Storage に対応していたので、New Relic にデータを保存することにした。
また、New Relic は PromQL によるクエリをサポートしているので、Grafana Cloud の Prometheus 連携機能を利用して、ダッシュボードを作成した。
この辺のやり方は New Relic の公式ブログに書いてある方法をそのまま使った。
Create Grafana Dashboards with Prometheus Data Stored in New Relic
Jetson Xavier NX のセットアップが簡単にできるように Ansible の Playbook を書いた
毎回、手作業で設定するのは面倒だったので、上記の設定を Ansible できるようにした。 Momo はサービスとしては起動させていないが、/opt
配下にダウンロードされるようにしている。
結果
やってみた感想
Node Exporter と Momo Exporter の Metrics を1つのダッシュボードにできた。今まで、jtop と chrome://webrtc-internals で別々に見ていたので、綺麗にまとまってうれしい。内部ネットワークを解放せずに、自宅内のマシンを外出先からでも確認できて、安全だし、便利。
Discussion