InfluxDB の WebAPI エンドポイントに認証機能を追加してデータ取得まで行う
OS:Amazon Linux 2(Centos 7 互換) version: InfluxDB 1.6
InfluxDB 1.6 を install すると最初は、WebAPI エンドポイントが有効になっていない。 これを有効にするために設定ファイルを変更する必要がある。
/etc/influxdb/influxdb.conf
変更例
[http] # Determines whether HTTP endpoint is enabled. enabled = true # The bind address used by the HTTP service. bind-address = ":8086" # Determines whether user authentication is enabled over HTTP/HTTPS. auth-enabled = true # The default realm sent back when issuing a basic auth challenge. # realm = "InfluxDB" # Determines whether HTTP request logging is enabled. log-enabled = true ...
WebAPI エンドポイントを有効にするために [http] の項目で enabled = true
にする。
バインドするポート番号 bind-address
、認証機能を有効にするための auth-enabled = true
, HTTP のリクエストのロギング有効化 log-enabled = true
等を設定する。
その他はお好きなように。(参考)Configuring InfluxDB OSS | InfluxData Documentation
設定を反映するために influxdb を再起動する
$ sudo systemctl restart influxdb
POST パラメータのq
に influx QL を記述してエンドポイントを curl で叩く。認証機能を有効にして、admin ユーザが作られていない状況でエンドポイントを叩くと、最初に admin ユーザを作れと 403 Error になる。
$ curl -i -X POST http://localhost:8086/query --data-urlencode "q=SHOW USERS" HTTP/1.1 403 Forbidden Content-Type: application/json Request-Id: d474184a-a854-11e8-8001-000000000000 X-Influxdb-Build: OSS X-Influxdb-Error: error authorizing query: create admin user first or disable authentication X-Influxdb-Version: 1.6.1 X-Request-Id: d474184a-a854-11e8-8001-000000000000 Date: Sat, 25 Aug 2018 10:51:32 GMT Content-Length: 87 {"error":"error authorizing query: create admin user first or disable authentication"}
そのため、まずは admin ユーザを作成する(最初の admin ユーザの作成は認証しなくてもクエリが成功する)。
$ curl -X POST http://localhost:8086/query --data-urlencode "q=CREATE USER root WITH PASSWORD 'root' WITH ALL PRIVILEGES"
作成した admin ユーザの情報を用いて、エンドポイントを叩くことが可能になる。
$ curl -X POST http://localhost:8086/query -u root:root --data-urlencode "q=SHOW USERS" {"results":[{"statement_id":0,"series":[{"columns":["user","admin"],"values":[["root",true]]}]}]} $ $ curl -X POST http://localhost:8086/query?db=mydb -u root:root --data-urlencode 'q=SELECT * FROM cpu' {"results":[{"statement_id":0,"series":[{"name":"cpu","columns":["time","host","region","value","value2"],"values":[["2018-08-25T03:12:37.911702475Z","serverA","us_west",0.64,null],["2018-08-25T03:13:44.479107406Z","serverB","us_east",0.1,null],["2018-08-25T03:14:13.822910528Z","serverB",null,0.1,null],["2018-08-25T03:34:49.405686775Z","serverB","us_east",0.1,"hoge"]]}]}]}