実施環境:
[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 )というデータベースです。
これはデータベースとしてよくイメージするような、「複数の表を組み合わせてデータを保管するデータベース」のことです。
この RDB はデータの形がきっかりしているため処理がしやすく、単純な追加削除から複雑な集計までこなすことが可能です。
また、データに矛盾が生じることも防げます。
そのようなメリットがあるため、データベースとしては長らくこの RDB が主に使用されてきました。
ところが、この RDB はきれいに整理できるデータに対しては強いのですが、多様なデータや大量のデータには対応しにくいという問題があります。
さらに、データの整合性を重視する作り上、複数サーバに分散しての実行にも向いていません。
これらは、最近話題のビッグデータ分析や、クラウド環境・コンテナ環境などの分散を想定した環境を考えた場合、あまり喜ばしいことではありません。
そこで注目されるようになってきたのが RDB 以外のデータベースであり、これを NoSQL といいます。
NoSQL には様々な種類がありますが、例えばキーバリュー型であれば「キー」と「値(バリュー)」の組み合わせでデータを表現します。
キーバリュー型は正確な検索集計には向かない一方で、構成がシンプルゆえ柔軟性が強くアクセスも高速なため、ビッグデータ分析などでしばしば使用されます。
このように、格納するデータの特性によって、どのようにデータベースを使い分けていくのか、それが今後ますます大事になっていくことでしょう。
今回はそのような NoSQL の中でも、時刻で並んだデータ、すなわち時系列データに特化したデータベースである InfluxDB を Linux 環境にインストールしてみます。
1. インストール
まずは、 InfluxDB のパッケージを GitHub からダウンロードします。
今回使用する環境は 64bit 環境なので、「 x86_64 」を使用します。
ダウンロードしたパッケージを Linux 上に配置し、 yum コマンドでインストールします。
[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 で起動できます。
[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 自体は起動できましたが、これだとまだ接続するには十分ではありません。
ファイアウォールが起動している場合は、必要なポート番号に穴をあける必要があります。
[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 なので、このポート番号に穴をあけます。
[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
に接続します。
接続に成功した場合は、以下のような画面が表示されます。
「 GET STARTED 」を押すと、以下のような初期設定画面になります。
今回はユーザ名を「 testuser
」、組織名を「 test_organization
」、バケツ名を「 test_bucket
」とします。
これで InfluxDB を利用する準備が完了しました。
なお、この画面で表示される API トークンは後から確認しなおすことができないので、利用する場合は必ずこの画面で確認しておくようにしてください。
「 QUICK START 」を押せば、いよいよ InfluxDB の開始です。
5. 書き込み
それでは、まずはデータの書き込みを行ってみましょう。
今回は以下の公式ドキュメントにそって進めてみます。
まずは、左端にあるメニューからデータロードボタン ⇒ 「 Buckets 」を選択します。
次に、初期設定で作成した test_bucket
について「 ADD DATA 」 ⇒ 「 Line Protocol 」を選択します。
データの書き込み画面になりますので、以下の通りにしてデータを書き込みます。
① 「 ENTER MANUALLY 」を選択し、文字列でデータを書き込む形にします。
② 今回入力するデータは秒単位なので、右上の「 Precision 」を「 Seconds 」に変更します。
③ 先ほどの公式ドキュメントに記載されているサンプルデータを入力します。
④ 「 WRITE DATA 」を押します。
以下のように表示されたら、書き込みは成功です。
なお、今回書き込んだデータについてざっくり解析すると、以下のようになります。
細かいことについてはここでは解説しませんので、先のドキュメントを参照してください。
6. 検索
次に、先ほど書き込んだデータを検索してみましょう。
今回も以下の公式ドキュメントにそって進めてみます。
まずは、左端にあるメニューからデータ検索ボタンを選択します。
すると、以下のような検索画面が表示されます。
クエリ文を自力で作成することもできますが、今回は GUI で検索条件を選択することにします。
まずは検索するバケツとして「 FROM 」に test_bucket
を指定します。
次に、検索条件として「 Filter 」に _measurement
= home
を選択します。
検索する時間範囲は、真ん中よりやや右当たりの箇所で指定します。
今回は日時を明確に指定したいので、「 Custom Time Range 」を選択します。
すると日時が入力できるようになるので、「 Start 」に 2022-01-01 08:00:00
、「 Stop 」に 2022-01-01 20:00:01
を指定します。
:01
となっているのは、 Stop ちょうどの日時は検索対象に含まれないためです。
うまくいけば、画面の上半分にグラフが表示されるはずです。
表示されない場合は、「 SUBMIT 」ボタンを押して明示的に検索を実行してください。
なお、今回表示された上のグラフは横軸が時間、縦軸が値の折れ線グラフであり、フィールドごとに線が分かれています。
今回は紹介しませんが、折れ線グラフ以外のグラフも使用できます。
検索されたデータそのものを見たい場合は、「 View Raw Data 」を ON にするとグラフ化前のデータを確認することができます。
7. 公式ドキュメント
今回はインストールとごく簡単な使い方を紹介しましたが、 InfluxDB は他にも様々なことができます。
ここでは紹介しませんが、以下のドキュメントを参考にいろいろ試してみてください。