メトリクス加工
MXQL構文を使用してメトリクスを操作するコマンドについて説明します。行列処理ステップは、検索されたデータが各ステップを順次実行する構成です。したがって、この手順に含まれるコマンドの順序が重要です。
コマンド | 機能 |
---|---|
ROWNUM | 行番号フィールドを追加します。 |
SELECT | フィールドを選択します。選択されていないフィールドは検索されません。 |
CREATE | フィールドを追加します。 |
DELETE | フィールドを削除します。 |
RENAME | フィールド名を変更します。 |
GROUP | データをグループ化します。 |
ORDER | データをソートします。 |
JOIN | 他のMQLで取得したデータを本データにカラム単位で追加するときに使用します。 |
UPDATE | データの加工とクリーニング。 |
LIMIT | 抽出されるデータの数を制限します。 |
SKIP | その場所で検索される一部のデータを無視します。 |
FILTER-KEYS | 特定のデータを含む、データのみを抽出します。 |
FIRST-ONLY | データのうち、最初のデータのみ送られ、残りは破棄されます。 |
TIME-FILTER | 特定の時間にデータをスキップするときに使用します。 |
INJECT | その場所にMXQLクエリを追加します。 |
ADJUST | 数値フィールドの値を変更するために使用します。 |
FILTER | 特定の条件を持つデータのみが次のステップに渡されます。 |
ROWNUM
行番号フィールドを追加します。
CATEGORY agent_list
FLEXLOAD
ROWNUM
SELECT
フィールドを選択します。選択されていないフィールドは、次の手順に渡されません。
オプション名 | オプション機能 |
---|---|
default | like 、notlike に関係なく、照会したいフィールドを設定します。 |
like | 設定値を部分文字列として持つフィールドのみが表示されます。 |
notlike | 設定値を部分文字列として持たないフィールドのみが検索されます。 |
-
すべてのフィールドが選択されている場合は、1 (
SELECT
コマンド、オペランド両方を入力していない場合)CATEGORY app_counter
TAGLOAD -
すべてのフィールドが選択されている場合は、2 (
SELECT
コマンドのオペランドを入力されていない場合)CATEGORY app_counter
TAGLOAD
SELECT -
照会するフィールド名を設定する場合は、文字列配列のオペランドを使用します。
CATEGORY app_counter
TAGLOAD
SELECT [time, pcode] -
default
に設定するフィールドの値が1つしかなく、like
オプションを使用する場合CATEGORY app_counter
TAGLOAD
SELECT {default:time, like:_m} -
default
に設定するフィールドの値が複数ある場合、like
オプションを使用する場合、default
として設定するフィールドの値が複数ある場合とlike
オプションを使用する場合CATEGORY app_counter
TAGLOAD
SELECT {default:[time,name], like:_m} -
like
とnotlike
の両方を使いたい場合は、SELECT
コマンドを2回入力する必要があります。CATEGORY app_counter
TAGLOAD
SELECT {default:[time,name], like:name}
SELECT {notlike:pname}
- フィールド全体を選択する場合、オペランドを入力されません。
like
とnotlike
は同時に設定することができません。 複数のSELECT
時間に設定する必要があります。
SELECT
コマンドは、出力フィールドの順序を変更するときに使用します。
CREATE
フィールドを追加します。
オプション名 | オプション機能 |
---|---|
value | 特定の値を持つフィールドを作成 |
from | 特定の値を持つフィールドを作成します。 |
expr | 入力した数式の結果を値として、フィールドを作成します。数式には、フィールド名を使用します。 |
oname | oid カラム名を設定しoid 値に対応するoname 値のカラムを作成します。 |
okind | okind カラム名を設定して、okind 値に対応するokind name 値のカラムを作成します。 |
onode | onode カラム名を設定して、onode 値に対応するonode name 値のカラムを作成します。 |
-
value
属性を設定する場合CATEGORY app_counter
TAGLOAD
CREATE {key:active$, value:'#'} -
from
属性を設定する場合CATEGORY app_counter
TAGLOAD
CREATE {key:_id_, from:okind } -
expr
属性を設定する場合CATEGORY app_counter
TAGLOAD
CREATE { key:apdex, expr:" (apdex_satisfied(apdex_tolerated*0.5))/apdex_total " } -
okind
属性を設定する場合CATEGORY agent_list
FLEXLOAD
CREATE { key : my_okind_name, okind : okind}
SELECT [ time, okind, okindName, my_okind_name]
DELETE
フィールドを削除します。
CATEGORY app_counter
TAGLOAD
DELETE [pcode]
文字列の配列で入力する必要があります。DELETE
pcode
は動作しません。 (2021-06-23時点)
RENAME
フィールド名を変更します。
-
pcode
フィールド名をmy_pcode
に変更します。CATEGORY app_counter
TAGLOAD
RENAME { src : pcode, dst : my_pcode }
time
は、ORDER
で使用されるソート基準あり、time
の名前を任意に変更すると、ORDERが機能しない場合があります。
GROUP
データをグループ化します。
オプション名 | オプション機能 |
---|---|
timeunit | グループを分割する時間のしきい値を設定します。 |
pk or primaryKey | グループのprimaryKey を設定します。 |
last | 設定したカラム(column)のデータの最後の値のみを保存する場合に設定します。oname のように繰り返して同じ値を使用する場合に使用します。内部で設定した値は、key値に上書きされます。 |
listup | 設定したカラム(column)のデータをすべてメモリに保存する場合に設定します。内部で設定した値は、key値としてListに継続的に追加されます。 |
ユーザー | リアルタイムユーザーを計算するためのオプションです。Blobタイプのデータを保存するカラム(column)を設定できます。(app_user カテゴリのlogbits など) |
merge | 設定したカラム(column)のデータをMetricValue(複合値)として保存する場合に設定します。内部的には、設定値をkeyとしてMetric Value値に追加されます。 |
rows | 1つのグループで保存できるデータの最大数を設定します。既定値は10000 です。 |
-
設定したフィールドを
merge
に設定し、MetricValue に設定し、sum演算を実行します。CATEGORY app_counter
TAGLOAD
SELECT [ time, okindName, okind, apdex_satisfied, apdex_tolerated, apdex_total]
GROUP { timeunit:5000, pk:okind, last:okindName, merge:[apdex_satisfied, apdex_tolerated, apdex_total] }
UPDATE { key:[apdex_satisfied, apdex_tolerated, apdex_total], value:sum }
原則としてmerge
フィールドは個別に設定する必要があります。ただし、last
、merge
、listup
の3つの属性をすべて指定されていない場合は、すべてのnumber
フィールドはmerge
フィールドに、number
フィールドではないフィールドはlast
フィールドに自動的に選択されます。
もし、レコードにtime
フィールドがない場合は、全体をグループ化します。
GROUP
コマンドが実行される前に、SELECT
コマンドでtime
フィールドが設定されていない場合RENAME
コマンドでtime
フィールド名を変更した場合DELETE
コマンドでtime
フィールドを削除した場合
UPDATE
フィールドのデータを変更します。MetricValueの状態のフィールドに対して操作を選択できます。
オプション | 機能 |
---|---|
sum | MetricValueに含まれる、値を追加します。 |
min | MetricValueに保存されている最小値を検索します。 |
max | MetricValueに含まれる、最大値を検索します。 |
last | MetricValueに含まれる、最後の値を取得します。 |
avg | MetricValueに含まれる値の平均を求めます。 |
cnt | MetricValueに含まれる値の数を検索します。 |
datetime | 時刻データの形式を変更します。 |
timezone | 時間データの基準を設定します。 |
notnull | 設定したカラムの値がnull の場合、適用するdefault の値を設定します。 |
pct | GROUP コマンドの実行時percentile のフィールドのすべての値をlistupした場合は、percentile 値をフィールド値に変更できます。 |
decimal | フィールドの数値データを書式設定できます。 |
次のオプションを設定してデータの値を変更します。
-
value
オプションを設定する場合CATEGORY app_counter
TAGLOAD
SELECT [time, pcode,pname, tps]
GROUP {timeunit:5000, pk:pcode, last: pname, merge:tps}
UPDATE {key:tps, value:sum} -
datetime
、timezone
オプションを設定する場合は、CREATE {key:localtime, from:time}
でtime
フィールドの値の'long'タイプの値でコピーします。CATEGORY app_user
TAGLOAD
SELECT [time, pcode, pname, logbits]
CREATE {key:localtime, from:time}
UPDATE {key:localtime, datetime:'yyyyMMdd HH:mm:ss', timezone: GMT9} -
notnull
オプションを設定する場合UPDATE {key:tps, notnull:0}
-
pct
を設定する場合CATEGORY app_counter
TAGLOAD
SELECT [ time, pcode, tx_count ]
GROUP { key : pcode, listup : tx_count}
UPDATE { key : tx_count, pct : 90} -
decimal
オプションを設定する場合CATEGORY app_counter
TAGLOAD
SELECT [ time, oname, apdex_satisfied, apdex_tolerated, apdex_total]
GROUP { timeunit:5m, pk:oname}
UPDATE { key:[apdex_satisfied, apdex_tolerated, apdex_total], value:sum }
CREATE { key:apdex, expr:" (apdex_satisfied(apdex_tolerated/2.0))/apdex_total " }
UPDATE { key:time, datetime:'yyyyMMdd HH:mm:ss', timezone:'GMT9'}
UPDATE { key:apdex, decimal:'0.000'}
ROWNUM
{datetime:'yyyyMMdd HH:mm:ss'}
の場合は、コロン(:)を含んでいるため、必ずバッククォート('')またはダブルクォート("")で囲む必要があります。pct: 90
は、90番目の値を選択することを意味します。ただし、このフィールドはGROUP
コマンド実行時に、listup
フィールドに設定する必要があります。- formatの形式は、Java, Decimal Formatを使います。
ORDER
データをソートします。
オプション | 機能 |
---|---|
key | ソートするフィールドを選択します。 |
sort | ソートしたdirectionを設定します。(ascまたはdesc) |
rows | 同じ時間値を持つデータを保持する最大数を設定します。default 10000 |
-
key
、sort
、rows
を設定する場合CATEGORY app_counter
TAGLOAD
SELECT [time, pname, host_ip, pid, httpc_count]
ORDER {key: [pid, host_ip, httpc_count] , sort: [desc, desc, desc], rows:2} -
2回に分けてソートする場合
CATEGORY app_counter
TAGLOAD
SELECT [time, pname, host_ip, pid, httpc_count]
ORDER {key: [pid, host_ip, httpc_count] , sort: [desc, desc, desc], rows:1000}
ORDER {key:tps, sort:desc}
データにtime
フィールドが含まれている場合、ORDER
のkeyにtime
が含まれていなくても、time
がソートの主な基準となります。
JOIN
JOIN
コマンドを説明する前に、joinの概念を見てみましょう。 joinは、2つのクエリの結果を結合するために使用します。このとき、2つのクエリの結果に基づいてどのフィールドに基準を合わせるかの情報を伝える必要があります。このフィールドをpk
またはprimaryKey
といいます。
Time | Oid | Fields | |||
---|---|---|---|---|---|
2021-06-30 15:30:00 | 2031382584 | field_name_1 | field_name_2 | field_name_3 | field_name_4 |
sampleData | 123 | 2.543 | testData |
Time | Oid | Fields | |||
---|---|---|---|---|---|
2021-06-30 15:30:00 | 2031382584 | field_name_4 | field_name_5 | field_name_6 | field_name_7 |
testData | myData | testData | myData |
Time | Oid | Fields | ||||||
---|---|---|---|---|---|---|---|---|
2021-06-30 15:30:00 | 2031382584 | field_name_1 | field_name_2 | field_name_3 | field_name_4 | field_name_5 | field_name_6 | field_name_4 |
sampleData | 123 | 2.543 | testData | myData | testData | myData |
表1と表2はクエリの結果を表示し、pk
と設定したfile_name_4
フィールドは青で表示します。表3はpk
に設定したfile_name_4
を基準に、2つのクエリの組み合わせ結果を意味します。
2つのMXQLを組み合わせて表示したデータを見ることができます。RENAME
コマンドとINJECT
コマンドは、JOIN
コマンドを実行した結果を処理し、結合の操作に影響しません。
- 最初のクエリ : CATEGORY agent_list FLEXLOAD
- 2番目のクエリ : /app/act_tx/act_tx_oid
CATEGORY agent_list
FLEXLOAD
JOIN {query:'/app/act_tx/act_tx_oid', pk:oid, field:[act0,act3,act8, act] }
RENAME {src:[act0, act3, act8, act], dst:[normal, slow, verySlow, total]}
INJECT default
サンプルクエリの結果の例は、次のとおりです。
Time | Oid | Fields | |||||||
---|---|---|---|---|---|---|---|---|---|
2021-06-30 15:30:00 | 2031382584 | pcode | pname | ... | type | act0 | act3 | act8 | act |
sampleData | 123 | ... | testData | 0 | 1 | 0 | 1 |
CATEGORY agent_list
FLEXLOAD
JOIN {query:'/app/act_tx/act_tx_oid', pk:oid, field:[act0,act3,act8,act] }
Yardに保存されているすべてのデータはtime
、oid
の値があります。いつ(time
) どのエージェント(oid
)から収集した情報であるかを表すためです。これらのフィールドはpk
として使用できます。
JOIN
コマンドに使用される最初のクエリは直接作成したMXQLクエリ、2番目のクエリはpathに設定できるクエリです。JOIN
コマンドを使用してMXQLクエリ全体をYardにファイルとして登録する場合、3つ以上のカテゴリがJOIN
できます。
LIMIT
抽出するデータの数を制限します。最初から設定したデータ数を、次のステップに渡します。
最初に抽出された3つデータを出力します。
CATEGORY app_counter
TAGLOAD
LIMIT 3
SKIP
前の手順で受信したデータの一部を無視します。
1~5 番目のデータは除外し、6番目のデータは、10個表示されます。
CATEGORY app_counter
TAGLOAD
SKIP 5
LIMIT 10
FILTER-KEYS
特定のデータを含む、データのみを抽出します。
CATEGORY app_counter
TAGLOAD
FILTERKEYS {keys : [oid], values : [497765289]}
key
、value
ではなくkeys
、values
です。複数形のsに注意してください。
FIRST-ONLY
特定のデータ(ペア)を持つ最初のデータのみ、次のステップに渡します。
CATEGORY app_counter
TAGLOAD
FIRST-ONLY {key:oid}
CATEGORY app_counter
TAGLOAD
FIRST-ONLY {key: [httpc_count, type]}
SELECT [httpc_count, type]
CATEGORY app_counter
TAGLOAD
FIRST-ONLY [httpc_count, type]
SELECT [httpc_count, type]
データの読み込み段階で{backward : true}
を使用した場合、このコマンドの結果が異なる場合があります。
TIME-FILTER
特定の時間にデータをスキップするときに使用します。
オプション | 機能 |
---|---|
time | yyyy/MM/dd HH:mm:ss に設定します。設定した時間を基準にduration:1000 を設定します。(設定時間1000msのデータを除く) |
date | yyyy/MM/dd に設定する必要があります。設定した時間にduration:d1に設定します。(設定時間で1日分のデータを除外) |
durationまたはdur | フィルタリング範囲を設定します。(d1 : 1日、h1 : 1時間、m1 、m5 、m10 : 1分、5分、10分、number : millisec) |
timezone | データのタイムゾーンを設定します。(例:'GMT9 ') |
gmt | データのタイムゾーンを設定します。(例:9 または-9 ) |
CATEGORY app_counter
TAGLOAD
TIME-FILTER { date:'2020/07/28' , timezone:'GMT9'}
CATEGORY app_counter
TAGLOAD
TIME-FILTER {time:'2021/06/22 00:00:00', gmt:9 }
INJECT
その場所にMXQLクエリを追加します。
default
の場所にinjectされるMXQLクエリを渡す必要があります。
CATEGORY app_counter
TAGLOAD
SELECT
INJECT default
ROWNUM
フロント側で、INJECT
コマンドのオペランドにマッピングされる情報を渡す必要があります。次の例では、キーがdefault
に設定された値を追加します。
サイトマップ > MXQL Data参照'でINJECT値を渡す例
ADJUST
数値フィールドの値を変更するために使用します。(time
値は変更できません。)
オプション名 | オプション機能 |
---|---|
add | すべての数字データに値を追加します。 |
sub | すべての数字データから値を減算します。 |
mul | すべての数値データに値を乗算します。 |
div | すべての数値データから値を除算します。 |
over | すべての数字データの最小値を設定します。 |
under | すべての数値データの最大値を設定します。 |
-
mul
を設定する場合CATEGORY app_counter
TAGLOAD
SELECT
ADJUST {mul : 100} -
over
を設定する場合CATEGORY app_counter
TAGLOAD
SELECT
ADJUST { key:[rate], over:30} -
under
を設定する場合ADJUST { key:[rate], under:30}
FILTER
特定の条件を持つデータのみが次のステップに渡されます。
オプション名 | オプション機能 |
---|---|
expr | 条件を数式として入力します。 |
value | 特定の値を持つデータを検索します。 |
exist | 値を持つデータを検索します。 |
notexist | 値を持たないデータを探します。 |
over | 特定の値以上のデータを検索します。(greaterまたはequal to) |
under | 特定の値以下のデータを検索します。(lessまたはequal to) |
-
expr
オプションを適用する場合CATEGORY app_counter
TAGLOAD
SELECT
FILTER {expr : "tx_count != 0"} -
value
オプションを適用する場合CATEGORY app_counter
TAGLOAD
SELECT
FILTER { key : tx_count, value : 5} -
exist
オプションを適用する場合CATEGORY app_counter
TAGLOAD
SELECT
FILTER { key : tx_count, exist : true} -
notexist
オプションを適用する場合CATEGORY app_counter
TAGLOAD
SELECT
FILTER { key : tx_count, notexist : true} -
under
オプションを適用する場合CATEGORY app_counter
TAGLOAD
SELECT
FILTER { key : tx_count, under : 6}
- データが0の場合、データは存在する場合があります。
{exist: true}
に適用されます。 {exist : false}
と{notexist : false}
はできません。{notexist : true}
と{exist : true}
を使用してください。