InfluxDBの紹介

本記事では、オープンソースの時系列データベースInfluxDBの概要と基本的な使い方について説明します。

InfluxDBとは

InfluxDBは時系列データベース

InfluxDBは時刻情報を主キーとしたデータを扱う時系列データベースの一つです。IoTデバイスのセンサーデータやソフトウェアのログデータなどの時刻情報を付随したデータを扱うのに便利で、Grafanaなどのデータ可視化ツールとの連携も容易です。

InfluxDBはリレーショナルデータベースではない

InfluxDBはリレーション形式のデータを扱うリレーショナルデータベースではなく、一種のスキーマレスデータベースです。しかし、SQLに似たInfluxQLという独自のクエリ言語を利用することでリレーショナルデータベースライクな使い方も可能です。

InfluxDBはオープンソースデータベース

InfluxDBはGitHubでソースが公開されているオープンソースのデータベースです。ただし、クラスタリング機能を持ったEnterprise版は商用のクローズドソースとなっています。

導入手順

InfluxDBは2.x系が存在しますが、まだ安定版ではないので今回はバージョン1.8を導入します。

CentOS7に導入する方法とDockerコンテナを用いる2つの方法を示します。

CentOS7に導入する場合

influxdbリポジトリを登録

# cat <<EOF | tee /etc/yum.repos.d/influxdb.repo
[influxdb]
name = InfluxDB Repository - RHEL \$releasever
baseurl = https://repos.influxdata.com/rhel/\$releasever/\$basearch/stable
enabled = 1
gpgcheck = 1
gpgkey = https://repos.influxdata.com/influxdb.key
EOF

yumコマンドでインストール

# yum install influxdb

systemctlでinfluxdbサービスを起動

# systemctl start influxdb

Dockerコンテナで導入する場合

Dockerの知識がある方はDocker Imageから構築する方法が簡単です。InfluxDBはDocker Hubに公式イメージが提供されています。

InfluxDBコンテナの起動

# docker run --name=influxdb -d -p 8086:8086 influxdb

基本的な使い方

データ操作にはInfluxQLというSQLに似たInfluxDB独自のコマンド文を用います。

以下では、対話環境のクライアント接続ツールinfluxを用いて、データの入力と参照を試してみます。

influxでInfluxDBに接続

CentOS7の場合

# influx
Connected to http://localhost:8086 version 1.8.0
InfluxDB shell version: 1.8.0
>

Dockerコンテナの場合

# docker exec -it influxdb influx
Connected to http://localhost:8086 version 1.8.0
InfluxDB shell version: 1.8.0
>

influxの終了

influxの対話環境を終了するにはexitコマンドを利用します。

> exit
# 《シェルに戻る》

データベースの作成

CREATE DATABASE文でデータベースを作成することができます。

ここでは、mydbという名前のデータベースを作成します。

> CREATE DATABASE mydb

データベース一覧

SHOW DATABASESで存在するデータベースの一覧を見ることができます。

先ほど作成したデータベースmydbが確認できます。_internalは最初から存在するシステム用のデータベースです。

> SHOW DATABASES
name: databases
name
----
_internal
mydb

デフォルトで利用するデータベースを指定

USE文で接続中にデフォルトで利用するデータベースをあらかじめ指定しておくことができます。デフォルトとなるデータベースを指定しないと毎回クエリでデータベースを明示的に指定する必要があります。

ここでは、先ほど作成したmydbを指定しておきます。

> USE mydb
Using database mydb

InfluxDBの扱うデータ

InfluxDBのデータはポイント(point)単位で扱われます。ポイントはSQLのテーブル行のような概念に当たります。

ポイントにはメジャーメント(measurement) 、タイム(time)、タグ(tag)、フィールド(field)が含まれます。

  • メジャーメント:ポイントのグループを示すメタデータ。参照時にSQLのテーブルのように扱うことが可能
  • タイム:”time”という名前のタイムスタンプ情報を持つ主キー
  • タグ:インデックスに用いるためのメタデータ
  • フィールド:実際のデータ。インデックスには使えない(検索条件に含めると遅い)

厳密ではありませんが、SQLとの用語対応は以下の通りです。

InfluxQL SQL
メジャーメント テーブル
ポイント
タイム、タグ、フィールド

データ挿入

INSERT文でデータを挿入します。事前にメジャーメント、タグ、フィールドを定義する必要はありません。

ここでは、cpuメジャーメントにhost,regionタグとvalueフィールドに値を指定して1つのポイントを挿入します。

> INSERT cpu,host=serverA,region=Japan value=0.64

データ参照

SELECT文でデータを参照します。*(アスタリスク)ですべての列を指定できます。

ここでは、cpuメジャーメントのすべてのポイントをすべての列を含んで参照します。

%gt; SELECT * FROM cpu;
name: cpu
time                host    region value
----                ----    ------ -----
1592658774391399679 serverA Japan  0.64

このとき、time列が人間が読める形式になっていないので、precision文を使ってrfc3339形式に変更します。ちなみに、time列の表示形式はinfluxを開始する際に-precisionオプションを使用しても指定できます。

> precision rfc3339
> select * from cpu
name: cpu
time                           host    region value
----                           ----    ------ -----
2020-06-20T13:12:54.391399679Z serverA Japan  0.64

timeに明示的にデータを挿入した場合を除き、timeには挿入時の時刻情報が自動的に挿入されます。

SHOWコマンド

先ほど、SHOW DATABASESでデータベース一覧を確認したように、SHOWコマンドでは色々なシステムデータを参照することが可能です。

現在実行中のクエリ一覧

> SHOW QUERIES
qid query        database duration status
--- -----        -------- -------- ------
17  SHOW QUERIES mydb     35µs     running

メジャーメント一覧

> SHOW MEASUREMENTS
name: measurements
name
----
cpu

おわりに

本記事ではInfluxDBの概要と基本的な使い方について記載しましたが、ここまでの話はInfluxDBの機能のほんの一部です。InfluxDBについて詳しく知りたい方は公式のドキュメントをご覧ください。