메트릭스 가공
요약
명령어 |
기능 |
줄번호 필드를 추가합니다. |
|
필드를 선택합니다. 선택되지 않은 필드은 조회되지 않습니다. |
|
필드를 추가합니다. |
|
필드를 삭제합니다. |
|
필드의 이름을 변경합니다. |
|
데이터를 그룹화합니다. |
|
데이터를 정렬합니다. |
|
다른 MQL에서 조회한 데이터를 본 데이터에 칼럼단위로 추가할때 사용합니다. |
|
데이터를 가공, 정제합니다. |
|
추출되는 데이터의 수를 제한합니다. |
|
해당 위치에서 조회되는 일부 데이터를 무시합니다. |
|
특정 데이터를 가지고 있는 데이터만 추출합니다. |
|
데이터 중에서 처음 데이터만을 통과 시키고 나머지는 버립니다. |
|
특정시간의 데이터를 SKIP할때 사용합니다. |
|
해당 위치에 MXQL 쿼리를 추가합니다. |
|
숫자 필드의 값을 변경하기 위해 사용합니다. |
|
특정 조건을 가지고 있는 데이터만 다음 단계로 전달합니다. |
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로 설정할 필드의 값이 하나인 경우와 like 옵션을 사용하는 경우 CATEGORY app_counter TAGLOAD SELECT {default:time, like:_m}
-- default로 설정할 필드의 값이 여러개인 경우와 like 옵션을 사용하는 경우 CATEGORY app_counter TAGLOAD SELECT {default:[time,name], like:_m}
-- like와 notlike를 모두 사용하고 싶은 경우 SELECT <명령어>를 두 번에 나누어서 입력해야 합니다. CATEGORY app_counter TAGLOAD SELECT {default:[time,name], like:name} SELECT {notlike:pname}
-
주의사항 :
-
만약 전체 필드를 선택할때는 <오퍼랜드>를 입력하지 않습니다.
-
like와 notlike는 한 번에 지정할 수 없습니다. 여러 번의 SELECT에서 나누어서 지정해야 합니다.
-
NOTE : SELECT <명령어>는 출력되는 필드 순서를 변경할때도 사용합니다.
CREATE
-
기능 : 필드를 추가합니다.
-
옵션 :
옵션 이름 |
옵션 기능 |
value |
특정 값을 가지는 필드를 생성합니다. |
from |
지정한 필드의 값을 가지는 필드를 생성합니다. |
expr |
입력한 수식의 결과를 값으로 가지는 필드를 생성합니다. 수식에는 필드의 이름이 사용될 수 있습니다. |
oname |
oid 컬럼의 이름을 지정하여, oid값에 대응되는 oname의 값을 가지는 컬럼을 생성합니다. |
okind |
okid 컬럼의 이름을 지정하여, okid값에 대응되는 okind name의 값을 가지는 컬럼을 생성합니다. |
onode |
onode 컬럼의 이름을 지정하여, onid값에 대응되는 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에 계속 값이 추가됩니다. |
user |
실시간 사용자를 계산하기 위한 옵션입니다. Blob 타입의 데이터를 저장한 column만 지정할 수 있습니다.(app_user 카테고리의 logbits 등) |
merge |
지정한 column의 데이터를 MetricValue(복합값)으로 저장하고 싶을 때 설정합니다. 내부적으로는 지정한 값을 key로 가지는 MetricValue값에 추가됩니다. |
rows |
하나의 그룹에 최대로 저장될 수 있는 데이터의 수를 지정합니다. 기본값은 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 세 가지 속성을 모두 명시하지 않은 경우에는 모든 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 값을 설정합니다. 필드값이 0인 컬럼은 본 < |
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: GMT+9}
-- 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:'GMT+9'} 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 or 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}
-- 두 번에 나누어서 정렬하는 경우 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은 두 쿼리문의 결과를 합쳐서 확인하기 위해서 사용합니다. 이 때 두 쿼리의 결과 중 어떤 필드를 기준으로 합칠지에 대한 정보를 전달해야하며, 이 필드를 pk 또는 primaryKey라고 합니다.



표1과 표2는 쿼리의 결과를 나타내며, pk로 지정된 file_name_4 필드는 파란색으로 표시되어 있습니다. 표3은 pk로 지정된 file_name_4를 기준으로 두 쿼리의 결과가 합쳐진 모습입니다.
-
기능 : 두 MXQL에서 조회한 데이터를 합쳐서 볼 수 있습니다.
-
예시 :
-- 첫 번째 쿼리 : CATEGORY agent_list FLEXLOAD -- 두 번째 쿼리 : /app/act_tx/act_tx_oid -- RENAME 과 INJECT는 JOIN <명령어>가 수행된 결과를 가공하는 과정으로 join의 동작에는 영향을 미치지 않습니다. 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

Yard에 저장되는 모든 데이터는 time, oid의 값을 가지고 있습니다. 언제(time) 어떤 에이전트로부터(oid) 수집된 정보인지를 나타내기 위함입니다. 이 필드들도 pk로 사용될 수 있습니다. |
-
주의사항 :
-
JOIN에 사용되는 첫 번째 쿼리는 직접 작성한 mxql 쿼리, 두 번째 쿼리는 path로 지정할 수 있는 쿼리(사전 정의 MXQL 쿼리문)만 가능합니다.
-
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
-
기능 : 특정시간의 데이터를 SKIP할때 사용합니다.
-
옵션 :
옵션
기능
time
"yyyy/MM/dd HH:mm:ss"로 지정합니다. 지정한 시간 기준 duration:1000가 설정됩니다. (지정한 시간 기준 1000ms동안의 데이터 제외)
date
"yyyy/MM/dd"로 지정해야합니다. 지정한 시간 기준 duration:d1이 같이 설정됩니다. (지정한 시간 기준 하루동안의 데이터 제외)
duration or dur
필터링 범위를 지정합니다.(d1: 1일, h1: 1시간 , m1,m5,m10: 1분,5분,10분 , 숫자: millisec)
timezone
데이터 타임존을 지정합니다. (ex 'GMT+9')
gmt
데이터 타임존을 지정합니다. (ex 9 or -9)
-
예시 :
CATEGORY app_counter TAGLOAD TIME-FILTER { date:'2020/07/28' , timezone:'GMT+9'}
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로 설정된 값을 추가합니다.
Figure 2. '사이트 맵 > MXQL 데이터 조회’에서 INJECT 값 전달하는 예시
-
ADJUST
-
기능 : 숫자 필드의 값을 변경하기 위해 사용합니다. (time 값은 변경할 수 없습니다.)
-
옵션 :
옵션 이름 |
옵션 기능 |
add |
모든 숫자 데이터에 값을 더합니다. |
sub |
모든 숫자 데이터에 값을 뺍니다. |
mul |
모든 숫자 데이터에 값을 곱합니다. |
div |
모든 숫자 데이터에 값을 나눕니다. |
over |
모든 숫자 데이터에 최소값을 설정합니다. |
under |
모든 숫자 데이터의 최대값을 설정합니다. |
-
예시 :
CATEGORY app_counter TAGLOAD SELECT ADJUST {mul : 100}
-- over를 설정하는 경우 CATEGORY app_counter TAGLOAD SELECT ADJUST { key:[tx_count, tx_time], over:1000}
-- under를 설정하는 경우 ADJUST { key:[rate,sum], under:30}
Figure 3. 지정한 값 이상으로 설정 : ADJUST { key:[rate], over:30}Figure 4. 지정한 값 이하로 설정 : ADJUST { key:rate, under:30}
FILTER
-
기능 : 특정 조건을 가지고 있는 데이터만 다음 단계로 전달합니다.
-
옵션 :
옵션 이름 |
옵션 기능 |
expr |
조건을 수식으로 입력합니다. |
value |
특정 값을 가지고 있는 데이터를 찾습니다. |
exist |
값이 있는 데이터를 찾습니다. |
notexist |
값이 없는 데이터를 찾습니다. |
over |
특정 값보다 같거나 큰 데잍러를 찾습니다.(greater or equal to) |
under |
특정 값보다 같거나 작은 데잍러를 찾습니다.(less or 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}
-- exist 옵션을 적용하는 경우 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}를 사용해주세요.
-