Create¶
POST /api/v1/aggs_to_metric/add
Overview¶
Create a Generate Metrics rule
Body Request Parameters¶
| Parameter | Type | Required | Description |
|---|---|---|---|
| extend | json | Y | Additional information Allow empty: False |
| jsonScript | json | Y | Rule configuration Allow empty: False |
| jsonScript.type | string | Y | Type Example: rumToMetric Allow empty: False Allow empty string: False Allowed values: ['logToMetric', 'rumToMetric', 'apmToMetric', 'metricToMetric', 'securityToMetric', 'dialingToMetric'] |
| jsonScript.query | json | Y | DQL query-related information Allow empty: False |
| jsonScript.metricInfo | json | Y | Metric configuration information Allow empty: False |
| jsonScript.metricInfo.every | string | Y | Frequency, supports integers with units; selectable from 1m~59m or 1h~24h, cron is not supported Example: 5m Allow empty string: False |
| jsonScript.metricInfo.metric | string | Y | Measurement name Example: cpu Allow empty string: False |
| jsonScript.metricInfo.metricField | string | Y | Metric name Example: load5s Allow empty string: False |
| jsonScript.metricInfo.unit | string | Unit Example: load5s Allow empty string: True |
|
| jsonScript.metricInfo.desc | string | Description Example: xxx Allow empty string: True |
|
| jsonScript.metricInfo.delaySeconds | integer | Data wait window, in seconds; supported values: 0/60/120/180/300/600/900/1200/1800, default 0 means no delay Example: 60 Allowed values: [0, 60, 120, 180, 300, 600, 900, 1200, 1800] |
|
| skipRepeatNameCheck | boolean | Whether to skip the duplicate-name check for the measurement and metric; default false. false performs the duplicate-name check, true skips it Example: false Allow empty: False |
Additional Parameter Notes¶
Request parameter description.
1. Parameters in jsonScript
| Parameter | type | Required | Description |
|---|---|---|---|
| type | String | Required | Data source type, enum type |
| query | Json | Required | Query information |
| metricInfo | Json | Required | Measurement configuration information |
2. Description of the jsonScript.type values
| key | Description |
|---|---|
| rumToMetric | RUM Generate Metrics |
| apmToMetric | APM Generate Metrics |
| logToMetric | Logging Generate Metrics |
| metricToMetric | Metric Generate Metrics |
| securityToMetric | Security Check Generate Metrics |
3. Description of jsonScript.metricInfo
| Parameter | type | Required | Description |
|---|---|---|---|
| every | String | Required | Frequency, supports integers with units; selectable from 1m~59m or 1h~24h, cron is not supported |
| metric | String | Required | Measurement name |
| metricField | String | Required | Metric name |
| unit | String | Unit | |
| desc | String | Description | |
| delaySeconds | Integer | Data wait window, in seconds; supported values: 0, 60, 120, 180, 300, 600, 900, 1200, 1800, default 0 means no delay |
3.1 Description of the jsonScript.metricInfo.unit unit
Unit format: custom/[\"unit type\",\"unit\"], example: custom/[\"time\",\"ms\"]
Custom unit format: custom/[\"custom\",\"custom unit\"], example: custom/[\"custom\",\"tt\"]
For standard unit types, refer to Unit Description
4. Description of jsonScript.query
| Parameter | type | Required | Description |
|---|---|---|---|
| q | String | Required | Query statement |
| qtype | String | Query syntax type, dql/promql | |
| qmode | String | Query type; selector mode: selectorQuery, manual mode: customQuery; this field affects how the query is echoed in the frontend |
5. Parameters in extend
| Parameter | type | Required | Description |
|---|---|---|---|
| filters | Array[dict] | Filter condition list for non-Logging types | |
| groupBy | Array[str] | Grouping information | |
| funcName | string | Required | Aggregation function (required when qmode is in selector mode; used for frontend display); allowed values: ("count", "avg", "max", "sum", "min", "count_distinct", "distribution", "p75", "p95", "p99") |
| fieldKey | string | Required | Aggregation field (required when qmode is in selector mode; used for frontend display) |
| index | string | Index name for Logging types | |
| source | string | This field has different meanings for different types: Logging types: source; APM types: service; RUM types: app_id; Metric types: measurement; Security Check: category | |
| filterString | string | Filter condition for Logging types; the raw filter string; example: 'host:hangzhou123 -service:coredns internal:true' |
Note:
All fields in the extend object are used only for frontend display. The actual query statement for generating metrics is based on the query information configured in jsonScript.query.
When using Distribution in selector mode, pass distribution to extend.funcName, and use histogram_auto(<field>) in jsonScript.query.q.
6. Main structure of extend.filters
| Parameter | type | Required | Description |
|---|---|---|---|
| condition | string | Relationship with the previous filter condition; allowed values: and, or; default: and |
|
| name | string | Field name to be filtered | |
| op | string | Operator; allowed values: =, !=, match, not match |
|
| values | array | List of values | |
| values[#] | string/int/boolean | Can be of string, number, or boolean type. When comparing data, a specific element is selected from values for comparison based on the characteristics of operation. For example, when operation is =, only values[0] participates in the operation |
6.1 extend.filters example:
[
{
"name": "A",
"condition": "and",
"op": "match",
"values": ["error"]
},
{
"name": "tagC",
"condition": "and",
"op": "=",
"values": ["ok"]
}
]
7. Overall structure example:
{
"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"
}
}
}
Request Example¶
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
Response¶
{
"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"
}