指定された時間範囲内で、1 つ以上の時系列からデータポイントをクエリします。時間範囲と 1 つ以上のサブクエリを定義する JSON ボディを含む POST リクエストを /api/query に送信します。
リクエスト構文
POST /api/queryリクエストパラメーター
| パラメーター | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
start | Long | はい | — | 時間範囲の開始時刻です。単位は秒またはミリ秒です。TSDB は数値に基づいて単位を自動的に判別します。詳細については、「タイムスタンプの単位」をご参照ください。 |
end | Long | いいえ | 現在のサーバー時刻 | 時間範囲の終了時刻です。単位は秒またはミリ秒です。デフォルトでは TSDB サーバーの現在時刻が使用されます。詳細については、「タイムスタンプの単位」をご参照ください。 |
queries | 配列 | はい | — | サブクエリの配列です。詳細については、「サブクエリパラメーター」をご参照ください。 |
msResolution | ブール値 | いいえ | false | タイムスタンプをミリ秒単位で返すかどうかを指定します。この設定は、クエリ対象のデータポイントが秒単位のタイムスタンプを使用している場合にのみ適用されます。true を指定すると、応答内のすべてのタイムスタンプがミリ秒単位に変換されます。false を指定すると、元の単位が保持されます。ミリ秒単位のタイムスタンプで保存されたデータポイントは、この設定に関係なく常にミリ秒単位で返されます。 |
hint | マップ | いいえ | — | 応答時間を短縮するためのクエリヒントです。詳細については、「パラメーター: hint」をご参照ください。 |
タイムスタンプの単位
TSDB は数値に基づいてタイムスタンプの単位を判別します。
| 範囲 | 単位 | 日付範囲 |
|---|---|---|
[4294968, 4294967295] | 秒 | 1970-02-20 01:02:48 – 2106-02-07 14:28:15 |
[4294967296, 9999999999999] | ミリ秒 | 1970-02-20 01:02:47.296 – 2286-11-21 01:46:39.999 |
(-∞, 4294968) または (9999999999999, +∞) | 無効 | — |
これらのルールは、/api/put(書き込み)および/api/query(クエリ)の両方に適用されます。
単一時点のデータポイントをクエリするには、start および end を同一の値に設定します(例: 1356998400)。
サブクエリパラメーター
queries 配列内の各オブジェクトは、以下のパラメーターをサポートします。
| パラメーター | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
aggregator | 文字列 | はい | — | 集約関数です。詳細については、「パラメーター: aggregator」をご参照ください。例:sum。 |
metric | 文字列 | はい | — | メトリック名です。例:sys.cpu0。 |
rate | ブール値 | いいえ | false | 連続する値間の成長率を計算するかどうかを指定します。計算式:(Vt − Vt-1) / (t − t-1)。 |
delta | ブール値 | いいえ | false | 連続する値間の差分(デルタ)を計算するかどうかを指定します。計算式:Vt − Vt-1。詳細については、「パラメーター: delta」をご参照ください。 |
limit | 整数 | いいえ | 0 | 1 つの時系列あたり、1 ページごとに返される最大データポイント数です。0 の場合は制限なしです。 |
offset | 整数 | いいえ | 0 | 1 つの時系列あたり、1 ページごとにスキップするデータポイント数です。0 の場合はスキップしません。 |
dpValue | 文字列 | いいえ | — | 値によるデータポイントのフィルター処理を行います。サポートされる演算子:>、<、=、<=、>=、!=。値が文字列の場合、= および != のみがサポートされます。集約後に適用されます。 |
preDpValue | 文字列 | いいえ | — | 集約前のスキャン中に生データポイントをフィルター処理します。dpValue と同じ演算子が使用可能です。このフィルターに該当しないデータポイントは、すべての計算から除外されます。 |
downsample | 文字列 | いいえ | — | ダウンサンプリング構成です。詳細については、「パラメーター: downsample」をご参照ください。例:60m-avg。 |
tags | マップ | いいえ | — | タグベースのフィルター条件です。filters と相互排他です。両方を指定した場合、JSON 内で後に出た方が有効になります。 |
filters | リスト | いいえ | — | JSON 形式のフィルター条件です。tags と相互排他です。両方を指定した場合、JSON 内で後に出た方が有効になります。詳細については、「パラメーター: filters」をご参照ください。 |
hint | マップ | いいえ | — | サブクエリレベルのクエリヒントです。詳細については、「パラメーター: hint」をご参照ください。 |
forecasting | 文字列 | いいえ | — | AI トレーニングを用いて将来のデータポイントを予測します。詳細については、「パラメーター: forecasting」をご参照ください。 |
abnormaldetect | 文字列 | いいえ | — | AI トレーニングを用いて時系列内の異常を検出します。詳細については、「パラメーター: abnormaldetect」をご参照ください。 |
1 回のリクエストでサポートされるサブクエリの最大数は 200 です。
tagsおよびfiltersの両方が指定されている場合、JSON 内で後に出たパラメーターが有効になります。
リクエスト例
POST /api/query{
"start": 1356998400,
"end": 1356998460,
"queries": [
{
"aggregator": "sum",
"metric": "sys.cpu.0",
"rate": "true",
"tags": {
"host": "*",
"dc": "lga"
}
}
]
}応答要素
正常なリクエストでは、HTTP 200 応答とともに JSON 配列が返されます。各要素は 1 つのサブクエリ結果に対応します。
| パラメーター | 説明 |
|---|---|
metric | メトリック名です。 |
tags | 値が集計されなかったタグ。 |
aggregateTags | 値が集計されたタグ。 |
dps | タイムスタンプと値のペア形式のデータポイントです。 |
応答例
[
{
"metric": "tsd.hbase.puts",
"tags": {"appName": "hitsdb"},
"aggregateTags": ["host"],
"dps": {
"1365966001": 25595461080,
"1365966061": 25595542522,
"1365966062": 25595543979,
"1365973801": 25717417859
}
}
]パラメーター: limit および offset
limit および offset を組み合わせて使用し、サブクエリ内での結果のページネーションを行います。
limit:1 つの時系列あたりに返される最大データポイント数です。デフォルト値0は制限なしを意味します。offset:1 つの時系列あたりにスキップするデータポイント数です。デフォルト値0はスキップしないことを意味します。
limit および offset のいずれも負の数に設定することはできません。
順位 1001 ~ 1500 のデータポイントを取得するには、limit を 500、offset を 1000 に設定します。
{
"start": 1346046400,
"end": 1347056500,
"queries": [
{
"aggregator": "avg",
"downsample": "2s-sum",
"metric": "sys.cpu.0",
"limit": "500",
"offset": "1000",
"tags": {
"host": "localhost",
"appName": "hitsdb"
}
}
]
}パラメーター: dpValue
集約後に値によるデータポイントのフィルター処理を行います。サポートされる演算子:>、<、=、<=、>=、!=。
フィルター値が文字列の場合、= および != のみがサポートされます。
例
{
"start": 1346046400,
"end": 1347056500,
"queries": [
{
"aggregator": "avg",
"downsample": "2s-sum",
"metric": "sys.cpu.0",
"dpValue": ">=500",
"tags": {
"host": "localhost",
"appName": "hitsdb"
}
}
]
}パラメーター: delta
delta を true に設定すると、dps 応答内の各値は、連続するデータポイント間の計算済みデルタとなります。元の結果に n 個のキーと値のペアが含まれる場合、デルタ結果には n−1 個のペアが含まれます(最初のペアは、比較可能な前後の値がないため除外されます)。デルタ演算子は、ダウンサンプリング後の値にも適用されます。
deltaOptions
サブクエリ内で deltaOptions を構成することで、デルタの計算方法を制御できます。
| パラメーター | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
counter | ブール値 | いいえ | false | メトリック値を単調増加または単調減少する累積カウント(カウンターに類似)として扱います。サーバーはメトリック値を検証しません。 |
counterMax | 整数 | いいえ | — | counter が true の場合のデルタ値のしきい値です。絶対デルタがこのしきい値を超えると、そのデルタは異常と見なされます。未設定の場合は、しきい値は適用されません。 |
dropReset | ブール値 | いいえ | false | counterMax が設定されている場合の異常デルタに対する動作を制御します。true の場合、異常デルタは破棄されます。false の場合、異常デルタは 0 にリセットされます。 |
例
{
"start": 1346046400,
"end": 1347056500,
"queries": [
{
"aggregator": "none",
"downsample": "5s-avg",
"delta": true,
"deltaOptions": {
"counter": true,
"counterMax": 100
},
"metric": "sys.cpu.0",
"dpValue": ">=50",
"tags": {
"host": "localhost",
"appName": "hitsdb"
}
}
]
}パラメーター: downsample
ダウンサンプリングは、指定された時間間隔でデータを集約する操作であり、長期間のデータをクエリする際に有用です。時間範囲は指定された間隔のウィンドウに分割され、返される各タイムスタンプはウィンドウの開始時刻を表します。
フォーマット
<interval><units>-<aggregator>[-<fill policy>]downsample が指定されている場合、TSDB はクエリ範囲を両端とも 1 ウィンドウ分自動的に拡張します。たとえば、[1346846401, 1346846499] の範囲で 5 分間隔を指定した場合、実際の範囲は [1346846101, 1346846799] になります。
フィールド
`interval`
5 や 60 などの数値です。0all を使用すると、範囲内のすべてのデータポイントが単一の値に集約されます。
`units`
| 値 | 単位 |
|---|---|
s | 秒 |
m | 分 |
h | 時間 |
d | 日 |
n | 月 |
y | 年 |
デフォルトでは、タイムスタンプはモジュロ切り捨てにより整合されます:整合済みタイムスタンプ = データタイムスタンプ − (データタイムスタンプ % 時間間隔)。カレンダー間隔(たとえば 00:00 から翌日の 00:00 まで)で整合させるには、単位の末尾にcを追加します:1dc。
`aggregator`
| 演算子 | 説明 |
|---|---|
avg | 平均値 |
count | データポイント数 |
first | 最初の値 |
last | 最後の値 |
min | 最小値 |
max | 最大値 |
median | 中央値 |
sum | 値の合計 |
zimsum | 値の合計(ゼロ補間) |
rfirst | first と同じですが、整合済みタイムスタンプではなく元のタイムスタンプを返します |
rlast | last と同じですが、整合済みタイムスタンプではなく元のタイムスタンプを返します |
rmin | min と同じですが、整合済みタイムスタンプではなく元のタイムスタンプを返します |
rmax | max と同じですが、整合済みタイムスタンプではなく元のタイムスタンプを返します |
rfirst、rlast、rmin、およびrmax演算子は、同じダウンサンプリング式内でフィルポリシーと併用できません。
フィルポリシー
フィルポリシーは、ダウンサンプリング結果における欠損値の埋め方を定義します。タイムウィンドウ内にデータが存在しない場合、TSDB はフィルポリシーを適用して値を生成します。
| フィルポリシー | 欠損値を以下で埋める |
|---|---|
none | 埋めない(デフォルト) |
nan | null |
null | null |
zero | 0 |
linear | 線形補間で計算された値 |
previous | 直前の値 |
near | 最も近い隣接する値 |
after | 次の値 |
fixed | ユーザー指定の固定値 |
固定フィルポリシー
欠損値を固定数で埋めるには、以下のフォーマットを使用します。
<interval><units>-<aggregator>-fixed#<number>固定値は正または負の数を指定できます。例:1h-sum-fixed#6、1h-avg-fixed#-8。
ダウンサンプリングの例
1m-avg、1h-sum-zero、1h-sum-near
downsample は任意のパラメーターです。ダウンサンプリングを明示的に無効化するには、null または空文字列を指定します:{"downsample": null} または {"downsample": ""}。
パラメーター: aggregator
ダウンサンプリング後、TSDB は各整合済みタイムスタンプで複数のタイムラインの値を集約し、それらを 1 つのタイムラインにマージします。クエリに一致するタイムラインが 1 つのみの場合、集約はスキップされます。
補間
複数のタイムラインをマージする場合、特定のタイムスタンプで値が欠落しているタイムラインには、フィルポリシーが指定されておらず、かつ他のタイムラインの少なくとも 1 つがそのタイムスタンプで値を持つ場合に限り、補間値が割り当てられます。
たとえば、{"downsample": "10s-avg", "aggregator": "sum"} を使用して 2 つのタイムラインをマージする場合:
タイムライン 1 には
t+0、t+10、t+20、t+30に値があります。タイムライン 2 には
t+0、t+20、t+30に値があります。
集約前に、TSDB はタイムライン 2 の t+10 に対して補間値を計算します。補間方法は集約関数によって異なります。
| 演算子 | 説明 | 補間方法 |
|---|---|---|
avg | 平均値 | 線形補間 |
count | データポイント数 | 0 を補間 |
mimmin | 最小値 | 最大値を補間 |
mimmax | 最大値 | 最小値を補間 |
min | 最小値 | 線形補間 |
max | 最大値 | 線形補間 |
none | 集約をスキップ | 0 を補間 |
sum | 値の合計 | 線形補間 |
zimsum | 値の合計 | 0 を補間 |
パラメーター: filters
filters パラメーターは、タグベースのフィルター処理を行うための JSON フィルター・オブジェクトのリストを受け入れます。tags パラメーターとは相互排他です。
フィルター・オブジェクトのパラメーター
| パラメーター | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
type | 文字列 | はい | — | フィルターの種類です。詳細については、「フィルターの種類」をご参照ください。例:literal_or。 |
tagk | 文字列 | はい | — | フィルター対象のタグキーです。例:host。 |
filter | 文字列 | はい | — | フィルター式です。例:web01|web02。 |
groupBy | ブール値 | いいえ | false | 一致したタグ値に対して GROUP BY 操作を実行するかどうかを指定します。 |
また、サブクエリ内で簡易タグ式を直接使用することもできます。
tagk = *:タグキーのすべての値に対して GROUP BY を実行します。tagk = tagv1|tagv2:tagv1の値とtagv2の値をそれぞれ個別に集約します。
フィルターの種類
| フィルターの種類 | 例 | 説明 |
|---|---|---|
literal_or | web01|web02 | | で区切られた正確なタグ値に一致します。大文字小文字を区別します。 |
wildcard | *.example.com | ワイルドカードパターンを使用してタグ値に一致します。大文字小文字を区別します。 |
フィルターなしの例
{
"start": 1356998400,
"end": 1356998460,
"queries": [
{
"aggregator": "sum",
"metric": "sys.cpu.0",
"rate": "true",
"tags": {
"host": "*",
"dc": "lga"
}
}
]
}フィルターありの例
{
"start": 1356998400,
"end": 1356998460,
"queries": [
{
"aggregator": "sum",
"metric": "sys.cpu.0",
"rate": "true",
"filters": [
{
"type": "wildcard",
"tagk": "host",
"filter": "*",
"groupBy": true
},
{
"type": "literal_or",
"tagk": "dc",
"filter": "lga|lga1|lga2",
"groupBy": false
}
]
}
]
}パラメーター: hint
クエリヒントは、クエリ実行時に TSDB がどのタグキーインデックスを使用するかを制御することで、応答時間を短縮します。たとえば、タグセット B で一致する時系列がタグセット A で一致する時系列の部分集合である場合、TSDB にタグセット A のインデックスを読み取るオーバーヘッドを回避させ、B のみのインデックスを使用するよう指示できます。
hint パラメーターは、最上位レベル(クエリ全体に適用)またはサブクエリ内(そのサブクエリにのみ適用)のいずれかで設定できます。
現在の TSDB バージョンでは、ヒント内での tagk パラメーターのみがサポートされています。フォーマット
tagk マップ内では、各タグキーをインデックス使用の有無に応じて 1 または 0 に設定します。すべての値は 0 または 1 のいずれかでなければならず、同一のヒント内で両方を混在させるとエラーになります。
バージョン要件: TSDB v2.6.1 以降。
サブクエリに適用されるヒント
{
"start": 1346846400,
"end": 1346846400,
"queries": [
{
"aggregator": "none",
"metric": "sys.cpu.nice",
"tags": {
"dc": "lga",
"host": "web01"
}
}
],
"hint": {
"tagk": {
"dc": 1,
"host": 0
}
}
}クエリ全体に適用されるヒント
{
"start": 1346846400,
"end": 1346846400,
"queries": [
{
"aggregator": "none",
"metric": "sys.cpu.nice",
"tags": {
"dc": "lga",
"host": "web01"
}
}
],
"hint": {
"tagk": {
"dc": 1
}
}
}エラー事例
0 と 1 の混在
以下のリクエストは、dc が 1 で host が 0 であるためエラーになります。
{
"start": 1346846400,
"end": 1346846400,
"queries": [
{
"aggregator": "none",
"metric": "sys.cpu.nice",
"tags": {
"dc": "lga",
"host": "web01"
}
}
],
"hint": {
"tagk": {
"dc": 1,
"host": 0
}
}
}エラー応答:
{
"error": {
"code": 400,
"message": "ヒントの値は 0 または 1 のみであり、0 と 1 の両方が存在してはなりません。",
"details": "TSQuery(start_time=1346846400, end_time=1346846400, subQueries[TSSubQuery(metric=sys.cpu.nice, filters=[filter_name=literal_or, tagk=dc, literals=[lga], group_by=true, filter_name=literal_or, tagk=host, literals=[web01], group_by=true], tsuids=[], agg=none, downsample=null, ds_interval=0, rate=false, rate_options=null, delta=false, delta_options=null, top=0, granularity=null, granularityDownsample=null, explicit_tags=explicit_tags, index=0, realTimeSeconds=-1, useData=auto, limit=0, offset=0, dpValue=null, preDpValue=null, startTime=1346846400000, endTime=1346846400000, Query_ID=null)] padding=false, no_annotations=false, with_global_annotations=false, show_tsuids=false, ms_resolution=false, options=[])"
}
}0 または 1 以外の値
{
"start": 1346846400,
"end": 1346846400,
"queries": [
{
"aggregator": "none",
"metric": "sys.cpu.nice",
"tags": {
"dc": "lga",
"host": "web01"
}
}
],
"hint": {
"tagk": {
"dc": 100
}
}
}エラー応答:
{
"error": {
"code": 400,
"message": "ヒントの値は 0 または 1 のみであり、'100' が渡されたことが検出されました。",
"details": "TSQuery(start_time=1346846400, end_time=1346846400, subQueries[TSSubQuery(metric=sys.cpu.nice, filters=[filter_name=literal_or, tagk=dc, literals=[lga], group_by=true, filter_name=literal_or, tagk=host, literals=[web01], group_by=true], tsuids=[], agg=none, downsample=null, ds_interval=0, rate=false, rate_options=null, delta=false, delta_options=null, top=0, granularity=null, granularityDownsample=null, explicit_tags=explicit_tags, index=0, realTimeSeconds=-1, useData=auto, limit=0, offset=0, dpValue=null, preDpValue=null, startTime=1346846400000, endTime=1346846400000, Query_ID=null)] padding=false, no_annotations=false, with_global_annotations=false, show_tsuids=false, ms_resolution=false, options=[])"
}
}パラメーター: forecasting
過去の時系列データに対する AI トレーニングを用いて、将来のデータポイントを予測します。TSDB は既存のデータをトレーニングし、トレンドおよび周期性を特定したうえで、将来の値を投影します。
フォーマット
<AlgorithmName>-<ForecastPointCount>[-<ForecastPolicy>]サポートされるアルゴリズム
`arima` — AutoRegressive Integrated Moving Average(ARIMA)。ARIMA の
ForecastPolicyには 2 つのフィールドがあります。delta:差分次数。デフォルト値:1。データの変動を抑えるために増加させることができます。seasonality:データポイント数単位の周期長。デフォルト値:1。データの自然な周期に合わせて設定してください(例:データが 10 ポイントごとに変動する場合、10)。
`holtwinters` — Holt-Winters 指数平滑化。Holt-Winters の
ForecastPolicyには 1 つのフィールドがあります。seasonality:ARIMA と同様です。デフォルト値:1。
例: arima-1、arima-48-1-48、holtwinters-1-1
例
既存のシリーズデータ:
[
{
"metric": "sys.cpu.nice",
"tags": {"dc": "lga", "host": "web00"},
"aggregateTags": [],
"dps": {
"1346837400": 1,
"1346837401": 2,
"1346837402": 3,
"1346837403": 4,
"1346837404": 5,
"1346837405": 6,
"1346837406": 7,
"1346837407": 8,
"1346837408": 9,
"1346837409": 10,
"1346837410": 11,
"1346837411": 12
}
}
]クエリ:
{
"start": 1346837400,
"end": 1346847400,
"queries": [
{
"aggregator": "none",
"metric": "sys.cpu.nice",
"forecasting": "arima-1"
}
]
}予測結果(1 つの追加データポイントが付与されます):
[
{
"metric": "sys.cpu.nice",
"tags": {"dc": "lga", "host": "web00"},
"aggregateTags": [],
"dps": {
"1346837400": 1,
"1346837401": 2,
"1346837402": 3,
"1346837403": 4,
"1346837404": 5,
"1346837405": 6,
"1346837406": 7,
"1346837407": 8,
"1346837408": 9,
"1346837409": 10,
"1346837410": 11,
"1346837411": 12,
"1346837412": 13
}
}
]パラメーター: abnormaldetect
STL(Seasonal-Trend decomposition using Loess)アルゴリズムを用いて、時系列内の異常を検出します。TSDB は既存のデータをトレーニングし、パターンを特定したうえで、期待範囲から大きく逸脱したデータポイントをフラグ付けします。
フォーマット
<AlgorithmName>[-<Sigma>-<NP>-<NS>-<NT>-<NL>]現在サポートされているのは STL アルゴリズムのみです。STL のパラメーター調整に慣れていない場合は、パラメーター項目を省略してデフォルト値を使用してください。
パラメーター
| パラメーター | 説明 |
|---|---|
AlgorithmName | アルゴリズム名です。stl を使用します。 |
Sigma | 異常のしきい値です。データポイントの値と時系列の平均値との絶対差が Sigma × 標準偏差を超える場合、そのデータポイントは異常と見なされます。典型的な値:3.0。 |
NP | 1 サイクルあたりのデータポイント数です。 |
NS | 季節成分の平滑化パラメーターです。 |
NT | トレンド成分の平滑化パラメーターです。 |
NL | ローパスフィルターの平滑化パラメーターです。 |
例
"abnormaldetect": "stl""abnormaldetect": "stl-5-5-7-0-0"クエリ例
{
"start": 1346836400,
"end": 1346946400,
"queries": [
{
"aggregator": "none",
"metric": "sys.cpu.nice",
"abnormaldetect": "stl-5-5-7-0-0",
"filters": [
{
"type": "literal_or",
"tagk": "dc",
"filter": "lga",
"groupBy": false
},
{
"type": "literal_or",
"tagk": "host",
"filter": "web00",
"groupBy": false
}
]
}
]
}異常検出の出力
dps 内の各値は、以下の形式の配列です。
[srcValue, upperValue, lowerValue, predictValue, isAbnormal]| フィールド | 説明 |
|---|---|
srcValue | 元のデータポイントの値です。 |
upperValue | 期待範囲の上限値です。 |
lowerValue | 期待範囲の下限値です。 |
predictValue | STL アルゴリズムによって予測された値です。 |
isAbnormal | 0:正常。1:異常。 |
出力例
[
{
"metric": "sys.cpu.nice",
"tags": {"dc": "lga", "host": "web00"},
"aggregateTags": [],
"dps": {
"1346837400": [1, 1.0000000000000049, 0.9999999999999973, 1.0000000000000013, 0],
"1346837401": [2, 2.0000000000000036, 1.9999999999999958, 1.9999999999999998, 0],
"1346837402": [3, 3.0000000000000036, 2.9999999999999956, 3, 0],
"1346837403": [4, 4.0000000000000036, 3.9999999999999956, 4, 1],
"1346837404": [5, 5.0000000000000036, 4.9999999999999964, 5, 0],
"1346837405": [6, 6.000000000000002, 5.999999999999995, 5.999999999999998, 0],
"1346837406": [7, 7.0000000000000036, 6.9999999999999964, 7, 1],
"1346837407": [8, 8.000000000000004, 7.9999999999999964, 8, 0],
"1346837408": [9, 9.000000000000004, 8.999999999999996, 9, 0],
"1346837409": [10, 10.000000000000004, 9.999999999999996, 10, 0],
"1346837410": [11, 11.000000000000005, 10.999999999999998, 11.000000000000002, 0],
"1346837411": [12, 12.000000000000004, 11.999999999999996, 12, 0]
}
}
]