2017年8月11日金曜日

macOS X で InfluxDB 1.3 に入門してみた

概要

InfluxDB は時系列データを格納し専用の SQL でデータを取得したり専用の UI でグラフを表示したりすることができるツールです
ElasticSearch みたいなツールです
golang でかかれており Github でオープンソースとして公開されています
今回は macOS 上に influxdb をインストールし簡単なデータの登録や取得を行ってみました

環境

  • macOS X 10.12.6
  • influxdb 1.3.1

インストール

Mac の場合 Homebrew で簡単にインストールすることができます

  • brew install influxdb

インストールできたら以下のコマンドでバージョンが確認できれば OK です

  • influx -version
InfluxDB shell version: v1.3.1

influxQL で遊んでみる

influxdb には influxQL と呼ばれる独自のクエリ言語を発行することでデータを操作することができます

まずは influxQL が発行できるモードに変更します

  • influx -precision rfc3339

「-precision rfc3339」オプションを指定することでタイムスタンプのフォーマットを「YYYY-MM-DDTHH:MM:SS.nnnnnnnnnZ」にすることができます

データベース作成

まずはデータベースを作成しましょう
この辺は MySQL などと同じ操作かなと思います

  • CREATE DATABASE mydb

コマンドの部分は大文字でも小文字でもどっちでも OK です
データベースが作成されたか確認して問題なければデータベースを使用します

  • SHOW databases
  • USE mydb

データ投入

そしたら早速データを追加してみます

  • INSERT cpu,host=server1,region=us_west value=0.64

ここが少しクセのあるコマンドになります
フォーマットは

INSERT measurement,tag_key1=tag_value1,tag_key2=tag_value2 value=n

になります
measurement は所謂テーブルになります
そしてその次にある tag_key と tag_value はカラムとそのカラムに設定する値になります
意味合いとしてタグになるので基本的には文字列情報を設定します

そして 1 つスペースを開けて value=n で数値情報を設定します
この部分は必ず数値である必要があります
今回は value は 1 つしか指定していませんが、value もカンマ区切りで複数していすることができます

  • INSERT temperature,machine=unit42,type=assembly external=25,internal=37

結構フォーマットがシビアで measurement のあとのカンマの後にスペースなどは含められません
タグ情報が複数ある場合のカンマの後にもスペースを含めることはできません

データ取得

データが格納できたら取得してみましょう

  • SELECT * from cpu

ですべてのタグ情報と値の情報が取得できます

name: cpu
time                           host    region  value
----                           ----    ------  -----
2017-08-03T06:44:04.126616931Z server1 us_west 0.64
2017-08-03T07:22:28.122064267Z server2 us_west 0.99

もちろん表示するタグ情報を絞り込むこともできます

  • SELECT region, value FROM cpu
name: cpu
time                           region  value
----                           ------  -----
2017-08-03T06:44:04.126616931Z us_west 0.64
2017-08-03T07:22:28.122064267Z us_west 0.99

データの削除と更新

ついでにデータの削除もやってみましょう

  • DELETE FROM cpu WHERE host='server1'

という感じで消せます
更新 (UPDATE) に関してはコマンドがないようで INSERT を使うことで上書きすることができるようです

  • INSERT cpu,host=server2,region=us_west value=0.99 1501746397569246614

フォーマットは普通の INSERT コマンドの最後にスペースで区切って time を指定します
time の指定方法はデフォルトのタイムスタンプ方式なので「-precision rfc3339」を指定しないで influx コマンドを使うことで確認できます
もしくはインタラクティブモードで

  • precision ns

とすることでタイムスタンプのフォーマットをデフォルトに変更することができるのでこれで SELECT し直しても良いと思います
再度フォーマットを rfc3339 にしたい場合は

  • precision rfc3339

へ戻すことができます

クエリ中で正規表現を使う

またクエリ中に golang の正規表現を使用することができます

  • SELECT * FROM /.*/

上記の場合すべての measurement に対して SELECT 文を発行することができます

管理 UI について

どうやら InfluxDB 1.3 からはデフォルトで付属していた管理 UI がなくなったようです

代わりに Chronograf という InfluxDB 専用の UI プロジェクトができたのでそれを別途インストールする必要があります

最後に

Mac 上で InfluxDB を試してみました
ダウンロードページを見るとわかりますが、さまざまなプラットフォームで簡単にインストールすることができます
Docker 環境がある人は Docker コンテナとしても動作させられるので更に簡単に動かせると思います

次回は Chronograf と連携して UI から InfluxDB の情報を見てみたいと思います

参考サイト

0 件のコメント:

コメントを投稿