◇はじめに
本記事はLinux Advent Calendar 2024 11日目の記事になります。
今回は、ローカルPC(ミニPC)上にGrafanaとInfinityプラグインを構築する手順を備忘録としてまとめました。
◇背景
先日開催された、GrafanaMeetupJapan #3をオンライン視聴させていただきました。
このイベントの中でGrafanaプラグイン探訪という内容でLTをしていました。
資料も公開してくれています。
このLT内でGrafanaのプラグインの1つであるInfinityプラグインについて紹介されていました。
このプラグインを使うことで、Grafanaにデータソースとして用意されていないデータでも連携(取得)が可能と思い、今回試してみました。
◇開発環境等
今回はProxmox上にUbuntuのVMをインストールし、そのUbuntu上でDockerを動かしています。
- 使用デバイス
- Intel NUC
- CPU:Intel Core i7-5557U
- RAM:16G
- Intel NUC
- ホストOS
- Proxmox VE 8.1
- VM
- Ubuntu Server 24.04.1 LTS
- Docker version 27.2.0
- Docker Compose version v2.20.3
- Grafana:grafana-oss:11.3.1
◇導入手順
今回は、Proxmox上へのUbuntuのインストール手順は割愛します。
なお、以前にProxmox VE環境へUbuntu Server 22.04をインストールする手順を記事にしています。
今回、自分が試した限りでは、Ubuntu 24.04でもインストール手順はそこまで差がなかったため、必要に応じてご参照ください。
UbuntuへのDockerのインストール
今回はUbuntuインストール時に追加パッケージのインストール選択画面上からDockerを選択してインストールしました。
画面キャプチャを取り忘れたため、Ubuntu 22.04インストール時の画像を載せておきます。
多少パッケージのリストは異なるかもしれませんが、docker
のパッケージはこちらにも載っています。
docker
のチェックボックスをONにすることで、Ubuntuインストール時にDockerも自動でインストールされます。
なお、よくあるやり方として、下のサイトにあるような、aptコマンドを使ったパッケージのインストール方法でも問題ありません。(むしろこっちのほうが一般的と思われる)
compose.yamlの作成
次にコンテナを起動するための準備をします。
今回は、Docker Composeを使います。
Ubuntu内で分かりやすい場所にディレクトリを作成し、その中にcompose.yaml
のファイルを作成します。
ファイルの中身は下のようになっています。
今回は、Infinityプラグインをコンテナ作成時に一緒にインストールしています。
※公式ドキュメントにも記載がありますが、Grafanaインストール後にGUIからInfinityプラグインをインストールする方法でもOKです
services:
grafana:
image: grafana/grafana-oss:11.3.1
container_name: grafana-11
restart: unless-stopped # 自動再起動ポリシー
environment:
- GF_INSTALL_PLUGINS=yesoreyeram-infinity-datasource # Infinityプラグインをインストール
ports:
- "3000:3000" # ホスト:コンテナ
volumes:
- grafana_storage:/var/lib/grafana # 永続化データの保存
volumes:
grafana_storage: {}
上記コードは以下のサイトを参考にし、カット&トライで試してとりあえず動いたものになります。
コンテナの起動&Grafanaへのログイン
以下コマンドでコンテナを起動します。
ちなみに、自分の環境ではVisual Studio CodeにDockerの拡張機能を入れて使用しています。
docker compose up -d
しばらくしてコンテナが起動したら、ブラウザでGrafanaのサーバにアクセスします。
今回はポート番号を3000に設定しているため、
http://{{host_ip}}:3000/
にアクセスします。
※{{host_ip}}
は各自のホスト(今回の場合はUbuntuのVM)のIPアドレスを入力
URLにアクセスすると、Grafanaのログイン画面が表示されます。
(セキュリティ保護がされていない旨の警告が出る場合があります)
初期状態では、Username、Passwordともにadmin
でログインできます。
ログインすると、パスワード変更の画面に遷移するので、適切なパスワードを設定します。
Infinityプラグインのインストール確認
Grafanaにログイン出来たら、Infinityプラグインがインストールされているかを確認します。
トップ画面の左側メニューからConnections
を選択し、検索窓からInfinity
で検索します。
Infinityプラグインが表示されたら選択します。
Infinityプラグインの画面を開いて、右上にUninstall
ボタンが表示されていれば、Infinityプラグインが既にインストールされているため、そのままボタンは押さずにトップ画面に戻ります。
ダッシュボードの作成
最後に、Infinityプラグインを使って実際にダッシュボードを作ってみます。
まず、左側メニューからData sources
を選択し、Infinityプラグインの右側にあるBuild a dashboard
を選択します。
空のダッシュボード画面が表示されるので、Add visualization
を選択します。
使用するデータソースの選択画面が表示されるので、Infinitiyを選びます。
ここまでの手順どおりであれば、それ以外のデータソースは選択肢に出てこないはずです。
パネル作成画面が表示されますので、項目を入力していきます。
入力する項目は主に赤枠の中になりますが、とりあえず動作確認のため、参考データが取得できるサイトを探してみます。
ここで改めて公式ドキュメントを確認したところ、確認用のデータ取得用エンドポイントが用意されているため、これを使ってパネルを作成してみます。
なお、今回はJSONデータのみ試しています。
JSON Data without time field
最初に試したエンドポイントはこちらです。
URL:https://gist.githubusercontent.com/yesoreyeram/2433ce69862f452b9d0460c947ee191f/raw/f8200a62b68a096792578efd5e3c72fdc5d99d98/population.json
このエンドポイントで取得できるデータは、タイムスタンプが入っていないJSON形式のデータになります。
[
{ "country": "india", "population": 300 },
{ "country": "usa", "population": 200 },
{ "country": "uk", "population": 150 },
{ "country": "china", "population": 400 }
]
公式ドキュメントの入力項目を確認しながらパネルの項目に入力していきます。
まず最初に画面右上のメニューから表示するビジュアルをGauge
に変更します。
次に、公式サイトを参考にしながら、
- Type:
JSON
- Source:
URL
- Format:
Time Series
- Method:
GET
- URL:
https://gist.githubusercontent.com/yesoreyeram/2433ce69862f452b9d0460c947ee191f/raw/f8200a62b68a096792578efd5e3c72fdc5d99d98/population.json
と入力します。
FormatがTime Seriesになるので、注意してください。
次に、画面を下にスクロールし、Add Column
を選択します。
すると、Columnの追加画面が表示されるので、下の画像の通り入力します。
ここまで、入力出来たら画面上部のRefresh
を選択して、各国のデータがゲージ形式で表示されれば成功です。
ちなみに、ビジュアルをStat
に変更するとこんな感じになります。
Accessing nested properties of JSON data
最後にもう一つ、こちらのエンドポイントも試してみました。
URL:https://thingspeak.com/channels/38629/feed.json
このエンドポイントでは、時系列データも入っています。
実際に取得できるデータはかなり多いので、一部抜粋したものを載せます。
{
"channel": {
"id": 38629,
"name": "Traffic Monitor",
"description": "Traffic Monitor showing density of cars detected",
"latitude": "42.28",
"longitude": "-71.35",
"field1": "Density of Westbound Cars",
"field2": "Density of Eastbound Cars",
"created_at": "2015-05-19T20:14:03Z",
"updated_at": "2019-07-24T20:12:00Z",
"last_entry_id": 18055445
},
"feeds": [
{
"created_at": "2024-12-10T14:40:08Z",
"entry_id": 18055346,
"field1": "21.000000",
"field2": "34.000000"
},
{
"created_at": "2024-12-10T14:40:24Z",
"entry_id": 18055347,
"field1": "23.000000",
"field2": "22.000000"
},
・
・
・
{
"created_at": "2024-12-10T15:05:44Z",
"entry_id": 18055445,
"field1": "9.000000",
"field2": "17.000000"
}
]
}
ビジュアルの追加を選択して、先ほどと同じ流れで項目を入力していきます。
今回はビジュアルをTime series
に設定します。
各項目は、
- Type:
JSON
- Source:
URL
- Format:
Table
- Method:
GET
- URL:
https://thingspeak.com/channels/38629/feed.json
と入力します。
今回はFormatがTableになります。
(Formatの選び方がまだよくわかっていない・・・)
次に、Rows/Root
の項目にfeeds
と入力し、Columnも下の画像のように入力します。
ここで入力したfeeds
についてですが、元のJSONデータでは、feeds
キーのvalueとして時系列データが入っているため、その時系列データのみを取得するための設定と思われます。
実際のところ、feeds
を入力しなくてもグラフは問題なく表示できました。
時系列データの部分のみをGrafana側がうまく抜き出してくれていると思われますが、詳細は現状不明です。
最後に先ほど同様、画面上部のRefresh
を選択して、各国のデータがゲージ形式で表示されれば成功です。
その際、Time Rangeを30minutes
か15minutes
くらいにしておくと、グラフ全体が表示できます。
ここまでで、サンプルデータを使ってGrafanaでデータを可視化することができました。
◇おわりに
まずは環境構築として、自宅PC上にGrafanaとInfinityプラグインを導入できました。
次のステップとして、実際のデータを使用してデータの可視化を試してみたいと思います。
アドベントカレンダー期間中にどこまでできるか・・・