メトリクス加工
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}を使用してください。