Linux: 時系列データに特化したDB、「InfluxDB」を無料インストールしてみた

###### 実施環境：

```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
```

### 0. 概要

データベースの種類について考えるとき、最も一般的なものは RDB ( Relational Database )というデータベースです。
これはデータベースとしてよくイメージするような、「複数の表を組み合わせてデータを保管するデータベース」のことです。

![WS000641.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/e0c96bb4-0c09-1b90-881e-6e1a7536e0d0.jpeg "RDB")

この RDB はデータの形がきっかりしているため処理がしやすく、単純な追加削除から複雑な集計までこなすことが可能です。
また、データに矛盾が生じることも防げます。
そのようなメリットがあるため、データベースとしては長らくこの RDB が主に使用されてきました。

ところが、この RDB はきれいに整理できるデータに対しては強いのですが、多様なデータや大量のデータには対応しにくいという問題があります。
さらに、データの整合性を重視する作り上、複数サーバに分散しての実行にも向いていません。
これらは、最近話題のビッグデータ分析や、クラウド環境・コンテナ環境などの分散を想定した環境を考えた場合、あまり喜ばしいことではありません。

![WS000672.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/111607bb-a1ec-6ef8-5f4c-dbb0bab1d7ac.jpeg "bigdata")

そこで注目されるようになってきたのが RDB 以外のデータベースであり、これを NoSQL といいます。
 NoSQL には様々な種類がありますが、例えばキーバリュー型であれば「キー」と「値(バリュー)」の組み合わせでデータを表現します。
キーバリュー型は正確な検索集計には向かない一方で、構成がシンプルゆえ柔軟性が強くアクセスも高速なため、ビッグデータ分析などでしばしば使用されます。

![WS000671.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/9a9f387f-d94f-255b-30ca-a1a2c9311590.jpeg "KeyValue")

このように、格納するデータの特性によって、どのようにデータベースを使い分けていくのか、それが今後ますます大事になっていくことでしょう。
今回はそのような NoSQL の中でも、時刻で並んだデータ、すなわち時系列データに特化したデータベースである InfluxDB を Linux 環境にインストールしてみます。

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

### 1. インストール

まずは、 InfluxDB のパッケージを GitHub からダウンロードします。
今回使用する環境は 64bit 環境なので、「 x86_64 」を使用します。

[GitHub](https://github.com/influxdata/influxdb/releases)

![WS000643.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/c0b3e66b-3844-c56a-0e81-9d1367828163.jpeg "GitHub")

ダウンロードしたパッケージを Linux 上に配置し、 yum コマンドでインストールします。

```Linux:Linux
[root@testhost tmp]# ls -l influxdb*
-rw-rw-r--. 1 testuser testuser 45627823 10月 23 10:37 influxdb2-2.7.3-1.x86_64.rpm
[root@testhost tmp]# yum -y install influxdb2-2.7.3-1.x86_64.rpm
メタデータの期限切れの最終確認: 0:22:21 時間前の 2023年10月23日 10時18分30秒 に 実施しました。
依存関係が解決しました。
(省略)
インストール済み:
  influxdb2-2.7.3-1.x86_64

完了しました!
[root@testhost tmp]# yum list installed | grep influxdb
influxdb2.x86_64                                   2.7.3-1                                                    @@commandline
```

### 2. 起動

インストールした InfluxDB は、 systemctl で起動できます。

```Linux:Linux
[root@testhost tmp]# systemctl list-unit-files -t service | grep influxdb
influxdb.service                           enabled
[root@testhost tmp]# systemctl start influxdb.service
[root@testhost tmp]# systemctl is-active influxdb.service
active
```

### 3. ファイアウォールの穴あけ

前段で InfluxDB 自体は起動できましたが、これだとまだ接続するには十分ではありません。
ファイアウォールが起動している場合は、必要なポート番号に穴をあける必要があります。

```Linux:Linux
[root@testhost tmp]# systemctl is-active firewalld
active
[root@testhost tmp]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s25
  sources:
  services: cockpit dhcpv6-client ssh
  ports:
  protocols:
  forward: no
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
```

 InfluxDB への接続で使用するポート番号は 8086 なので、このポート番号に穴をあけます。

```Linux:Linux
[root@testhost tmp]# firewall-cmd --zone=public --add-port=8086/tcp --permanent
success
[root@testhost tmp]# firewall-cmd --reload
success
[root@testhost tmp]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s25
  sources:
  services: cockpit dhcpv6-client ssh
  ports: 8086/tcp
  protocols:
  forward: no
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
```

### 4. 接続

これで、 InfluxDB に接続することができるようになりました。
ブラウザを起動し、 `<IPアドレス>:8086` に接続します。
接続に成功した場合は、以下のような画面が表示されます。

![WS000644.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/e60ae3a9-724b-450f-1951-63c65e510ccd.jpeg "start")

「 GET STARTED 」を押すと、以下のような初期設定画面になります。
今回はユーザ名を「 `testuser` 」、組織名を「 `test_organization` 」、バケツ名を「 `test_bucket` 」とします。

![WS000647.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/397a0c7f-96a9-3a9d-1206-f1f85d99edbd.jpeg "setup")

これで InfluxDB を利用する準備が完了しました。
なお、この画面で表示される API トークンは後から確認しなおすことができないので、利用する場合は必ずこの画面で確認しておくようにしてください。

![WS000665.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/2350cb8b-88ad-dd68-1269-7a30cc78f4bb.jpeg "ready")

「 QUICK START 」を押せば、いよいよ InfluxDB の開始です。

### 5. 書き込み

それでは、まずはデータの書き込みを行ってみましょう。
今回は以下の公式ドキュメントにそって進めてみます。

[Write data](https://docs.influxdata.com/influxdb/v2/get-started/write/)

まずは、左端にあるメニューからデータロードボタン ⇒ 「 Buckets 」を選択します。

![WS000649.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/5b8613ee-21dd-208c-3891-a98f6e1e247b.jpeg "dataload")

次に、初期設定で作成した `test_bucket` について「 ADD DATA 」 ⇒ 「 Line Protocol 」を選択します。

![WS000651.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/cdc4a6af-816d-f3ea-6660-2a35ec9f6edf.jpeg "bucket")

データの書き込み画面になりますので、以下の通りにしてデータを書き込みます。
① 「 ENTER MANUALLY 」を選択し、文字列でデータを書き込む形にします。
② 今回入力するデータは秒単位なので、右上の「 Precision 」を「 Seconds 」に変更します。
③ 先ほどの公式ドキュメントに記載されているサンプルデータを入力します。
④ 「 WRITE DATA 」を押します。

![WS000654.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/1486f61a-342e-44c6-1378-0a06a7f53efc.jpeg "line")

以下のように表示されたら、書き込みは成功です。

![WS000656.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/03c82cfc-4827-923e-474d-9bdeaff4f77c.jpeg "success")

なお、今回書き込んだデータについてざっくり解析すると、以下のようになります。

![WS000667.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/f9f6f50f-c192-2551-fb23-9c6342cbce2b.jpeg)

細かいことについてはここでは解説しませんので、先のドキュメントを参照してください。

### 6. 検索

次に、先ほど書き込んだデータを検索してみましょう。
今回も以下の公式ドキュメントにそって進めてみます。

[Query data](https://docs.influxdata.com/influxdb/v2/get-started/query/)

まずは、左端にあるメニューからデータ検索ボタンを選択します。

![WS000657.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/b7f43bdd-6527-7ae8-7d59-8dbd045efa73.jpeg "menu")

すると、以下のような検索画面が表示されます。

![WS000658.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/b3fb9f11-d5da-724d-1a4d-dee2a5e73cc0.jpeg "explorer")

クエリ文を自力で作成することもできますが、今回は GUI で検索条件を選択することにします。

まずは検索するバケツとして「 FROM 」に `test_bucket` を指定します。
次に、検索条件として「 Filter 」に `_measurement` = `home` を選択します。

![WS000659.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/b8051489-f91e-4ce9-4d8e-6b853f38f2d5.jpeg "filter")

検索する時間範囲は、真ん中よりやや右当たりの箇所で指定します。
今回は日時を明確に指定したいので、「 Custom Time Range 」を選択します。

![WS000660.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/b817f9ba-e398-14ff-65d0-8fffcadaddcf.jpeg "time")

すると日時が入力できるようになるので、「 Start 」に `2022-01-01 08:00:00` 、「 Stop 」に `2022-01-01 20:00:01` を指定します。
 `:01` となっているのは、 Stop ちょうどの日時は検索対象に含まれないためです。

![WS000661.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/a1bd3abf-2cee-0896-5632-d851ce05e3e3.jpeg "range")

うまくいけば、画面の上半分にグラフが表示されるはずです。
表示されない場合は、「 SUBMIT 」ボタンを押して明示的に検索を実行してください。

![WS000662.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/8c21cad3-ee72-8802-251a-879f4ccdaca8.jpeg "result")

なお、今回表示された上のグラフは横軸が時間、縦軸が値の折れ線グラフであり、フィールドごとに線が分かれています。
今回は紹介しませんが、折れ線グラフ以外のグラフも使用できます。

検索されたデータそのものを見たい場合は、「 View Raw Data 」を ON にするとグラフ化前のデータを確認することができます。

![WS000663.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1465018/558bfa3e-ca5f-f302-4c54-4245cd86952a.jpeg "raw")

### 7. 公式ドキュメント

今回はインストールとごく簡単な使い方を紹介しましたが、 InfluxDB は他にも様々なことができます。
ここでは紹介しませんが、以下のドキュメントを参考にいろいろ試してみてください。

[ドキュメント(v2系) ※英語](https://docs.influxdata.com/influxdb/v2/)