Grafana + InfluxDBでリアルタイム可視化しよう！【とりあえずやってみる】

# シリーズ
あくまで予定ですが,こんな感じで書いていこうかなーと思ってます.

1. 【とりあえずやってみる】編 <- ｲﾏｺｺ
1. 【自分好みに作りたい】編 <- (2024/12/17公開予定)
1. 【リアルタイム可視化機能を作った背景】編 <- (未着手)
1. 【技術について理解する】編 <- (未着手)

本来は背景を先に書くべきですが,都合上HowToの部分を先に示します.

# 背景
[CanSat](https://ja.wikipedia.org/wiki/CanSat)チーム[FUSiON](https://x.com/cansat_fusion)Mission-5では,「宇宙でも使えるOBCを使ったCanSat」というコンセプトのもと,開発を行い2024種子島ロケットコンテストに参加し,**ベストプレゼンテーション賞**をいただくことができました.
FUSiON では(一部未完成のSubSystemを除いて)[GitHubにてソフトウェア等を公開しています](https://github.com/CanSat-FUSiON).

# 目的
今回解説するのは[Mission-5の地上局](https://github.com/CanSat-FUSiON/mission5-ground-station)の使い方です.
本記事では地上局のセットアップとしてとりあえずサンプルを動かすというところをやってもらおうと思います！
また、本記事は[ゆる募 Advent Calendar 2024/12/10](https://adventar.org/calendars/11153)として書いていたりしますー
※あくまで利用法の一つの記事であり,GrafanaやInfluxDBの公式記事ではありません.


# 対象者層
- リアルタイムでデータを可視化したい人
    - センサデータの時間履歴
    - ローバ等のGNCデータのリアルタイム表示
    - 常微分方程式を解くようなシミュレータの結果のリアルタイム表示

元はCanSatや宇宙機の地上局の簡易版として作ったものですが,結果的に様々な用途が考えられると思うのでとりあえず動かせる環境がPCにあるといろいろ便利な気はします！

可能な限り丁寧に説明しているつもりなのでぜひご覧ください.

# GrafanaとInfluxDBについて
これらは,可視化ツールと時系列データベースという関係になっています.
Appendeixにそれぞれの公式HPといい感じの記事とかを載せますが,**見るのは環境構築終わった後**でいいです.
最初は以下のイメージが理解できていればOk!
- Grafana：データベースから参照して時系列データを可視化するツール
- InfluxDB：可視化ツールの参照先となる時系列データベース

# 環境構築・サンプルの実行
さっそく内容に入っていきます！
ダミーデータを可視化してみましょー！
(今回はWindowsを前提としていますが,WSL2上での実行を確認しています.やろうと思えばAWS等にもデプロイできるかと思います。)

## 1.Dockerの導入
- 入っている方はいいですが,入っていない方はDockerをぶち込んでください.
    - [@zembutsu(Masahito Zembutsu)inさくらインターネット株式会社「Windows 11にDocker Desktopを入れる手順（令和5年最新版）」](https://qiita.com/zembutsu/items/a98f6f25ef47c04893b3)
    - [公式Document](https://docs.docker.jp/windows/toc.html)

## 2.ローカルに地上局リポジトリをclone
- 自分のPCの好きな場所に可視化のための環境を構築しましょう！
- git cloneできれば何でもいいですが,GitBashでのやり方を紹介します！
    - GitBash入っていない人はぶち込んでねー
        - [@suke_masa(Tada)「WindowsにGit Bashをインストールする」](https://qiita.com/suke_masa/items/404f06309bb32ca6c9c5)
    - GitBashを開いてお好きなディレクトリ(ファイル)に移動してください.
        - `cd [Any directory path]`
        - こんな感じでファイルをドラッグ&ドロップしてもok!
![スライド2](https://drive.google.com/uc?export=view&id=142MNAjJeAr4n_T-Y3aKIGRbwH38tTWdI)

- お好みのディレクトリに移動できたら
```GitBash:～/お好みのディレクトリ
git clone [お好みの方法で]
```

- HTTP
    - [https://github.com/CanSat-FUSiON/mission5-ground-station.git](https://github.com/CanSat-FUSiON/mission5-ground-station.git)
- SSH
    - [git@github.com:CanSat-FUSiON/mission5-ground-station.git](git@github.com:CanSat-FUSiON/mission5-ground-station.git)

- HTTP/SSH/CLIなどいろいろある
    - ひとまずはHTTPとかでいいのでは？
    ![スライド3](https://drive.google.com/uc?export=view&id=1Gr7krttyw7xJz4NB9jHog9szAum_IW2W)

## 3.システム起動
- DockerDesktopの立ち上げ
    - シンプルに動かし始めればok!
    ![スライド5](https://drive.google.com/uc?export=view&id=1cL3K1Xc33ahYWiIPw3rDisAcFg-V-JPc)

- ターミナル立ち上げ
    - こちらもシンプルに動かし始めればok!
    ![スライド6](https://drive.google.com/uc?export=view&id=1VkSBCiRima8H3GkqIHcTrcEuqYPUh3va)

- cloneしたリポジトリのパスを開いてください
    - `cd [path/mission5-ground-station]`という感じでうまいこと開いてください.
    - これまた`cd `と打ち込んでから`mission5-ground-station`フォルダをドラッグ&ドロップしても問題ない
    ![スライド7](https://drive.google.com/uc?export=view&id=1IFfVNbfcssYLdhy9mpd57wwvqTRATo4-)

- Docker立ち上げ
```terminal:～/mission5-ground-station
docker compose up -d
```
![スライド8](https://drive.google.com/uc?export=view&id=1q0e219JjHOQvYNXOKvGHureP8Muk_vi-)

 - このコマンドについて
    - 要するにDockerを動かしてInfluxDBやGrafanaを動くにするためのコマンドと思ってもらっていいはずです.(後で自分も理解する)
        - [@sho-hata(Shoki Hata)「雰囲気でコンテナを立ち上げないために。あらためて学ぶDocker Composeの基礎」](https://qiita.com/sho-hata/items/5805f68c6aaa954ec4bf)

これで立ち上げは完了です！動作確認していきましょー

## 4.システム動作確認
- とりあえずGrafanaにアクセスしてみましょう！
    - webブラウザの検索窓に[http://localhost:8085/dashboards](http://localhost:8085/dashboards)と入れてみてください
    ![スライド9](https://drive.google.com/uc?export=view&id=1Q3xRYVOgBkCgN7v9qTYVA1hPldKKvNCh)

        - 上の感じでGrafanaにログインを求められますので,以下のように入力してください
            - UserName:admin
            - Password:admin
        - これらの変更を推奨されますがひとまず**skip**で問題ないです
    - InfluxDBにデータが入っていないので**NoData**になっているかと思います.
    ![スライド10](https://drive.google.com/uc?export=view&id=1PSYj8JiWFZEklWkDHEeXorSrrPA3x-N3)
- InfluxDBにデータを投入
    - `/mission5-ground-station`のフォルダをワークスペースとしてVSCodeを開きます！
        - VSCodeが入っていない人は,[こんな感じ](https://learn.microsoft.com/ja-jp/training/modules/python-install-vscode/)でVScodeを入れてください
        - Python環境がVSCodeにない人も,上のリンクを参考に導入してください
        - エクスプローラーからドラッグ&ドロップで開けます.
        ![スライド11](https://drive.google.com/uc?export=view&id=1_B6xmSOeEqjw6CGP1mvmV-plP4GCY5fW)
    - `client/debug_rand_dummy_client.py`を開いてください.
    ![スライド12](https://drive.google.com/uc?export=view&id=1fNdQN6bEF2mvWZBbiMlByDtmmcjJCd7D)
    - 続いて,Pythonのパッケージをインストールします 
    - VS Codeの右上らへんにあるやつをクリックしてVSCodeのターミナルを開きましょう.
    ![スライド13](https://drive.google.com/uc?export=view&id=1Yc0JKvQP9X_0a6Ja9BAyXR0Jzd9T6MhH)
    - requirements.txtに必要なpipを入れておいたのでこんな感じでパッケージをインストールできます！
        ```
        pip install -r requirements.txt
        ```
    - サーバーにダミーデータを送りつけます.
        - `client/debug_rand_dummy_client.py`を実行してください
    - [http://localhost:8085/dashboards](http://localhost:8085/dashboards)のwindowを確認
        - `client/debug_rand_dummy_client.py`が吐き出すデータを可視化しています！

![動画](https://drive.google.com/uc?export=view&id=1ud4kk-sb2rYAekw7J_Cjiwoekocd4igI)

https://drive.google.com/file/d/1ud4kk-sb2rYAekw7J_Cjiwoekocd4igI/view?usp=drive_link
(動画埋め込みの具合が悪いのでとりあえずURLを貼っておきます.)
![スクリーンショット 2024-12-10 213925.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3635973/a6631741-b8d3-3bc3-796b-433522ffede8.png)
こんな感じで可視化されるはずです！

以上で動作確認が完了しました。

次回は【自分好みに作りたい】編 です.InfluxDBに入るデータ構造の作り方や,好みのダッシュボードの作り方について解説していきます！

# さいごに
不明点等あったらGitHub[https://github.com/CanSat-FUSiON/mission5-ground-station](https://github.com/CanSat-FUSiON/mission5-ground-station)の方でissue立ててもらってもいいですし、ここに質問してくれてもいいです。
　
# 謝辞
Mission-5で「Grafana + InfluxDB」という構成で地上局を動かすことができたのは,以下のメンバーのおかげです.
https://github.com/MayaAbe
https://github.com/Ka-Sou
https://github.com/771-8bit 
詳細な経緯等についてはシリーズ3番目の【リアルタイム可視化機能を作った背景】編にて書かせていただきます.

# Appendix
## Grafanaとは？
- とりあえず公式のURLを貼付しておきます
    - https://grafana.com/ja/
- いい感じの記事とか
    - [@ChanmoroinLAPRAS株式会社「10分で理解するGrafana」](https://qiita.com/Chanmoro/items/a23f0408f0e64658a775)
    - [Fujitsu「Grafanaで出来ること、クラウドでの監視運用の活用方法とは？」](https://www.fujitsu.com/jp/products/software/resources/feature-stories/cloud-operation/grafana-overview/)

## InfluxDBとは？
- とりあえず公式のURLを貼付しておきます
    - https://www.influxdata.com/
- いい感じの記事とか
    - [@nmrmsys「InfluxDBについて最初に知るべき10のこと」](https://qiita.com/nmrmsys/items/cdeb4afa76c591acfd3f)
    - [@chroju「InfluxDB + Grafanaに入門する」](https://qiita.com/chroju/items/355f3c6da9f8c4867ba5)