TSDB for InfluxDB® は、インスタンスのヘルス状態の確認、データのクエリ、データの書き込みのために 3 つの HTTP エンドポイントを公開しています。すべてのリクエストはポート 3242 への HTTPS 経由で行われ、HTTP 認証 (クエリ文字列パラメーター)、基本認証、および JSON Web トークン (JWT) をサポートしています。レスポンスは、標準の HTTP ステータスコードとともに JSON 形式で返されます。
エンドポイント
| エンドポイント | 説明 |
|---|---|
/ping | インスタンスのステータスとバージョンの確認 |
/query | データのクエリ、データベース、保持ポリシー (RP)、およびユーザーの管理 |
/write | データベースへのデータの書き込み |
/ping
/ping を使用して、インスタンスが実行中であることを確認し、そのバージョンを取得します。GET リクエストと HEAD リクエストの両方がサポートされています。
定義
GET https://<domain-name>:3242/ping?u=<username>&p=<password>
HEAD https://<domain-name>:3242/ping?u=<username>&p=<password>verbose オプション
デフォルトでは、/ping は空の本文を持つ HTTP 204 を返します (verbose=false)。代わりに HTTP 200 を取得するには、verbose=true を設定します。
GET https://<domain-name>:3242/ping?verbose=true&u=<username>&p=<password>インスタンスバージョンの確認
X-Influxdb-Version レスポンスヘッダーには、実行中のバージョンが含まれています。
curl -sl -I https://<domain-name>:3242/ping?u=<username>&p=<password>レスポンス:
HTTP/1.1 204 No Contentステータスコード
| コード | 説明 |
|---|---|
| 204 No Content | インスタンスは実行中です |
/query
/query を使用して、データの読み取り、データベースの管理、ユーザーの作成など、InfluxQL クエリを実行します。GET リクエストと POST リクエストの両方がサポートされています。
定義
GET https://<domain-name>:3242/query?u=<username>&p=<password>
POST https://<domain-name>:3242/query?u=<username>&p=<password>GET と POST の使い分け
| 動詞 | で始まるクエリに使用 |
|---|---|
| GET | SELECT、 SHOW |
| POST | ALTER、 CREATE、 DELETE、 DROP、 GRANT、 KILL、 REVOKE |
例外: SELECT ... INTO ... は POST が必要です。
クエリ文字列パラメーター
| パラメーター | 必須 | 説明 |
|---|---|---|
q=<query> | 必須 | 実行する InfluxQL ステートメント |
db=<database> | ほとんどの SELECT および SHOW クエリで必須 | 対象のデータベース |
u=<username> | 認証が有効な場合に必須 | データベースに対する読み取り権限が必要です。p と一緒に使用します。または、基本認証 (-u username:password) を使用します。 |
p=<password> | 認証が有効な場合に必須 | u |
epoch=[ns,u,µ,ms,s,m,h] | 任意 | 指定された精度でタイムスタンプをエポック値として返します。u と µ はどちらもマイクロ秒を示します。デフォルトはナノ秒の RFC 3339 タイムスタンプです。 |
chunked=[true,<number>] | 任意 | 単一のレスポンスの代わりに、結果をバッチでストリームします。true は、シリーズごと、または 10,000 ポイントごとにチャンクします。数値の場合は、シリーズごと、またはそのポイント数でチャンクします。このパラメーターがない場合、行は切り捨てられません。 |
pretty=true | 任意 | JSON 出力を整形出力します。デバッグに役立ちますが、レスポンスサイズが大きくなるため、本番環境での使用は避けてください。 |
リクエストボディ
すべてのクエリは URL エンコードされ、InfluxQL 構文に従う必要があります。クエリは --data-urlencode を使用して渡します:
--data-urlencode "q=<InfluxQL query>"1 つのリクエストで複数のクエリを送信するには、セミコロン (;) で区切ります。
CSV フォーマットで結果をクエリするには、Accept: application/csv ヘッダーを追加します。CSV レスポンスは RFC 3339 の代わりにエポックタイムスタンプを使用します。
ファイルからクエリを送信するには、マルチパート POST を使用します:
curl -F "q=@<path-to-file>" -F "async=true" \
"https://<domain-name>:3242/query?u=<username>&p=<password>"ファイル内のクエリはセミコロンで区切る必要があります。
バインドパラメーター
バインドパラメーターを使用すると、フィールド値やタグ値をクエリ文字列に直接埋め込むことなく、WHERE 句で代入できます。
クエリ構文:
--data-urlencode 'q=SELECT [...] WHERE [<field_key>|<tag_key>] = $<placeholder_key>'マップ構文:
--data-urlencode 'params={"<placeholder_key>": <value>}'タグ値はダブルクォーテーション (文字列型) で囲む必要があります。数値フィールド値に引用符は不要です。複数のプレースホルダーはコンマで区切ります。
例
SELECT クエリの実行
curl -G 'https://<domain-name>:3242/query?db=mydb&u=<username>&p=<password>' \
--data-urlencode 'q=SELECT * FROM "mymeas"'レスポンス:
{"results":[{"statement_id":0,"series":[{"name":"mymeas","columns":["time","myfield","mytag1","mytag2"],"values":[["2017-03-01T00:17:18Z",12.4,"12","14"]]}]}]}CLI での同じデータ:
name: mymeas
time myfield mytag1 mytag2
---- ------- ------ ------
2017-03-01T00:16:18Z 33.1
2017-03-01T00:17:18Z 12.4 12 14SELECT ... INTO クエリの実行
SELECT ... INTO は結果を新しいメジャメントに書き込み、POST が必要です:
curl -XPOST 'https://<domain-name>:3242/query?db=mydb&u=<username>&p=<password>' \
--data-urlencode 'q=SELECT * INTO "newmeas" FROM "mymeas"'レスポンス:
{"results":[{"statement_id":0,"series":[{"name":"result","columns":["time","written"],"values":[["1970-01-01T00:00:00Z",2]]}]}]}2 つのポイントが newmeas に書き込まれました。タイムスタンプ 1970-01-01T00:00:00Z (エポック 0) は null タイムスタンプに使用されます。
整形出力された JSON の返却
curl -G 'https://<domain-name>:3242/query?db=mydb&pretty=true&u=<username>&p=<password>' \
--data-urlencode 'q=SELECT * FROM "mymeas"'レスポンス:
{
"results": [
{
"statement_id": 0,
"series": [
{
"name": "mymeas",
"columns": ["time", "myfield", "mytag1", "mytag2"],
"values": [
["2017-03-01T00:16:18Z", 33.1, null, null],
["2017-03-01T00:17:18Z", 12.4, "12", "14"]
]
}
]
}
]
}エポックタイムスタンプの返却
curl -G 'https://<domain-name>:3242/query?db=mydb&epoch=s&u=<username>&p=<password>' \
--data-urlencode 'q=SELECT * FROM "mymeas"'レスポンス:
{"results":[{"statement_id":0,"series":[{"name":"mymeas","columns":["time","myfield","mytag1","mytag2"],"values":[[1488327378,33.1,null,null],[1488327438,12.4,"12","14"]]}]}]}複数クエリの送信
クエリはセミコロンで区切ります。レスポンス内の各結果は、0 から始まる statement_id によって識別されます。
curl -G 'https://<domain-name>:3242/query?db=mydb&epoch=s&u=<username>&p=<password>' \
--data-urlencode 'q=SELECT * FROM "mymeas";SELECT mean("myfield") FROM "mymeas"'レスポンス:
{"results":[{"statement_id":0,"series":[{"name":"mymeas","columns":["time","myfield","mytag1","mytag2"],"values":[[1488327378,33.1,null,null],[1488327438,12.4,"12","14"]]}]},{"statement_id":1,"series":[{"name":"mymeas","columns":["time","mean"],"values":[[0,22.75]]}]}]}CSV 出力のリクエスト
curl -H "Accept: application/csv" \
-G 'https://<domain-name>:3242/query?db=mydb&u=<username>&p=<password>' \
--data-urlencode 'q=SELECT * FROM "mymeas"'レスポンス:
name,tags,time,myfield,mytag1,mytag2
mymeas,,1488327378000000000,33.1,mytag1,mytag2
mymeas,,1488327438000000000,12.4,12,14空のタグ列は空白で表示されます。タイムスタンプはエポックナノ秒です。
ファイルからのクエリ送信
curl -F "q=@queries.txt" -F "async=true" \
'https://<domain-name>:3242/query?u=<username>&p=<password>'queries.txt の例:
SELECT * FROM "mymeas";
SELECT mean("myfield") FROM "mymeas";タグ値パラメーターのバインド
curl -G 'https://<domain-name>:3242/query?db=mydb&u=<username>&p=<password>' \
--data-urlencode 'q=SELECT * FROM "mymeas" WHERE "mytag1" = $tag_value' \
--data-urlencode 'params={"tag_value":"12"}'レスポンス:
{"results":[{"statement_id":0,"series":[{"name":"mymeas","columns":["time","myfield","mytag1","mytag2"],"values":[["2017-03-01T00:17:18Z",12.4,"12","14"]]}]}]}$tag_value は "12" にマップされます。タグ値は文字列として保存され、ダブルクォーテーションで囲む必要があります。
数値フィールド値パラメーターのバインド
curl -G 'https://<domain-name>:3242/query?db=mydb&u=<username>&p=<password>' \
--data-urlencode 'q=SELECT * FROM "mymeas" WHERE "myfield" > $field_value' \
--data-urlencode 'params={"field_value":30}'レスポンス:
{"results":[{"statement_id":0,"series":[{"name":"mymeas","columns":["time","myfield","mytag1","mytag2"],"values":[["2017-03-01T00:16:18Z",33.1,null,null]]}]}]}$field_value は 30 にマップされます。数値に引用符は不要です。
複数パラメーターのバインド
curl -G 'https://<domain-name>:3242/query?db=mydb&u=<username>&p=<password>' \
--data-urlencode 'q=SELECT * FROM "mymeas" WHERE "mytag1" = $tag_value AND "myfield" < $field_value' \
--data-urlencode 'params={"tag_value":"12","field_value":30}'レスポンス:
{"results":[{"statement_id":0,"series":[{"name":"mymeas","columns":["time","myfield","mytag1","mytag2"],"values":[["2017-03-01T00:17:18Z",12.4,"12","14"]]}]}]}ステータスコード
レスポンスは JSON フォーマットです。整形出力を有効にするには pretty=true を含めます。
| コード | 説明 |
|---|---|
| 200 OK | リクエストは成功しました。結果については JSON 出力を参照してください。 |
| 400 Bad Request | クエリを処理できませんでした。多くの場合、構文エラーが原因です。JSON 出力を参照してください。 |
| 401 Unauthorized | 無効な認証情報です。 |
例
成功したクエリ:
curl -i -G 'https://<domain-name>:3242/query?db=mydb&u=<username>&p=<password>' \
--data-urlencode 'q=SELECT * FROM "mymeas"'HTTP/1.1 200 OK
Content-Type: application/json
X-Influxdb-Version: 1.7.x
Transfer-Encoding: chunked
{"results":[{"statement_id":0,"series":[{"name":"mymeas","columns":["time","myfield","mytag1","mytag2"],"values":[["2017-03-01T00:16:18Z",33.1,null,null],["2017-03-01T00:17:18Z",12.4,"12","14"]]}]}]}存在しないデータベースを参照するクエリも 200 を返しますが、エラーは JSON ボディに含まれます:
curl -i -G 'https://<domain-name>:3242/query?db=mydb1&u=<username>&p=<password>' \
--data-urlencode 'q=SELECT * FROM "mymeas"'HTTP/1.1 200 OK
...
{"results":[{"statement_id":0,"error":"database not found: mydb1"}]}不正な形式のクエリ:
curl -i -G 'https://<domain-name>:3242/query?db=mydb&u=<username>&p=<password>' \
--data-urlencode 'q=SELECT *'HTTP/1.1 400 Bad Request
...
{"error":"error parsing query: found EOF, expected FROM at line 1, char 9"}無効な認証情報を持つクエリ:
curl -i -XPOST 'https://<domain-name>:3242/query?u=myusername&p=notmypassword' \
--data-urlencode 'q=CREATE DATABASE "mydb"'HTTP/1.1 401 Unauthorized
...
{"error":"authorization failed"}/write
/write を使用して、既存のデータベースにデータを書き込みます。POST リクエストのみがサポートされています。
定義
POST https://<domain-name>:3242/write?u=<username>&p=<password>クエリ文字列パラメーター
| パラメーター | 必須 | 説明 |
|---|---|---|
db=<database> | 必須 | 対象のデータベース |
u=<username> | 認証が有効な場合に必須 | データベースに対する書き込み権限が必要です。p と一緒に使用します。または、基本認証を使用します。 |
p=<password> | 認証が有効な場合に必須 | u |
precision=[ns,u,ms,s,m,h] | 任意 | 提供された UNIX タイムスタンプの精度。デフォルトはナノ秒です。データに一致する最小の粒度を使用して、圧縮を最大化します。 |
rp=<rp-name> | 任意 | 対象の保持ポリシー。デフォルトは DEFAULT RP です。 |
リクエストボディ
データはラインプロトコルフォーマットでバイナリエンコードする必要があります:
--data-binary '<data in line protocol format>'常に --data-binary を使用してください。-d、--data-urlencode、および --data-ascii モードは、改行を削除したり、予期しないフォーマットを導入したりして、書き込みエラーを引き起こす可能性があります。
1 つのリクエストで複数のポイントを書き込むには、改行 (\n) で区切ります。ファイルから書き込むには、ファイル名の前に @ を付けます:
curl -i -XPOST "https://<domain-name>:3242/write?db=mydb&u=<username>&p=<password>" \
--data-binary @data.txtファイル内のポイントは、ラインプロトコルフォーマットで、改行で区切る必要があります。キャリッジリターン (\r) は解析の失敗を引き起こします。
5,000 から 10,000 ポイントのバッチで書き込みます。バッチが小さいと、より多くの HTTP リクエストが生成され、スループットが低下します。
例
秒精度のタイムスタンプでポイントを書き込む
curl -i -XPOST "https://<domain-name>:3242/write?db=mydb&precision=s&u=<username>&p=<password>" \
--data-binary 'mymeas,mytag=1 myfield=90 1463683075'HTTP/1.1 204 No Content特定の保持ポリシーにポイントを書き込む
curl -i -XPOST "https://<domain-name>:3242/write?db=mydb&rp=myrp&u=<username>&p=<password>" \
--data-binary 'mymeas,mytag=1 myfield=90'HTTP/1.1 204 No ContentHTTP 認証 (クエリ文字列) を使用した書き込み
有効な認証情報:
curl -i -XPOST "https://<domain-name>:3242/write?db=mydb&u=myusername&p=mypassword" \
--data-binary 'mymeas,mytag=1 myfield=91'HTTP/1.1 204 No Content無効な認証情報:
curl -i -XPOST "https://<domain-name>:3242/write?db=mydb&u=myusername&p=notmypassword" \
--data-binary 'mymeas,mytag=1 myfield=91'HTTP/1.1 401 Unauthorized
...
{"error":"authorization failed"}基本認証を使用した書き込み
有効な認証情報:
curl -i -XPOST -u myusername:mypassword "https://<domain-name>:3242/write?db=mydb" \
--data-binary 'mymeas,mytag=1 myfield=91'HTTP/1.1 204 No Content無効な認証情報:
curl -i -XPOST -u myusername:notmypassword "https://<domain-name>:3242/write?db=mydb" \
--data-binary 'mymeas,mytag=1 myfield=91'HTTP/1.1 401 Unauthorized
...
{"error":"authorization failed"}ナノ秒タイムスタンプでポイントを書き込む
curl -i -XPOST "https://<domain-name>:3242/write?db=mydb&u=<username>&p=<password>" \
--data-binary @data.txtHTTP/1.1 204 No Contentサーバーのタイムスタンプを使用してポイントを書き込む
タイムスタンプを省略すると、サーバーの現在のナノ秒時刻が使用されます:
curl -i -XPOST "https://<domain-name>:3242/write?db=mydb&u=<username>&p=<password>" \
--data-binary 'mymeas,mytag=1 myfield=90'HTTP/1.1 204 No Content1 つのリクエストで複数のポイントを書き込む
curl -i -XPOST "https://<domain-name>:3242/write?db=mydb&u=<username>&p=<password>" \
--data-binary 'mymeas,mytag=3 myfield=89 1463689152000000000
mymeas,mytag=2 myfield=34 1463689152000000000'HTTP/1.1 204 No Contentファイルからポイントを書き込む
curl -i -XPOST "https://<domain-name>:3242/write?db=mydb&u=<username>&p=<password>" \
--data-binary @data.txtdata.txt の例:
mymeas,mytag1=1 value=21 1463689680000000000
mymeas,mytag1=1 value=34 1463689690000000000
mymeas,mytag2=8 value=78 1463689700000000000
mymeas,mytag3=9 value=89 1463689710000000000ステータスコード
| コード | 説明 |
|---|---|
| 204 No Content | 書き込みに成功しました |
| 400 Bad Request | 無効なラインプロトコル構文またはフィールド型の競合 |
| 401 Unauthorized | 無効な認証情報です |
| 404 Not Found | 対象のデータベースが存在しません |
| 500 Internal Server Error | システムが過負荷または障害状態です。対象の RP が存在しないことを示している可能性があります |
例
成功した書き込み:
HTTP/1.1 204 No Content無効なタイムスタンプ:
HTTP/1.1 400 Bad Request
{"error":"unable to parse 'mymeas,mytag=1 myfield=91 abc123': bad timestamp"}フィールド型の競合 (以前に浮動小数点数として保存されたフィールドに整数を書き込む):
HTTP/1.1 400 Bad Request
{"error":"field type conflict: input field \"myfield\" on measurement \"mymeas\" is type int64, already exists as type float"}無効な認証情報:
HTTP/1.1 401 Unauthorized
{"error":"authorization failed"}対象のデータベースが存在しません:
HTTP/1.1 404 Not Found
{"error":"database not found: \"mydb1\""}対象の保持ポリシーが存在しません:
HTTP/1.1 500 Internal Server Error
{"error":"retention policy not found: myrp"}InfluxDB® は InfluxData の登録商標です。InfluxData は TSDB for InfluxDB® と提携しておらず、また推奨もしていません。