最近Grafanaを弄っている流れでInfluxDBも触っています。
結構くせがあったのでInfluxDBについてまとめることにしました。
インストール
rpm
やdpkg
、macだったらbrew
でサクッと入れられます。
- REHL系の例
rpm -ivh http://s3.amazonaws.com/influxdb/influxdb-latest-1.x86_64.rpm
GUI
InfluxDBにはWebの管理GUIが同梱されています。
デフォルトでは
http://localhost:8083
でアクセスできます。
初期のユーザとパスワードは公式ドキュメントに記載があるようにroot/root
です。
ホスト名にはブラウザで開いたホストと同じもの、ポートには8086
を指定してconnect
します。
データベースの作成
InfluxDBのデータベースはRDBのスキーマの概念に近いです。
GUI経由でのデータベースの作成
connect
するとデータベース一覧と登録フォームが表示されます。
ここでデータベース名を入力し、Create Database
を行うとデータベースを作成することができます。
REST API経由でのデータベースの作成
curlを使った例です。JSONを-d
でPOST
します。
curl -X POST 'http://localhost:8086/db?u=root&p=root' -d '{"name": "test"}'
ユーザの作成
GUI経由でのユーザの作成
データベース・ユーザを作成します。
データベースを選択するとユーザ一覧と登録フォームが表示されます。
ここでユーザ名とパスワードを入力し、Create
を行うとデータベース・ユーザを作成することができます。
Admin
にチェックするとAdmin
ユーザとなります。
Admin
ユーザはデータベースやユーザを作成/削除したり、パーミッションを変更したりすることができます。
REST API経由でのユーザの作成
パスが/db/データベース名/users
になります。
curl -X POST 'http://localhost:8086/db/test/users?u=root&p=root' -d '{"name": "test", "password": "パスワード"}'
データの登録・WRITE
InfkuxDBではseries
ごとにデータを登録します。
series
とはRDBのテーブルに近い概念です。
time
カラムを指定して登録すれば指定した時刻のデータを登録することができます。
GUI経由でのデータ登録
データベース一覧からExplore Data »
をタップします。
Time Series Name
にseries名
を入力し、
Write Point
にJSONを入力してボタンをタップします。
JSONの形式は{"カラム名": 値, ・・・}
です。
REST API経由でのデータ登録
パスが/db/データベース名/series
になります。
JSONをPOST
するのですがGUIのJSONと形式が異なります。
[
{
"name": "series名",
"columns": [カラム名を配列で、、],
"points": [
[カラム1の値、カラム2の値・・・],
:
]
}
]
curl -X POST 'http://localhost:8086/db/test/series?u=root&p=root' -d \
'{"name": "nikkei_average", "columns": ["time", "price"], "points": [[1418083200000, 17450.77]]}'
データの上書きを行うときはtime
, sequence_number
を指定してWRITE
します。
curl -X POST 'http://localhost:8086/db/test/series?u=root&p=root' -d \
'{"name": "nikkei_average", "columns": ["time", "sequence_number", "price"], "points": [[1418083200000, 69260001, 17450.77]]}'
クエリ・SELECT
GUI経由でのクエリ
データ登録と同様、データベース一覧からExplore Data »
をタップします。
Read Pounts
にクエリを入力し、Execute Query
をタップします。
時系列グラフと結果が一覧で表示されます。
REST API経由でのクエリ
パスはデータ登録と同じく/db/データベース名/series
になります。
HTTPメソッドがGET
になり、QueryString:q=
でクエリを渡します。
curl -G 'http://localhost:8086/db/test/series?u=root&p=root' -d --data-urlencode "select * from nikkei_average"
結果がJSONで表示されます。
[{"name":"nikkei_average","columns":["time","sequence_number","price"],"points":[[1419778800000,69270001,17729.84],[1419519600000,69280001,17818.96],[1418083200000,69260001,17450.77]]}]
見づらいのでpretty=true
をQueryStringに追加するとインデント表示されます。
curl -G 'http://localhost:8086/db/test/series?u=root&p=root&pretty=true' -d --data-urlencode "select * from nikkei_average"
[
{
"name": "nikkei_average",
"columns": [
"time",
"sequence_number",
"price"
],
"points": [
[
1419778800000,
69270001,
17729.84
],
[
1419519600000,
69280001,
17818.96
],
[
1418083200000,
69260001,
17450.77
]
]
}
ユーザの削除
GUI経由でのユーザの削除
データベース・ユーザを削除します。
ユーザ一覧からXをタップするだけです。
REST API経由でのユーザの削除
パスが/db/データベース名/users/ユーザ名
になります。
HTTPメソッドはDELETE
を使います。
curl -X DELETE 'http://localhost:8086/db/test/users/dbuser?u=root&p=root'
データベースの削除
GUI経由でのデータベースの削除
データベースを削除します。
ユーザの削除と同じくデータベース一覧からXをタップするだけです。
REST API経由でのデータベースの削除
パスが/db/データベース名
になります。
HTTPメソッドはDELETE
を使います。
curl -X DELETE 'http://localhost:8086/db/test?u=root&p=root'