本文へスキップ

メトリクス加工

MXQL構文を使用してメトリクスを操作するコマンドについて説明します。行列処理ステップは、検索されたデータが各ステップを順次実行する構成です。したがって、この手順に含まれるコマンドの順序が重要です。

コマンド機能
ROWNUM行番号フィールドを追加します。
SELECTフィールドを選択します。選択されていないフィールドは検索されません。
CREATEフィールドを追加します。
DELETEフィールドを削除します。
RENAMEフィールド名を変更します。
GROUPデータをグループ化します。
ORDERデータをソートします。
JOIN他のMQLで取得したデータを本データにカラム単位で追加するときに使用します。
UPDATEデータの加工とクリーニング。
LIMIT抽出されるデータの数を制限します。
SKIPその場所で検索される一部のデータを無視します。
FILTER-KEYS特定のデータを含む、データのみを抽出します。
FIRST-ONLYデータのうち、最初のデータのみ送られ、残りは破棄されます。
TIME-FILTER特定の時間にデータをスキップするときに使用します。
INJECTその場所にMXQLクエリを追加します。
ADJUST数値フィールドの値を変更するために使用します。
FILTER特定の条件を持つデータのみが次のステップに渡されます。

ROWNUM

行番号フィールドを追加します。

Example
CATEGORY agent_list
FLEXLOAD
ROWNUM

SELECT

フィールドを選択します。選択されていないフィールドは、次の手順に渡されません。

オプション名オプション機能
defaultlikenotlikeに関係なく、参照したいフィールドを設定します。
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}
  • likenotlikeの両方を使いたい場合は、SELECTコマンドを2回入力する必要があります。

    CATEGORY app_counter
    TAGLOAD
    SELECT {default:[time,name], like:name}
    SELECT {notlike:pname}
注意
  • フィールド全体を選択する場合、オペランドを入力されません。
  • likenotlikeは同時に設定することができません。 複数のSELECT時間に設定する必要があります。
ノート

SELECTコマンドは、出力フィールドの順序を変更するときに使用します。

CREATE

フィールドを追加します。

オプション名オプション機能
value特定の値を持つフィールドを作成
from特定の値を持つフィールドを作成します。
expr入力した数式の結果を値として、フィールドを作成します。数式には、フィールド名を使用します。
onameoidカラム名を設定しoid値に対応するoname値のカラムを作成します。
okindokindカラム名を設定して、okind値に対応するokind name値のカラムを作成します。
onodeonodeカラム名を設定して、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

フィールドを削除します。

Example
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値に追加されます。
rows1つのグループで保存できるデータの最大数を設定します。既定値は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フィールドは個別に設定する必要があります。ただし、lastmergelistupの3つの属性をすべて指定されていない場合は、すべてのnumberフィールドはmergeフィールドに、numberフィールドではないフィールドはlastフィールドに自動的に選択されます。

注意

もし、レコードにtimeフィールドがない場合は、全体をグループ化します。

  • GROUPコマンドが実行される前に、SELECTコマンドでtimeフィールドが設定されていない場合
  • RENAME コマンドでtimeフィールド名を変更した場合
  • DELETEコマンドでtimeフィールドを削除した場合

UPDATE

フィールドのデータを変更します。MetricValueの状態のフィールドに対して操作を選択することができます。

オプション機能
sumMetricValueに含まれる、値を追加します。
minMetricValueに保存されている最小値を検索します。
maxMetricValueに含まれる、最大値を検索します。
lastMetricValueに含まれる、最後の値を取得します。
avgMetricValueに含まれる値の平均を求めます。
cntMetricValueに含まれる値の数を検索します。
datetime時刻データの形式を変更します。
timezone時間データの基準を設定します。
notnull設定したカラムの値がnullの場合、適用するdefaultの値を設定します。
pctGROUPコマンドの実行時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}
  • datetimetimezoneオプションを設定する場合は、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
  • keysortrowsを設定する場合

    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といいます。

TimeOidFields
2021-06-30 15:30:002031382584field_name_1field_name_2field_name_3field_name_4
sampleData1232.543testData
表1. JOINコマンドサンプルデータ - 1番目のクエリ結果(pk = field_name_4)
TimeOidFields
2021-06-30 15:30:002031382584field_name_4field_name_5field_name_6field_name_7
testDatamyDatatestDatamyData
表2. JOINコマンドサンプルデータ - 2番目のクエリ結果(pk = field_name_4)
TimeOidFields
2021-06-30 15:30:002031382584field_name_1field_name_2field_name_3field_name_4field_name_5field_name_6field_name_4
sampleData1232.543testDatamyDatatestDatamyData
表3. JOINコマンドサンプルデータ - 2つのクエリ結果をpkを基準にjoinした結果

表1表2はクエリの結果を表示し、pkと設定したfile_name_4フィールドは青で表示します。表3pkに設定した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

サンプルクエリの結果の例は、次のとおりです。

TimeOidFields
2021-06-30 15:30:002031382584pcodepname...typeact0act3act8act
sampleData123...testData0101
表4. サンプルクエリ結果
CATEGORY agent_list
FLEXLOAD
JOIN {query:'/app/act_tx/act_tx_oid', pk:oid, field:[act0,act3,act8,act] }
ノート

Yardに保存されているすべてのデータはtimeoidの値があります。いつ(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]}
注意

keyvalueではなくkeysvaluesです。複数形の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

特定の時間にデータをスキップするときに使用します。

オプション機能
timeyyyy/MM/dd HH:mm:ssに設定します。設定した時間を基準にduration:1000を設定します。(設定時間1000msのデータを除く)
dateyyyy/MM/ddに設定する必要があります。設定した時間にduration:d1に設定します。(設定時間で1日分のデータを除外)
durationまたはdurフィルタリング範囲を設定します。(d1: 1日、h1: 1時間、m1m5m10: 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値を渡す例

MXQL Data 参照

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}を使用してください。