
本記事では、オープンソースの時系列データベース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について詳しく知りたい方は公式のドキュメントをご覧ください。