最近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'






