생성¶
POST /api/v1/aggs_to_metric/add
개요¶
메트릭 생성 규칙 생성
Body 요청 매개변수¶
| 매개변수명 | 유형 | 필수 | 설명 |
|---|---|---|---|
| extend | json | Y | 추가 정보 빈 값 허용: False |
| jsonScript | json | Y | 규칙 구성 빈 값 허용: False |
| jsonScript.type | string | Y | 유형 예시: rumToMetric 빈 값 허용: False 빈 문자열 허용: False 선택 가능 값: ['logToMetric', 'rumToMetric', 'apmToMetric', 'metricToMetric', 'securityToMetric', 'dialingToMetric'] |
| jsonScript.query | json | Y | DQL 쿼리 관련 정보 빈 값 허용: False |
| jsonScript.metricInfo | json | Y | 메트릭 구성 정보 빈 값 허용: False |
| jsonScript.metricInfo.every | string | Y | 실행 주기, 단위 포함 정수 지원; 1m~59m 또는 1h~24h 선택 가능, cron 미지원 예시: 5m 빈 문자열 허용: False |
| jsonScript.metricInfo.metric | string | Y | 메저먼트 이름 예시: cpu 빈 문자열 허용: False |
| jsonScript.metricInfo.metricField | string | Y | 메트릭 이름 예시: load5s 빈 문자열 허용: False |
| jsonScript.metricInfo.unit | string | 단위 예시: load5s 빈 문자열 허용: True |
|
| jsonScript.metricInfo.desc | string | 설명 예시: xxx 빈 문자열 허용: True |
|
| jsonScript.metricInfo.delaySeconds | integer | 예약 작업 트리거 후 지연 실행 시간(초), 기본값 0은 지연 없음 예시: 60 $minValue: 0 $maxValue: 86400 |
|
| skipRepeatNameCheck | boolean | 메저먼트/메트릭 중복 이름 검사 건너뛰기 여부, 기본 false, false는 중복 검사 수행, true는 중복 검사 건너뜀 예시: false 빈 값 허용: False |
매개변수 추가 설명¶
요청 매개변수 설명.
1. jsonScript의 매개변수 설명
| 매개변수명 | 유형 | 필수 | 설명 |
|---|---|---|---|
| type | String | 필수 | 데이터 소스 유형, 열거형 |
| query | Json | 필수 | 쿼리 정보 |
| metricInfo | Json | 필수 | 메저먼트 구성 정보 |
2. jsonScript.type 유형 설명
| key | 설명 |
|---|---|
| rumToMetric | RUM 메트릭 생성 |
| apmToMetric | APM 메트릭 생성 |
| logToMetric | Logging 메트릭 생성 |
| metricToMetric | Metric 메트릭 생성 |
| securityToMetric | 보안 점검 메트릭 생성 |
3. jsonScript.metricInfo 설명
| 매개변수명 | 유형 | 필수 | 설명 |
|---|---|---|---|
| every | String | 필수 | 실행 주기, 단위 포함 정수 지원; 1m~59m 또는 1h~24h 선택 가능, cron 미지원 |
| metric | String | 필수 | 메저먼트 이름 |
| metricField | String | 필수 | 메트릭 이름 |
| unit | String | 단위 | |
| desc | String | 설명 | |
| delaySeconds | Integer | 예약 작업 트리거 후 지연 실행 시간(초), 기본값 0은 지연 없음 |
3.1 jsonScript.metricInfo.unit 단위 설명
단위 형식: custom/["단위 유형","단위"], 예시: custom/["time","ms"]
사용자 정의 단위 형식: custom/["custom","사용자 정의 단위"], 예시: custom/["custom","tt"]
표준 단위 유형은 단위 설명 참고
4. jsonScript.query 설명
| 매개변수명 | 유형 | 필수 | 설명 |
|---|---|---|---|
| q | String | 필수 | 쿼리 구문 |
| qtype | String | 쿼리 구문 유형, dql/promql | |
| qmode | String | 쿼리 유형, 선택 상자: selectorQuery, 직접 입력: customQuery, 이 필드는 프론트엔드 쿼리 표시 스타일에 영향을 줌 |
5. extend의 매개변수 설명
| 매개변수명 | 유형 | 필수 | 설명 |
|---|---|---|---|
| filters | Array[dict] | 로그 유형이 아닌 경우의 필터 조건 목록 | |
| groupBy | Array[str] | 그룹화 정보 | |
| funcName | string | 필수 | 집계 함수(qmode가 선택 상자 모드인 경우 필수, 프론트엔드 표시에 사용), 열거형 값("count", "avg", "max", "sum", "min", "count_distinct", "p75", "p95", "p99") |
| fieldKey | string | 필수 | 집계 필드(qmode가 선택 상자 모드인 경우 필수, 프론트엔드 표시에 사용) |
| index | string | 로그 유형의 인덱스 이름 | |
| source | string | 이 필드는 유형별로 의미가 다름: 로그 유형: 소스(source), APM 유형: 서비스(service), RUM 유형: 애플리케이션(app_id), 메트릭 유형: 메저먼트, 보안 점검: 카테고리(category) | |
| filterString | string | 로그 유형의 필터 조건, 원본 필터 문자열, 예시: 'host:hangzhou123 -service:coredns internal:true' |
참고:
extend 필드의 모든 필드는 프론트엔드 표시용으로만 사용되며, 실제 메트릭 생성 쿼리 구문은 jsonScript.query에 구성된 쿼리 정보를 기준으로 합니다.
6. extend.filters의 기본 구조 설명
| 매개변수명 | 유형 | 필수 | 설명 |
|---|---|---|---|
| condition | string | 이전 필터 조건과의 관계, 선택 가능 값: and, or; 기본값: and |
|
| name | string | 필터링할 필드 이름 | |
| op | string | 연산자, 선택 가능 값: =, !=, match, not match |
|
| values | array | 값 목록 | |
| values[#] | string/int/boolean | 문자열/숫자/불리언 유형 가능, 데이터 비교 시 operation의 특성에 따라 values에서 특정 요소를 가져와 비교합니다. 예: operation이 =인 경우 values[0]만 연산에 참여 |
6.1 extend.filters 예시:
[
{
"name": "A",
"condition": "and",
"op": "match",
"values": ["error"]
},
{
"name": "tagC",
"condition": "and",
"op": "=",
"values": ["ok"]
}
]
7. 전체 구조 예시:
{
"extend": {
"filters": [],
"groupBy": ["host_ip"],
"funcName": "count",
"fieldKey": "*",
"index": "default",
"source": "*",
"filterString": "host:hangzhou123 region:guanzhou"
},
"jsonScript": {
"type": "logToMetric",
"metricInfo": {
"every": "1m",
"metric": "test",
"metricField": "001-test",
"unit": "custom/[\"timeStamp\",\"ms\"]",
"desc": "",
"delaySeconds": 60
},
"query": {
"q": "L('default')::RE(`.*`):(count(`*`)) { `host`='hangzhou123' and `region`='guanzhou' } BY `host_ip`",
"qtype": "dql"
}
}
}
요청 예시¶
curl 'https://openapi.guance.com/api/v1/aggs_to_metric/add' \
-H 'DF-API-KEY: <DF-API-KEY>' \
-H 'Content-Type: application/json;charset=UTF-8' \
--data-raw '{"extend":{"filters":[],"groupBy":["host_ip"],"funcName":"count","fieldKey":"*","index":"default","source":"*","filterString":"host:hangzhou123 region:guanzhou"},"jsonScript":{"type":"logToMetric","metricInfo":{"every":"1m","metric":"test","metricField":"001-test","unit":"custom/[\"timeStamp\",\"ms\"]","desc":"","delaySeconds":60},"query":{"q":"L('default')::RE(`.*`):(count(`*`)) { `host`='hangzhou123' and `region`='guanzhou' } BY `host_ip`","qtype":"dql"}}}' \
--compressed
응답¶
{
"code": 200,
"content": {
"workspaceUUID": "wksp_xxxx",
"monitorUUID": "",
"updator": null,
"type": "aggs",
"refKey": "",
"secret": null,
"jsonScript": {
"type": "logToMetric",
"metricInfo": {
"every": "1m",
"metric": "test",
"metricField": "001-test",
"unit": "custom/[\"timeStamp\",\"ms\"]",
"desc": "",
"delaySeconds": 60
},
"query": {
"q": "L('default')::RE(`.*`):(count(`*`)) { `host`='hangzhou123' and `region`='guanzhou' } BY `host_ip`",
"qtype": "dql"
}
},
"crontabInfo": {
"id": "cron-4VdviPep3oHc",
"crontab": null
},
"extend": {
"filters": [],
"groupBy": [
"host_ip"
],
"funcName": "count",
"fieldKey": "*",
"index": "default",
"source": "*",
"filterString": "host:hangzhou123 region:guanzhou"
},
"createdWay": "manual",
"isLocked": false,
"openPermissionSet": false,
"permissionSet": [],
"id": null,
"uuid": "rul_xxxx",
"status": 0,
"creator": "acnt_xxxx",
"createAt": 1734594428,
"deleteAt": -1,
"updateAt": null,
"__operation_info": {
"uuid": "rul_xxxx"
}
},
"errorCode": "",
"message": "",
"success": true,
"traceId": "1111139030457458757"
}