InfluxDB: データをGrafanaで可視化してみる

###### 実施環境：

```Linux:Linux
[root@testhost ~]# uname -a
Linux testhost 4.18.0-448.el8.x86_64 #1 SMP Wed Jan 18 15:02:46 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
[root@testhost ~]# cat /etc/redhat-release
CentOS Stream release 8
[root@testhost ~]# yum list installed | grep influxdb
influxdb2.x86_64                                   2.7.3-1                                                    @@commandline
[root@testhost ~]# yum list installed | grep grafana
grafana-enterprise.x86_64                          10.0.3-1                                                   @@commandline
```

### 0. 概要

データベースのソフトウェアは、データの格納方法によって大きく RDB ( Relational Database )と NoSQL に分けられます。
 RDB は複数の表を組み合わせる形でデータを格納するデータベースであり、 NoSQL は RDB 以外のデータベース全般を指す言葉です。
 NoSQL の中には様々な特徴を持つデータベースがありますが、その中でも時系列データに特化したデータベースが InfluxDB です。

[InfluxDB](https://www.influxdata.com/products/influxdb-overview/)

ここで、時系列データを利用する際、どのような形でデータを利用するかを考えてみます。
多くの場合、単に数値の羅列としてではなく、グラフや表などの形で可視化してから利用することになるかと思います。
 InfluxDB も一応簡単な可視化機能は持っていますが、それでは足りないという場合も多いでしょう。

そこで登場するのが Grafana です。
 Grafana はデータの可視化に特化したソフトウェアであり、 InfluxDB にも対応しています。

[Grafana](https://grafana.com/grafana/)

今回は、 InfluxDB と Grafana を連携させ、 InfluxDB に格納されているデータを Grafana のダッシュボードにグラフとして表示させることを目指します。

### 1. インストール

 InfluxDB と Grafana のインストールについては、以前投稿した以下の記事を参照してください。
今回可視化するデータも、以下の記事で InfluxDB に格納したデータを使用します。
また、 InfluxDB の構築時に表示される API トークンも使用するので、きちんと控えておいてください。

[Linux: 時系列データに特化したDB、「InfluxDB」を無料インストールしてみた](https://qiita.com/frozencatpisces/items/20e3c11f22c85a6bae1e)

[Linux: データ可視化ソフト「Grafana」を無料インストールしてみた＋「Prometheus」と連携させてみた](https://qiita.com/frozencatpisces/items/f6e331c1c1c14be7275d)

以降の手順については、 InfluxDB と Grafana が同一サーバ上にインストールされており、起動状態であるとの前提で進みます。

### 2. 連携

連携作業は Grafana の Web 画面で進めます。
まずはメニュー画面から、「 Connections 」⇒「 Data sources 」を選択します。

![WS000401.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/ab257d87-99b8-e777-0155-229fcfcae72e.jpeg "menu")

データソース画面に移動するので、「 Add new data source 」を選択します。

![WS000674.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/b6f2fc49-5b45-83ed-9d52-4e216483c15e.jpeg "data_source")

「 InfluxDB 」を検索し、選択します。

![WS000675.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/d7cc7cb8-75d3-e3df-2347-c0a85563bee8.jpeg "add_data_source")

ここからは、 InfluxDB との連携設定を入力していきます。
まず、データソース名「 Name 」はデフォルトの「 InfluxDB 」のままにします。
右の「 Default 」は ON でも OFF でもよいです。
クエリ言語「 Query Language 」ですが、今回使用している InfluxDB のバージョンは 2.7.3 なので、「 Flux 」を選択します。

![WS000690.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/f211b613-4591-9e2a-7bc6-5d275efda378.jpeg "setting_1")

:::note info
「 Flux 」は InfluxDB のバージョン 2.x で「 InfluxQL 」の代わりに採用されているクエリ言語です。
今回使用する Grafana のバージョン 10.0.3 時点では、ベータ版として利用可能です。
:::

接続する InfluxDB は同じサーバ上にあるので、「 HTTP 」の「 URL 」は `http://localhost:8086` を指定します。
「 Allowed cookies 」と「 Timeout 」は空欄のままで構いません。
「 Auth 」もすべてチェックを外した状態で大丈夫です。
「 Custom HTTP Headers 」も不要です。

![WS000691.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/ed52d8a0-e726-324a-c981-aa160cc420a8.jpeg "setting_2")

詳細設定「 InfluxDB Details 」については、「 Organization 」に InfluxDB 構築時に指定した組織名(今回は `test_organization` )、「 Token 」には InfluxDB 構築時に表示された API トークンを指定します。
「 Default Bucket 」、「 Min tim interval 」、「 Max series 」は空欄のままで問題ありません。

![WS000692.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/3d589632-085e-e7d8-59f8-a15edbbeee65.jpeg "setting_3")

以上を設定し終わったら、一番下にある「 Save & test 」を押します。

![WS000680.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/115d0cc9-f2b7-34f1-0760-4c7691e9d776.jpeg "setting_4")

「 datasource is working. 」と表示されたら成功です。

![WS000693.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/c3c1c148-5572-0c79-1895-09b75b52fe7f.jpeg "setting_5")

### 3. 可視化

メニューから「 Dashboards 」を選択します。

![WS000410.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/91ac940f-ef79-bb46-78d3-0e302f62e060.jpeg "dashboards")

ダッシュボード画面に移動するので、「 New 」⇒「 New Dashboard 」を選択します。

![WS000412.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/2ee320f5-223a-c08b-6507-fe2433af88cc.jpeg "new_dashboards")

グラフを追加するため、「 Add visualization 」を押します。

![WS000413.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/9f7e83b6-3763-69a3-8425-9ff8a3fa65ff.jpeg "add_visualization")

グラフに使用するデータソースの選択画面が出るので、「 InfluxDB 」を選択します。

![WS000695.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/1560576e-6ca3-461b-5d8d-06e01ce91ee1.jpeg "data_source")

これでダッシュボードの作成画面に移動できます。
さて、この後 InfluxDB に格納されているデータを Grafana で可視化することになるのですが、この際データの抽出や加工はドロップダウンなどの GUI ではなくクエリ文で行う必要があります。

![WS000696.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/d5ebed76-cbe3-b9b4-700d-39c416b43796.jpeg "dashboard_1")

もちろんクエリ文を書けるならそれでよいのですが、今回は InfluxDB の Web 画面からクエリ文をコピーすることにします。

以下の過去記事の通りに、 InfluxDB の Web 画面でデータを表示します。

[Linux: 時系列データに特化したDB、「InfluxDB」を無料インストールしてみた](https://qiita.com/frozencatpisces/items/20e3c11f22c85a6bae1e)

ここで「 SCRIPT EDITOR 」を押します。

![WS000697.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/d64fb3c7-c099-f09e-b862-567c38ec5cfe.jpeg "influxdb_1")

すると、画面左下にクエリ文が表示されます。

![WS000698.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/edb59b42-f1f2-5c4c-76ec-20d32e554174.jpeg "influxdb_2")

```Flux:クエリ文
from(bucket: "test_bucket")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "home")
  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
  |> yield(name: "mean")
```

これをコピーし、 Grafana の Web 画面に戻ってそのまま貼り付けます。

![WS000699.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/8881a0d7-52cf-54fa-e265-1c5dcd85651a.jpeg "dashboard_2")

検索期間は Grafana の Web 画面で指定したものとなるので、 InfluxDB の Web 画面の指定と同じく「 From 」に `2022-01-01 08:00:00` 、「 To 」に `2022-01-01 20:00:01` を指定して「 Apply time range 」を押します。

  ![WS000701.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/00fa1730-002e-9410-7209-d5c640737182.jpeg "dashboard_3")

これで、 InfluxDB に格納されているデータが表示されました。
 InfluxDB の Web 画面と比較すると、ほぼ同じようなグラフになっていることがわかると思います。

![WS000702.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/8da1f535-478a-0a5f-1692-afc445e682b6.jpeg "dashboard_4")