본문으로 건너뛰기

3. 그래프 데이터 요청 API

이 장에서 하는 일

지표 데이터를 조회합니다. 이 가이드의 핵심이며, 콘솔 화면의 그래프에 쓰이는 값을 그대로 받아 올 수 있습니다.

요청 주소가 어떻게 만들어지나

주소는 무엇을 · 어느 대상에서 · 어떻게 집계할지를 경로에 차례로 적는 형태입니다.

지표 조회 주소의 구성

columns 를 여러 개 적으면 한 번의 요청으로 여러 지표를 함께 받습니다. 화면 하나에 여러 그래프를 그릴 때 요청 수를 줄일 수 있습니다.

조회 기간과 간격은 Query 파라미터로 지정합니다. 각 절의 요청 예시에 함께 실려 있습니다.

아래는 자주 쓰는 조회를 목적별로 정리한 것입니다. 필요한 것만 찾아보면 됩니다.

애플리케이션 그룹에 대한 통계 요청

그룹 전체를 하나로 묶어 본 값입니다. 그룹에 인스턴스가 여러 대면 집계 함수(aggregate)로 합쳐진 값이 옵니다 — 예를 들어 mean 이면 인스턴스들의 평균입니다.

인스턴스별로 나눠 보려면 다음 절의 인스턴스에 대한 통계 정보 요청을 쓰십시오.

아래는 모든 지표 조회에 공통인 요청 형식입니다. 실제 조회 예시는 이 장 뒤쪽에 목적별로 정리되어 있으므로, 형식만 익히고 필요한 예시를 찾아 쓰면 됩니다.

항목
URL/monitoring/api/metrics/apps/{appName}/{ns}/{name}/{columns}/{aggregate}
HTTP METHODGET
Content-Typeapplication/json

Path 파라미터

자리설명
{appName}애플리케이션 그룹 이름 (2장에서 얻습니다)
{ns}지표 네임스페이스
{name}지표 이름
{columns}받을 컬럼 이름. : 로 구분해 여러 개를 한 번에 요청합니다
{aggregate}집계 함수 — mean(평균) · sum(합계) · max(최대) · min(최소). : 로 구분해 컬럼 수만큼 적고, 하나만 적으면 모든 컬럼에 같은 함수를 씁니다

Query 파라미터

이름기본값설명
start필수조회 시작 시각. Unix Epoch 밀리초 (1970-01-01 00:00:00 UTC 기준)
end필수조회 종료 시각. 같은 형식입니다
interval데이터 간격(밀리초). 보통 5000(5초)을 씁니다
fill값이 없는 구간을 null 로 채웁니다
merge값이 여러 개일 때 하나의 Series 로 합칩니다
persecinterval 단위가 아니라 초 단위로 계산합니다. TPS 처럼 초 단위로 세는 지표에만 씁니다 (대시보드 전용)
historyfalseHistory 에 해당하는 데이터일 때 씁니다
clientTimefalse기본은 서버 시간 기준입니다. 요청에 적은 시간을 그대로 쓰려면 true 로 지정합니다
downGradefalse통계 데이터가 아니라 Raw 데이터에서 뽑을 때 true 로 지정합니다
exclusiontrue숨긴 에이전트를 뺀 목록에서 그룹을 찾습니다. 그룹 안의 에이전트가 모두 숨김·중단 상태면 그 그룹은 목록에서 사라져 조회가 실패합니다 — 이때는 false 로 지정하십시오
그룹 이름으로 조회했는데 오류가 난다면

{appName} 에 적은 그룹을 서버가 찾지 못하면 HTTP 500 이 돌아옵니다. 이름 오타 말고도 exclusion 기본값(true) 때문에 그룹이 목록에서 빠진 경우가 흔합니다 — 그룹 안의 에이전트가 모두 숨김·중단 상태면 그렇게 됩니다.

GET /monitoring/api/metrics/APP?exclusion=true 로 그 이름이 있는지 먼저 확인하고, 없으면 조회 요청에 &exclusion=false 를 붙이십시오.

인스턴스에 대한 통계 정보 요청

인스턴스 한 대의 값입니다. 주소에 호스트 IP 와 인스턴스 이름이 더 들어가는 것 말고는 위와 같습니다.

{ipAddr}{instanceId}* 를 넣으면 모든 대상을 뜻하며, 인스턴스별로 나뉜 결과가 한 번에 옵니다. 여러 대상을 고르려면 : 로 이어 씁니다 — 예: 192.168.0.1:192.168.0.2.

항목
URL/monitoring/api/metrics/graphs/{ipAddr}/{agentType}/{instanceId}/{ns}/{name}/{columns}/{aggregate}
HTTP METHODGET
Content-Typeapplication/json

Path 파라미터

자리설명
{ipAddr}대상 서버 IP. : 로 구분해 여러 개를 적을 수 있습니다
{agentType}에이전트 종류 — WAS(WAS 인스턴스) · WEB(웹 서버) · SYS(시스템)
{instanceId}인스턴스 ID. : 로 구분해 여러 개를 적을 수 있습니다
{ns}지표 네임스페이스
{name}지표 이름
{columns}받을 컬럼 이름. : 로 구분해 여러 개를 한 번에 요청합니다
{aggregate}집계 함수 — mean(평균) · sum(합계) · max(최대) · min(최소). : 로 구분해 컬럼 수만큼 적고, 하나만 적으면 모든 컬럼에 같은 함수를 씁니다

Query 파라미터

이름기본값설명
start필수조회 시작 시각. Unix Epoch 밀리초 (1970-01-01 00:00:00 UTC 기준)
end필수조회 종료 시각. 같은 형식입니다
interval데이터 간격(밀리초). 보통 5000(5초)을 씁니다
fill값이 없는 구간을 null 로 채웁니다
merge값이 여러 개일 때 하나의 Series 로 합칩니다
persecinterval 단위가 아니라 초 단위로 계산합니다. TPS 처럼 초 단위로 세는 지표에만 씁니다 (대시보드 전용)
historyfalseHistory 에 해당하는 데이터일 때 씁니다
clientTimefalse기본은 서버 시간 기준입니다. 요청에 적은 시간을 그대로 쓰려면 true 로 지정합니다
downGradefalse통계 데이터가 아니라 Raw 데이터에서 뽑을 때 true 로 지정합니다

통계 정보 응답

Response BodyResponse의 JSON 문자열의 내용은 다음 항목과 같습니다.
통계 정보[{"name":"*___*___*___*___apdex___maxRT:avgRT:minRT:count","start":1493457870000,"end":1493457880000,
"interval":"5s","columns":["time","maxRT","avgRT","minRT","count"],
"points":[[1493457870000,1493457875000],[7877.0,5752.0],[4436.5,2851.667],[0.0,0.0],[7.0,5.0]]}]
  • json 데이터 항목에 대한 설명
[
{
"name": "*___*___*___*___apdex___maxRT:avgRT:minRT:count", ← 이름
"start": 1493457870000, ← 시작시간(millisecond)
"end": 1493457880000, ← 종료시간(millisecond)
"interval": "5s", ← 데이터 간격
"columns": [ ← 데이터 컬럼 이름
"time",
"maxRT",
"avgRT",
"minRT",
"count"
],
"points": [ ← 데이터 항목
[ ← time 컬럼 데이터(millisecond)
1493457870000,
1493457875000
],
[ ← 첫번째 컬럼 maxRT데이터
7877,
5752
],
[ ← 두번째 컬럼 avgRT데이터
4436.5,
2851.667
],
[ ← 세번째 컬럼 minRT데이터
0,
0
],
[ ← 네번째 컬럼 count데이터
7,
5
]
]
}
]

애플리케이션 그룹별 평균 응답시간, 호출건수 정보

서비스가 느려졌다는 신고를 받았을 때 가장 먼저 보는 값입니다. 최대(maxRT) · 평균 (avgRT) · 최소(minRT) 응답시간과 호출건수(count)를 한 번의 요청으로 함께 받습니다.

네 값을 같이 봐야 원인이 좁혀집니다. 평균은 그대로인데 최대만 튀면 일부 요청만 느린 것이고 (특정 화면·특정 조회 조건), 평균까지 함께 오르면 전체가 느려진 것입니다. 호출건수가 같이 늘었다면 부하 때문이고, 호출건수는 그대로인데 느려졌다면 애플리케이션이나 연동 대상을 봐야 합니다.

요청

항목설명
URL/monitoring/api/metrics/apps/{appName}/{ns}/{name}/{columns}/{aggregate}
URL 요청 예시/monitoring/api/metrics/apps/front/NIL/apdex/maxRT:avgRT:minRT:count/max:mean:min:sum?start=1493457870000&end=1493457875000&interval=5000&fill=true&merge=true&persec=false
HTTP METHODGET
Content-Typeapplication/json

응답

[{"name":"*___*___*___*___apdex___maxRT:avgRT:minRT:count","start":1493457870000,"end":1493457880000,\
"interval":"5s","columns":["time","maxRT","avgRT","minRT","count"],"points":[[1493457870000,1493457875000],\
[7877.0,5752.0],[4436.5,2851.667],[0.0,0.0],[7.0,5.0]]}]

인스턴스별 평균 응답시간, 호출건수 정보

같은 값을 인스턴스 한 대 단위로 봅니다. 그룹 값이 나빠졌을 때 어느 대가 원인인지 좁히는 데 씁니다.

한 대만 느리면 그 인스턴스 고유의 문제(가비지 컬렉션, 디스크, 이웃 프로세스)이므로 그 대만 재기동하거나 부하에서 빼면 됩니다. 모든 대가 고르게 느리면 공통 원인(데이터베이스, 외부 연동, 네트워크)이므로 인스턴스를 늘려도 나아지지 않습니다.

요청

항목설명
URL/monitoring/api/metrics/graphs/{ipAddr}/{agentType}/{instanceId}/{ns}/{name}/{columns}/{aggregate}
URL 요청 예시/monitoring/api/metrics/graphs/192.168.23.113/WAS/front31/NIL/apdex/maxRT:avgRT:minRT:count/max:mean:min:sum?start=1493458160000&end=1493458165000&interval=5000&fill=true&merge=false
HTTP METHODGET
Content-Typeapplication/json

응답

[{"name":"NIL___192.168.23.113___WAS___front31___NIL___apdex","start":1493458160000,"end":1493458170000,\
"interval":"5s","columns":["time","maxRT","avgRT","minRT","count"],"points":[[1493458160000,1493458165000],\
[6290,7498],[4411,3706.5],[0,0],[4,5]]}]

애플리케이션 그룹별 액티브 사용자수

지금 서비스를 쓰고 있는 사용자 수입니다. 응답시간과 함께 놓고 봐야 판단이 됩니다 — 사용자가 늘면서 느려졌다면 용량 문제이고, 사용자는 그대로인데 느려졌다면 애플리케이션 문제입니다.

사내 상황판이나 일일 리포트에 그대로 올릴 수 있는 값이며, 이벤트·행사 기간의 실제 동시 사용자 수를 근거로 남길 때도 씁니다.

요청

항목설명
URL/monitoring/api/metrics/apps/{appName}/{ns}/{name}/{columns}/{aggregate}
URL 요청 예시/monitoring/api/metrics/apps/front/users/active/activeUser/mean?start=1493458395000&end=1493458400000&interval=5000&fill=true&merge=false&persec=false
HTTP METHODGET
Content-Typeapplication/json

응답

[{"name":"NIL___192.168.23.112___WAS___front21___users___active","start":1493458395000,"end":1493458405000,\
"interval":"5s","columns":["time","activeUser"],"points":[[1493458395000,1493458400000],[0,0]]},\
{"name":"NIL___192.168.23.113___WAS___front31___users___active","start":1493458395000,"end":1493458405000,\
"interval":"5s","columns":["time","activeUser"],"points":[[1493458395000,1493458400000],[6,6]]}]

애플리케이션 그룹별 APDEX

APDEX(Application Performance Index)는 응답시간을 만족 · 보통 · 불만 세 단계로 나눠 0~100 으로 환산한 점수입니다. 값이 클수록 좋습니다.

응답시간 밀리초를 그대로 보고하면 "1.2초가 괜찮은 값인가" 를 매번 따져야 하지만, APDEX 는 "90 이상 유지" 같은 목표를 세우기 쉬워 서비스 수준 목표(SLO) 지표로 자주 씁니다. 경영진 보고나 부서 간 합의 문서에 넣기 좋은 형태입니다.

요청

항목설명
URL/monitoring/api/metrics/apps/{appName}/{ns}/{name}/{columns}/{aggregate}
URL 요청 예시/monitoring/api/metrics/apps/front/NIL/apdex/apdex/mean?start=1493458395000&end=1493458400000&interval=5000&fill=true&merge=false&persec=false
HTTP METHODGET
Content-Typeapplication/json

응답

[{"name":"*___*___*___*___apdex___apdex","start":1496382935000,"end":1496382945000,"interval":"5s",\
"columns":["time","apdex"],"points":[[1496382935000,1496382940000],[null,null]]}]

인스턴스별 액티브 사용자수

인스턴스 한 대가 받고 있는 사용자 수입니다. 로드 밸런서가 트래픽을 고르게 나누고 있는지 확인할 때 씁니다.

한 대에만 사용자가 몰려 있으면 분배 알고리즘이나 세션 고정(sticky session) 설정을 점검합니다. 반대로 어느 한 대만 0 이면 헬스 체크에서 빠졌을 가능성이 있습니다.

요청

항목설명
URL/monitoring/api/metrics/graphs/{ipAddr}/{agentType}/{instanceId}/{ns}/{name}/{columns}/{aggregate}
URL 요청 예시/monitoring/api/metrics/graphs/192.168.23.113/WAS/front31/users/active/activeUser/mean?start=1493458305000&end=1493458310000&interval=5000&fill=true&merge=false
HTTP METHODGET
Content-Typeapplication/json

응답

[{"name":"NIL___192.168.23.113___WAS___front31___users___active","start":1493458300000,"end":1493458310000,\
"interval":"5s","columns":["time","activeUser"],"points":[[1493458300000,1493458305000],[6,6]]}]

애플리케이션 그룹별 오류율

전체 요청 건수 중 HTTP 응답 코드가 400·500 번대인 비율입니다. 처리 성공률이 필요하면 100 - 오류율 로 계산합니다.

배포 직후에 가장 많이 보는 값입니다. 배포 시각을 기준으로 앞뒤 구간을 조회해 오류율이 올랐는지 비교하면, 문제가 있는 배포를 사용자 신고보다 먼저 알아차리고 되돌릴 수 있습니다. 사내 배포 파이프라인에서 이 값을 확인해 기준을 넘으면 자동으로 배포를 중단하도록 연결하기도 합니다.

요청

항목설명
URL/monitoring/api/metrics/apps/{appName}/{ns}/{name}/{columns}/{aggregate}
URL 요청 예시/monitoring/api/metrics/apps/front/**/status/errorRate/mean?start=1493458515000&end=1493458520000&interval=5000&fill=true&merge=true&persec=false&sort=true
HTTP METHODGET
Content-Typeapplication/json

응답

[{"name":"*___*___*___*___status___errorRate","start":1493458515000,"end":1493458525000,"interval":"5s",\
"columns":["time","errorRate"],"points":[[1493458515000,1493458520000],[0.0,0.0]]}]

인스턴스별 오류율

같은 값을 인스턴스 한 대 단위로 봅니다. 계산 방법은 위와 같습니다.

순차 배포(rolling update) 중에 특히 쓸모가 있습니다. 새 버전을 받은 인스턴스만 오류율이 오르면 나머지 대에 배포하기 전에 멈출 수 있습니다. 전 대가 함께 오르면 배포가 아니라 공통 원인(데이터베이스, 외부 연동)을 봐야 합니다.

요청

항목설명
URL/monitoring/api/metrics/graphs/{ipAddr}/{agentType}/{instanceId}/{ns}/{name}/{columns}/{aggregate}
URL 요청 예시/monitoring/api/metrics/graphs/192.168.23.112/WAS/front21/**/status/errorRate/mean?start=1493463050000&end=1493463055000&interval=5000&fill=true&merge=false&sort=true
HTTP METHODGET
Content-Typeapplication/json

응답

[{"name":".*___(192.168.23.112)___(WAS)___(front21)___*___status","start":1493463050000,"end":1493463060000,\
"interval":"5s","columns":["time","errorRate"],"points":[[1493463050000,1493463055000],[null,null]]}]

인스턴스별 APDEX

APDEX 점수를 인스턴스 한 대 단위로 봅니다. 그룹 APDEX 가 목표를 밑돌 때 점수를 끌어내리는 인스턴스를 찾는 데 씁니다.

한 대만 낮으면 그 대를 부하에서 빼는 것으로 그룹 점수가 바로 회복됩니다. 자동 조치를 만들 때는 이 값을 주기적으로 조회해 기준 미만이면 알림을 보내는 식으로 씁니다.

요청

항목설명
URL/monitoring/api/metrics/graphs/{ipAddr}/{agentType}/{instanceId}/{ns}/{name}/{columns}/{aggregate}
URL 요청 예시/monitoring/api/metrics/graphs/192.168.23.112/WAS/front21/NIL/apdex/apdex/mean?start=1493463050000&end=1493463055000&interval=5000&fill=true&merge=false
HTTP METHODGET
Content-Typeapplication/json

응답

[{"name":".*___(192.168.23.11)___(WAS)___(t1server11)___NIL___apdex","start":1496383025000,"end":1496383035000,\
"interval":"5s","columns":["time","apdex"],"points":[[1496383025000,1496383030000],[null,null]]}]

모든 인스턴스별 APDEX, 평균응답시간, 호출건수 한번에 호출

인스턴스가 많은 환경에서 요청 수를 줄이는 방법입니다. 대별로 따로 조회하면 인스턴스가 50 대일 때 요청도 50 번이지만, 이 방식은 한 번으로 끝납니다. 5초마다 새로 그리는 대시보드나 주기적으로 도는 수집 배치처럼 호출이 잦은 곳에서 차이가 큽니다.

응답은 인스턴스마다 배열 원소 하나로 나뉘어 오므로, 받은 뒤에 name 값으로 나눠서 쓰면 됩니다.

여러 개의 IP나 Instance에 대한 정보를 한꺼번에 호출하려면, {ipAddr}이나 {instanceId} 항목에 ‘*’를 사용하면 모든 인스턴스에 대한 정보를 한번에 얻을 수 있습니다.

또, 특정한 IP, InstanceId에 대한 정보만 호출하려면, ‘:’로 구분하여 여러 개의 IP, InstanceID를 입력하면 됩니다. (예 : …/graphs/192.168.0.1:192.168.0.2/WAS/test11:test12:test21:test22/… )

clientTime의 디폴트값은 false이며, true를 사용하면 URL에서 입력된 start, end 시간을 사용합니다.

아래와 마찬가지로, 오류율, 사용자수도 한번에 모든 인스턴스의 정보를 호출할 수 있습니다.

요청

항목설명
URL/monitoring/api/metrics/graphs/{ipAddr}/{agentType}/{instanceId}/{ns}/{name}/{columns}/{aggregate}
URL 요청 예시/monitoring/api/metrics/graphs/**/WAS/**/NIL/apdex/apdex:avgRT:count/mean:mean:sum?start=1493463050000&end=1493463055000&interval=5000&fill=true&merge=false&clientTime=true
HTTP METHODGET
Content-Typeapplication/json

예)

항목설명
오류율 예시/monitoring/api/metrics/graphs/**/WAS/**/NIL/status/errorRate/mean?start=1493463050000&end=1493463055000&interval=5000&fill=true&merge=false&clientTime=true
액티브사용자수 예시/monitoring/api/metrics/graphs/**/WAS/**/users/active/activeUser/mean?start=1493463050000&end=1493463055000&interval=5000&fill=true&merge=false&clientTime=true

응답

[{"name":"NIL___192.168.23.11___WAS___server11___NIL___apdex","start":1502154380000,"end":1502154390000,\
"interval":"5s","columns":["time","apdex","avgRT","count"],"points":[[1502154380000,1502154385000],[100,100],\
[1,1],[6,7]]},{"name":"NIL___192.168.23.11___WAS___server12___NIL___apdex","start":1502154380000,\
"end":1502154390000,"interval":"5s","columns":["time","apdex","avgRT","count"],"points":[[1502154380000,\
1502154385000],[0,0],[10082,14994],[2,1]]}]

인스턴스 한 대가 배열 원소 하나입니다. name___ 로 이어진 값에서 어느 인스턴스인지 읽고, points 의 순서는 columns 의 순서와 같습니다.

컬럼
time데이터 시각 (Unix Epoch 밀리초)
apdexAPDEX 점수
avgRT평균 응답시간 (밀리초)
count호출건수

애플리케이션 그룹별 일일 시간별 호출건수 통계

애플리케이션 그룹별로 시간 단위(1h)나 일 단위(1d)로 묶은 호출건수 통계입니다.

앞 절들의 5초 간격 지표가 지금 상태를 보는 것이라면, 이 API 는 추세를 보는 것입니다. 주간 보고서의 시간대별 트래픽 그래프, 배치 작업을 돌릴 한가한 시간대 선정, 다음 분기 용량 산정 근거로 씁니다.

url 파라미터에 정규식을 넣으면 특정 화면만 골라 볼 수 있습니다 — 예를 들어 결제 화면의 호출건수만 뽑아 매출 추이와 맞춰 보는 식입니다.

요청

항목
URL/monitoring/api/stat/url/graph/{appName}
URL 요청 예시/monitoring/api/stat/url/graph/front?url=*&interval=1h&minX=1493478000000&maxX=1493564400000&fixedRange=true
HTTP METHODGET
Content-Typeapplication/json

Path 파라미터

자리설명
{appName}애플리케이션 그룹 이름 (2장에서 얻습니다)

Query 파라미터

이름기본값설명
url호출 URL 이름. 정규식으로 특정 URL 만 골라 볼 수 있습니다
interval데이터 간격(밀리초). 보통 5000(5초)을 씁니다
minX필수조회 시작 시각. Unix Epoch 밀리초
maxX필수조회 종료 시각. Unix Epoch 밀리초
fixedRangetrue 면 서버가 시간을 재조정하지 않고 요청한 범위를 그대로 씁니다
exclusiontrue숨긴 에이전트를 뺀 목록에서 그룹을 찾습니다. 그룹 안의 에이전트가 모두 숨김·중단 상태면 그 그룹은 목록에서 사라져 조회가 실패합니다 — 이때는 false 로 지정하십시오

응답

{"status":200,"result":{"name":"NIL___192.168.23.112:192.168.23.113___WAS___front21:front31___NIL___apdex",\
"start":1493478000000,"end":1493564400000,"interval":"1h","columns":["counts","apdex"],\
"points":[[1493478000000,1493481600000,1493485200000,1493488800000,1493492400000,1493496000000,1493499600000,\
1493503200000,1493506800000,1493510400000,1493514000000,1493517600000,1493521200000,1493524800000,1493528400000,\
1493532000000,1493535600000,1493539200000,1493542800000,1493546400000,1493550000000,1493553600000,1493557200000,\
1493560800000],[3172,3036,3190,3144,3141,3122,3084,3108,3099,3151,3094,3137,3129,3137,3132,3186,3110,3099,2938,\
3128,3118,3080,3082,3049],[64.757,69.976,66.282,70.0,69.286,69.231,68.0,63.306,90.0,68.571,71.111,68.834,65.385,\
63.043,69.111,65.686,65.0,58.333,71.154,71.429,71.053,68.519,68.333,72.857]],"names":null}}

인스턴스별 일일 시간별 호출건수 통계

같은 통계를 인스턴스 한 대 단위로 봅니다.

인스턴스를 늘리거나 줄인 뒤 트래픽이 실제로 분산됐는지 하루 단위로 확인할 때 씁니다. 증설 전후를 나란히 조회하면 새로 넣은 대가 제 몫을 받고 있는지 바로 보입니다.

요청

항목
URL/monitoring/api/stat/url/graph/{ipAddr}/{instanceId}
URL 요청 예시/monitoring/api/stat/url/graph/192.168.23.113/front31?url=*&interval=1h&minX=1493478000000&maxX=1493564400000&fixedRange=true
HTTP METHODGET
Content-Typeapplication/json

Path 파라미터

자리설명
{ipAddr}대상 서버 IP. : 로 구분해 여러 개를 적을 수 있습니다
{instanceId}인스턴스 ID. : 로 구분해 여러 개를 적을 수 있습니다

Query 파라미터

이름기본값설명
url호출 URL 이름. 정규식으로 특정 URL 만 골라 볼 수 있습니다
interval데이터 간격(밀리초). 보통 5000(5초)을 씁니다
minX필수조회 시작 시각. Unix Epoch 밀리초
maxX필수조회 종료 시각. Unix Epoch 밀리초
fixedRangetrue 면 서버가 시간을 재조정하지 않고 요청한 범위를 그대로 씁니다

응답

{"status":200,"result":{"name":"NIL___192.168.23.113___WAS___front31___NIL___apdex","start":1493564400000,\
"end":1493650800000,"interval":"1h","columns":["counts","apdex"],"points":[[1493564400000,1493568000000,\
1493571600000,1493575200000,1493578800000,1493582400000,1493586000000,1493589600000,1493593200000,1493596800000\
,1493600400000,1493604000000,1493607600000,1493611200000,1493614800000,1493618400000,1493622000000,1493625600000\
,1493629200000,1493632800000,1493636400000,1493640000000,1493643600000,1493647200000],[2898,2929,3034,3015,2994,\
3001,1871,1809,1829,1838,1823,1814,1808,1070,null,null,null,null,null,null,null,null,null,null],[75.862,72.0,\
61.111,65.789,70.0,63.889,71.429,65.0,70.0,72.222,57.692,72.545,60.0,67.5,null,null,null,null,null,null,null\
,null,null,null]],"names":null}}

APM 서버 시간기준으로 최근 10분간의 이벤트 목록

OPENMARU APM 서버 시간을 기준으로 최근 10분간 발생한 이벤트 목록입니다.

사내 상황판이나 메신저 봇에 최근 경보를 띄울 때 씁니다. 파라미터가 없어 가장 간단하게 호출할 수 있습니다.

호출 주기에 주의하십시오

조회 범위가 10분으로 고정입니다. 10분보다 긴 주기로 호출하면 그 사이에 발생한 이벤트를 놓칩니다. 주기가 10분을 넘거나 하나도 놓치면 안 되는 연동이면 다음 절의 start 지정 방식을 쓰십시오.

요청

항목설명
URL/monitoring/api/events/recents
URL 요청 예시/monitoring/api/events/recents
HTTP METHODGET
Content-Typeapplication/json

응답

{"status": 200,"result": [{"uuid": "FD82A912-85B2-4D06-872E-C3CE80B5F017",\
"created": 1494387531070,"eventId": 5000,"name": "EVENT_FORECAST_CRITICAL_THRESHOLD_REACH",\
"level": "FORECAST","ipAddress": "192.168.23.144","agentType": "SYS","instanceId": "ens192",\
"type": "Network Error %","readableMessage": "'Network Error %' (현재값: 9.31)이 '2017-05-10 12:43:51’\
쯤에 예상값 '13.24’으로 CRITICAL 임계값 '10’에 도달할 것으로 예상됩니다.","readableWhere": "SYS Agent > \
192.168.23.144 > Network Error % > ens192","param": {"current": 9.31,"field": "errorRate",\
"channels": ["email"],"recipients": ["omadm"],"nextX": 300000,\
"threshold": 10,"forecast": 13.24,"nextTimestamp": 1494387831070,\
"type": "Network Error %","stderr": 3.43,"streamName": "NetworkErrorStream"},\
"instanceIdAsNil": "ens192","instanceIdOrg": "ens192"},]

JSON 데이터 형식

{
"status": 200, ← 응답코드
"result": [ ← 이벤트 목록(Array)
{
"uuid": "17E1F5C5-BEAC-481B-B1CF-E724678CEE23", ← 이벤트 UUID
"created": 1494388083491, ← 이벤트 생성시간 UNIX Epoch
"eventId": 1100, ← 이벤트 ID
"name": “EVENT_WARN_THRESHOLD_", ← 이벤트 이름
"level": "WARN", ← 이벤트 레벨, INFO, WARN, FORCAST, CRITICAL 단계로 구분됨
"ipAddress": "192.168.23.144", ← 이벤트가 발생한 Agent의 IP 주소
"agentType": "WAS", ← 이벤트가 발생한 Agent의 종류, WAS, SYS, WEB 종류로 구분
"instanceId": "testap-8-7rh9q", ← 이벤트가 발생한 인스턴스의 ID
"type": "Heap Usage %", ← 이벤트의 유형
"readableMessage": "'Heap Usage %' (평균값: 85.02)은 경고(WARN) 임계값 '85’을 넘었습니다.", ← 이벤트에 대한 설명 메시지를 읽을 수 있도록 표시
"readableWhere": "WAS Agent > 10.130.0.35 > testap-8-7rh9q > Heap Usage %",
← 이벤트가 발생한 위치를 읽을 수 있는 표시
"param": { ← 이벤트가 발생한 정보에 대한 통계값
"average": 85.02, ← 평균값
"current": 83.62, ← 현재값
"field": "heapUsedPercent",
"channels": [ ← 이벤트를 전송할 채널
"email"
],
"recipients": [ ← 이벤트 수신 대상자 ID
"omadm"
],
"timewindow": 180000, ← 이벤트 대상 데이터 통계 범위
"threshold": 85, ← 이벤트를 발생할 설정된 임계값
"type": "Heap Usage %",
"streamName": "HeapStream"
},
"instanceIdAsNil": "testap-8-7rh9q",
"instanceIdOrg": "testap-8-7rh9q"
},
……
}
]
}

지정한 시간부터 현재까지(서버시간) 최근 이벤트 목록

start 로 지정한 시각부터 현재(서버 시간)까지의 이벤트 목록입니다.

이벤트를 하나도 놓치지 않고 이어 받는 방법입니다. 이번 응답에서 가장 최근 이벤트의 created 값을 다음 요청의 start 로 넘기면, 호출 주기가 불규칙하거나 연동 프로그램이 잠시 멈췄다 재개해도 그 사이 이벤트를 빠짐없이 가져옵니다.

티켓 시스템 자동 등록, 감사 로그 적재처럼 누락이 문제가 되는 연동에 씁니다. 응답 형식은 앞 절과 같습니다.

요청

항목
URL/monitoring/api/events/recents?start={start}
URL 요청 예시/monitoring/api/events/recents?start=1494387225255
HTTP METHODGET
Content-Typeapplication/json

Query 파라미터

이름기본값설명
start필수조회 시작 시각. Unix Epoch 밀리초 (1970-01-01 00:00:00 UTC 기준)

응답

{"status": 200,"result": [{"uuid": "FD82A912-85B2-4D06-872E-C3CE80B5F017",\
"created": 1494387531070,"eventId": 5000,"name": "EVENT_FORECAST_CRITICAL_THRESHOLD_REACH",\
"level": "FORECAST","ipAddress": "192.168.23.144","agentType": "SYS","instanceId": "ens192",\
"type": "Network Error %","readableMessage": "'Network Error %' (현재값: 9.31)이 '2017-05-10 12:43:51’\
쯤에 예상값 '13.24’으로 CRITICAL 임계값 '10’에 도달할 것으로 예상됩니다.","readableWhere": "SYS Agent > \
192.168.23.144 > Network Error % > ens192","param": {"current": 9.31,"field": "errorRate",\
"channels": ["email"],"recipients": ["omadm"],"nextX": 300000,\
"threshold": 10,"forecast": 13.24,"nextTimestamp": 1494387831070,"type": "Network Error %",\
"stderr": 3.43,"streamName": "NetworkErrorStream"},"instanceIdAsNil": "ens192",\
"instanceIdOrg": "ens192"},]

시스템 CPU 사용률 비교

서버 여러 대의 자원 사용률을 한 번에 받아 서로 비교합니다. 응답이 서버마다 배열 원소 하나로 나뉘어 오므로, 받은 뒤 값이 큰 순으로 정렬하면 부하가 몰린 서버가 바로 드러납니다.

서버 증설·축소 판단, 특정 서버만 유독 높은지 확인, 정기 점검 보고서의 자원 사용 현황표를 만들 때 씁니다.

응답의 idle유휴율입니다. 사용률이 필요하면 100 - idle 로 계산하십시오.

{appName} 자리에 * 를 넣으면 모든 대상이고, agentType=SYS 로 시스템 에이전트만 남깁니다. 경로의 지표 이름({ns}/{name}/{columns})만 바꾸면 메모리도 같은 방식으로 비교할 수 있습니다 — NIL/memory/usedPercent/mean.

요청

항목
URL/monitoring/api/metrics/apps/{appName}/{ns}/{name}/{columns}/{aggregate}
URL 요청 예시/monitoring/api/metrics/apps/*/NIL/cpu/idle/mean?start=1786065150000&end=1786065160000&interval=5000&fill=true&agentType=SYS
HTTP METHODGET
Content-Typeapplication/json

Query 파라미터

이름기본값설명
start필수조회 시작 시각. Unix Epoch 밀리초 (1970-01-01 00:00:00 UTC 기준)
end필수조회 종료 시각. 같은 형식입니다
interval데이터 간격(밀리초). 보통 5000(5초)을 씁니다
fill값이 없는 구간을 null 로 채웁니다
exclusion숨긴 에이전트를 제외할지 지정합니다
agentType에이전트 종류 — WAS · WEB · SYS · CUB
clientTimefalse기본은 서버 시간 기준입니다. 요청에 적은 시간을 그대로 쓰려면 true 로 지정합니다

응답

서버마다 배열 원소 하나로 나뉘어 옵니다. name 의 두 번째 칸이 서버 IP 입니다.

[
{
"name": "NIL___192.168.11.2___SYS___NIL___NIL___cpu",
"start": 1786065150000,
"end": 1786065160000,
"interval": "5s",
"columns": [
"time",
"idle"
],
"points": [
[
1786065150000,
1786065155000
],
[
97.095,
97.033
]
]
},
{
"name": "NIL___192.168.11.4___SYS___NIL___NIL___cpu",
"start": 1786065150000,
"end": 1786065160000,
"interval": "5s",
"columns": [
"time",
"idle"
],
"points": [
[
1786065150000,
1786065155000
],
[
83.203,
84.185
]
]
}
]