0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LinuxAdvent Calendar 2024

Day 11

Dockerを使ったGrafana+Infinityのセットアップ手順

Last updated at Posted at 2024-12-10

◇はじめに

本記事は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
  • ホスト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を30minutes15minutesくらいにしておくと、グラフ全体が表示できます。

ここまでで、サンプルデータを使ってGrafanaでデータを可視化することができました。

◇おわりに

まずは環境構築として、自宅PC上にGrafanaとInfinityプラグインを導入できました。
次のステップとして、実際のデータを使用してデータの可視化を試してみたいと思います。
アドベントカレンダー期間中にどこまでできるか・・・

🔚END

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?