更新时间:2026-01-29 GMT+08:00
分享

更新指标定义 - UpdateMetrics

功能介绍

更新指标定义

调用方法

请参见如何调用API

授权信息

账号具备所有API的调用权限,如果使用账号下的IAM用户调用当前API,该IAM用户需具备调用API所需的权限,具体权限要求请参见权限和授权项

URI

PUT /v1/{project_id}/workspaces/{workspace_id}/soc/metrics/{metric_id}

表1 路径参数

参数

是否必选

参数类型

描述

project_id

String

参数解释:

项目ID,用于明确项目归属,配置后可通过该ID查询项目下资产,可以通过调用API获取,也可以从控制台获取。获取项目ID

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

workspace_id

String

参数解释:

工作空间id。

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

metric_id

String

指标ID

请求参数

表2 请求Header参数

参数

是否必选

参数类型

描述

X-Auth-Token

String

参数解释:

用户Token,通过调用IAM服务获取用户Token接口获取(响应消息头中X-Subject-Token的值)。获取用户Token

约束限制:

不涉及

取值范围:

不涉及

默认取值:

不涉及

content-type

String

参数解释:

内容类型

  • application/json;charset=UTF-8 普通API请求的类型

约束限制:

不涉及

取值范围:

  • application/json;charset=UTF-8

默认取值:

不涉及

表3 请求Body参数

参数

是否必选

参数类型

描述

name

String

指标名称

id

String

指标Id

metric_type

String

指标类型, 当前仅支持创建日志类型指标

data_type

String

数据类型, 当前仅支持创建统计指标

metric_dimension

Integer

指标结果维度,0维:单个数字,2维:图表或表格,3+维:多标签图表, metric_type为DERIVED必填,其他类型选填(COMPOUND时必为0)

cache_ttl

Long

缓存生命周期,单位s

report_period

Long

上报周期,埋点指标时必填,单位s

is_built_in

Boolean

是否为系统指标

effective_column

String

生效的列, 当有该参数时,使用指定列作为指标数据结果

max_query_range

Integer

指标支持的最大检索范围,单位:天;复合指标时,数值为derived_metrics列表元素中最小值

derived_metrics

Array of derived_metrics objects

衍生指标列表,非复合指标时只有一个元素,复合指标时,为各衍生指标的定义

compound_expression

String

metric_type为DERIVED时填写, 复合指标的表达式

metric_format

Array of LayoutMetricFormat objects

指标格式

metric_expand_dim

MetricDimensionExpandParam object

指标维度扩充参数

version

String

安全云脑版本

表4 derived_metrics

参数

是否必选

参数类型

描述

metric_dimension

Integer

衍生指标结果维度,0维:单个数字,2维:图表或表格,3+维:多标签图表

max_query_range

Integer

指标支持的最大检索范围,单位:天;

date_start

String

指标查询范围相对起始时间 datemath表达式

date_end

String

指标查询范围相对截止时间 datemath表达式

date_format

String

时间格式,epoch_millis;epoch_second;yyyy-MM-dd'T'HH:mm:ss.SSSZ

query_type

String

获取指标结果方式,cbsl, api, dsl, sql

query_function

String

获取指标结果的方法,转义成字符串, 共四种query方式:CBSL、API、DSL、SQL

  • query_type为CBSL时,function传入dataspace_id,pipe_id,query,sort, from, to

    样例:

    {\"dataspace_id\":\"3939573a-12a0-436f-b0e5-ab2872a1fde9\",\"pipe_id\":\"9db9d8a6-d9e6-4b32-990e-40f0afe4655d\",\"query\":\"* | select ack_pps, device_type as type\",\"sort\":\"desc\",\"from\":${date_from},\"to\":${date_to}}

    转义前:

    {
        "dataspace_id":"3939573a-12a0-436f-b0e5-ab2872a1fde9",
        "pipe_id":"9db9d8a6-d9e6-4b32-990e-40f0afe4655d",
        "query":"* | select ack_pps, device_type as type",
        "sort":"desc",
        "from": ${date_from},
        "to": ${date_to}
    }
  • query_type为API时,function传入api method、url、path_params、headers、response_parser(解析API返回值所需,定义label和json_path将返回值解析为二维表格,label为表头,json_path为字段提取路径)

    样例:

    {\"method\":\"POST\",\"uri\":\"/v1/${project_id}/只填写uri/不带域名/xxx\",\"headers\":{\"X-Auth-Token\":\"${project_token}\"},\"response_parser\":{\"labels\":[\"攻击类型\",\"攻击源\",\"时间\"],\"json_path\":[\"$.data[:].type\",\"$.data[:].source\",\"$.data[:].time\"]}}

    转义前:

    {
        "method":"POST",
        "uri":"/v1/${project_id}/只填写uri/不带域名/xxx",
        "headers":{
            "X-Auth-Token": "${project_token}"
        },
        "response_parser":{
            "labels":[
                "攻击类型",
                "攻击源",
                "时间"
            ],
            "json_path":[
                "$.data[:].type",
                "$.data[:].source",
                "$.data[:].time"
            ]
        }
    }
  • query_type为DSL时,指定index, dsl(转义成字符串), response_parser

    样例:

    {\"index\":\"index_xxx_*\",\"dsl\":\"{\\\"query\\\":{\\\"match_all\\\":{}}}\",\"response_parser\":{\"labels\":[\"攻击类型\",\"攻击源\",\"时间\"],\"json_path\":[\"$.data[:].type\",\"$.data[:].source\",\"$.data[:].time\"]}}

    转义前:

    {
        "index":"index_xxx_*",
        "dsl":"{\"query\":{\"match_all\":{}}}",
        "response_parser":{
            "labels":[
                "攻击类型",
                "攻击源",
                "时间"
            ],
            "json_path":[
                "$.data[:].type",
                "$.data[:].source",
                "$.data[:].time"
            ]
        }
    }
  • query_type为sql时,指定opendistro sql插件查询json(转义成字符串)

    样例:

    {\"query\":\"SELECT count(1) as count , msg.DstPort FROM isap_log_nip_ttl* where oct >= TIMESTAMP(\\\"${date_from}\\\") and oct <= TIMESTAMP(\\\"${date_to}\\\") group by msg.DstPort order by count desc limit 5\"}

    转义前:

    {
        "query":"SELECT count(1) as count , msg.DstPort FROM isap_log_nip_ttl* where oct >= TIMESTAMP(\"${date_from}\") and oct <= TIMESTAMP(\"${date_to}\") group by msg.DstPort order by count desc limit 5"
    }
表5 LayoutMetricFormat

参数

是否必选

参数类型

描述

data

String

数据格式

display

String

显示格式

display_param

Map<String,String>

显示参数

data_param

Map<String,String>

数据参数

表6 MetricDimensionExpandParam

参数

是否必选

参数类型

描述

labels

Array of strings

维度扩充标签

functions

Array of strings

维度扩充方法,填写指标数据面内置方法, 参数index从1开始

响应参数

状态码:200

表7 响应Header参数

参数

参数类型

描述

X-request-id

String

请求ID,格式为:request_uuid-timestamp-hostname

表8 响应Body参数

参数

参数类型

描述

name

String

指标名称

id

String

指标Id

metric_type

String

指标类型, 当前仅支持创建日志类型指标

data_type

String

数据类型, 当前仅支持创建统计指标

metric_dimension

Integer

指标结果维度,0维:单个数字,2维:图表或表格,3+维:多标签图表, metric_type为DERIVED必填,其他类型选填(COMPOUND时必为0)

cache_ttl

Long

缓存生命周期,单位s

report_period

Long

上报周期,埋点指标时必填,单位s

is_built_in

Boolean

是否为系统指标

effective_column

String

生效的列, 当有该参数时,使用指定列作为指标数据结果

max_query_range

Integer

指标支持的最大检索范围,单位:天;复合指标时,数值为derived_metrics列表元素中最小值

derived_metrics

Array of derived_metrics objects

衍生指标列表,非复合指标时只有一个元素,复合指标时,为各衍生指标的定义

compound_expression

String

metric_type为DERIVED时填写, 复合指标的表达式

metric_format

Array of LayoutMetricFormat objects

指标格式

metric_expand_dim

MetricDimensionExpandParam object

指标维度扩充参数

version

String

安全云脑版本

表9 derived_metrics

参数

参数类型

描述

metric_dimension

Integer

衍生指标结果维度,0维:单个数字,2维:图表或表格,3+维:多标签图表

max_query_range

Integer

指标支持的最大检索范围,单位:天;

date_start

String

指标查询范围相对起始时间 datemath表达式

date_end

String

指标查询范围相对截止时间 datemath表达式

date_format

String

时间格式,epoch_millis;epoch_second;yyyy-MM-dd'T'HH:mm:ss.SSSZ

query_type

String

获取指标结果方式,cbsl, api, dsl, sql

query_function

String

获取指标结果的方法,转义成字符串, 共四种query方式:CBSL、API、DSL、SQL

  • query_type为CBSL时,function传入dataspace_id,pipe_id,query,sort, from, to

    样例:

    {\"dataspace_id\":\"3939573a-12a0-436f-b0e5-ab2872a1fde9\",\"pipe_id\":\"9db9d8a6-d9e6-4b32-990e-40f0afe4655d\",\"query\":\"* | select ack_pps, device_type as type\",\"sort\":\"desc\",\"from\":${date_from},\"to\":${date_to}}

    转义前:

    {
        "dataspace_id":"3939573a-12a0-436f-b0e5-ab2872a1fde9",
        "pipe_id":"9db9d8a6-d9e6-4b32-990e-40f0afe4655d",
        "query":"* | select ack_pps, device_type as type",
        "sort":"desc",
        "from": ${date_from},
        "to": ${date_to}
    }
  • query_type为API时,function传入api method、url、path_params、headers、response_parser(解析API返回值所需,定义label和json_path将返回值解析为二维表格,label为表头,json_path为字段提取路径)

    样例:

    {\"method\":\"POST\",\"uri\":\"/v1/${project_id}/只填写uri/不带域名/xxx\",\"headers\":{\"X-Auth-Token\":\"${project_token}\"},\"response_parser\":{\"labels\":[\"攻击类型\",\"攻击源\",\"时间\"],\"json_path\":[\"$.data[:].type\",\"$.data[:].source\",\"$.data[:].time\"]}}

    转义前:

    {
        "method":"POST",
        "uri":"/v1/${project_id}/只填写uri/不带域名/xxx",
        "headers":{
            "X-Auth-Token": "${project_token}"
        },
        "response_parser":{
            "labels":[
                "攻击类型",
                "攻击源",
                "时间"
            ],
            "json_path":[
                "$.data[:].type",
                "$.data[:].source",
                "$.data[:].time"
            ]
        }
    }
  • query_type为DSL时,指定index, dsl(转义成字符串), response_parser

    样例:

    {\"index\":\"index_xxx_*\",\"dsl\":\"{\\\"query\\\":{\\\"match_all\\\":{}}}\",\"response_parser\":{\"labels\":[\"攻击类型\",\"攻击源\",\"时间\"],\"json_path\":[\"$.data[:].type\",\"$.data[:].source\",\"$.data[:].time\"]}}

    转义前:

    {
        "index":"index_xxx_*",
        "dsl":"{\"query\":{\"match_all\":{}}}",
        "response_parser":{
            "labels":[
                "攻击类型",
                "攻击源",
                "时间"
            ],
            "json_path":[
                "$.data[:].type",
                "$.data[:].source",
                "$.data[:].time"
            ]
        }
    }
  • query_type为sql时,指定opendistro sql插件查询json(转义成字符串)

    样例:

    {\"query\":\"SELECT count(1) as count , msg.DstPort FROM isap_log_nip_ttl* where oct >= TIMESTAMP(\\\"${date_from}\\\") and oct <= TIMESTAMP(\\\"${date_to}\\\") group by msg.DstPort order by count desc limit 5\"}

    转义前:

    {
        "query":"SELECT count(1) as count , msg.DstPort FROM isap_log_nip_ttl* where oct >= TIMESTAMP(\"${date_from}\") and oct <= TIMESTAMP(\"${date_to}\") group by msg.DstPort order by count desc limit 5"
    }
表10 LayoutMetricFormat

参数

参数类型

描述

data

String

数据格式

display

String

显示格式

display_param

Map<String,String>

显示参数

data_param

Map<String,String>

数据参数

表11 MetricDimensionExpandParam

参数

参数类型

描述

labels

Array of strings

维度扩充标签

functions

Array of strings

维度扩充方法,填写指标数据面内置方法, 参数index从1开始

状态码:400

表12 响应Header参数

参数

参数类型

描述

X-request-id

String

请求ID,格式为:request_uuid-timestamp-hostname

表13 响应Body参数

参数

参数类型

描述

code

String

参数解释:

错误码

取值范围:

不涉及

message

String

参数解释:

错误描述

取值范围:

不涉及

请求示例

更新指标请求体

{
  "cache_ttl" : 10,
  "version" : "23.9.0",
  "max_query_range" : 5,
  "name" : "name",
  "metric_type" : "LOGGING",
  "data_type" : "statistics"
}

响应示例

状态码:200

响应成功

{
  "cache_ttl" : 10,
  "compound_expression" : null,
  "data_type" : "STATISTICS",
  "derived_metrics" : [ ],
  "effective_column" : null,
  "id" : "b1f1e000-59d0-4030-bfb7-c4bff9c5ddb4",
  "is_built_in" : false,
  "max_query_range" : 5,
  "metric_dimension" : 0,
  "metric_expand_dim" : null,
  "metric_format" : [ ],
  "metric_type" : "LOGGING",
  "name" : "name",
  "report_period" : 0
}

SDK代码示例

SDK代码示例如下。

更新指标请求体

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package com.huaweicloud.sdk.test;

import com.huaweicloud.sdk.core.auth.ICredential;
import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.core.exception.ConnectionException;
import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
import com.huaweicloud.sdk.core.exception.ServiceResponseException;
import com.huaweicloud.sdk.secmaster.v1.region.SecMasterRegion;
import com.huaweicloud.sdk.secmaster.v1.*;
import com.huaweicloud.sdk.secmaster.v1.model.*;


public class UpdateMetricsSolution {

    public static void main(String[] args) {
        // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
        // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
        String ak = System.getenv("CLOUD_SDK_AK");
        String sk = System.getenv("CLOUD_SDK_SK");
        String projectId = "{project_id}";

        ICredential auth = new BasicCredentials()
                .withProjectId(projectId)
                .withAk(ak)
                .withSk(sk);

        SecMasterClient client = SecMasterClient.newBuilder()
                .withCredential(auth)
                .withRegion(SecMasterRegion.valueOf("<YOUR REGION>"))
                .build();
        UpdateMetricsRequest request = new UpdateMetricsRequest();
        request.withWorkspaceId("{workspace_id}");
        request.withMetricId("{metric_id}");
        CreateMetricRequestBody body = new CreateMetricRequestBody();
        body.withDataType("statistics");
        body.withMetricType("LOGGING");
        body.withName("漏洞TOP34");
        body.withMaxQueryRange(5);
        body.withVersion("23.9.0");
        body.withCacheTtl(10L);
        request.withBody(body);
        try {
            UpdateMetricsResponse response = client.updateMetrics(request);
            System.out.println(response.toString());
        } catch (ConnectionException e) {
            e.printStackTrace();
        } catch (RequestTimeoutException e) {
            e.printStackTrace();
        } catch (ServiceResponseException e) {
            e.printStackTrace();
            System.out.println(e.getHttpStatusCode());
            System.out.println(e.getRequestId());
            System.out.println(e.getErrorCode());
            System.out.println(e.getErrorMsg());
        }
    }
}

更新指标请求体

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# coding: utf-8

import os
from huaweicloudsdkcore.auth.credentials import BasicCredentials
from huaweicloudsdksecmaster.v1.region.secmaster_region import SecMasterRegion
from huaweicloudsdkcore.exceptions import exceptions
from huaweicloudsdksecmaster.v1 import *

if __name__ == "__main__":
    # The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
    # In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
    ak = os.environ["CLOUD_SDK_AK"]
    sk = os.environ["CLOUD_SDK_SK"]
    projectId = "{project_id}"

    credentials = BasicCredentials(ak, sk, projectId)

    client = SecMasterClient.new_builder() \
        .with_credentials(credentials) \
        .with_region(SecMasterRegion.value_of("<YOUR REGION>")) \
        .build()

    try:
        request = UpdateMetricsRequest()
        request.workspace_id = "{workspace_id}"
        request.metric_id = "{metric_id}"
        request.body = CreateMetricRequestBody(
            data_type="statistics",
            metric_type="LOGGING",
            name="漏洞TOP34",
            max_query_range=5,
            version="23.9.0",
            cache_ttl=10
        )
        response = client.update_metrics(request)
        print(response)
    except exceptions.ClientRequestException as e:
        print(e.status_code)
        print(e.request_id)
        print(e.error_code)
        print(e.error_msg)

更新指标请求体

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package main

import (
	"fmt"
	"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic"
    secmaster "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/secmaster/v1"
	"github.com/huaweicloud/huaweicloud-sdk-go-v3/services/secmaster/v1/model"
    region "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/secmaster/v1/region"
)

func main() {
    // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
    // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
    ak := os.Getenv("CLOUD_SDK_AK")
    sk := os.Getenv("CLOUD_SDK_SK")
    projectId := "{project_id}"

    auth := basic.NewCredentialsBuilder().
        WithAk(ak).
        WithSk(sk).
        WithProjectId(projectId).
        Build()

    client := secmaster.NewSecMasterClient(
        secmaster.SecMasterClientBuilder().
            WithRegion(region.ValueOf("<YOUR REGION>")).
            WithCredential(auth).
            Build())

    request := &model.UpdateMetricsRequest{}
	request.WorkspaceId = "{workspace_id}"
	request.MetricId = "{metric_id}"
	maxQueryRangeCreateMetricRequestBody:= int32(5)
	versionCreateMetricRequestBody:= "23.9.0"
	request.Body = &model.CreateMetricRequestBody{
		DataType: "statistics",
		MetricType: "LOGGING",
		Name: "漏洞TOP34",
		MaxQueryRange: &maxQueryRangeCreateMetricRequestBody,
		Version: &versionCreateMetricRequestBody,
		CacheTtl: int64(10),
	}
	response, err := client.UpdateMetrics(request)
	if err == nil {
        fmt.Printf("%+v\n", response)
    } else {
        fmt.Println(err)
    }
}

更多编程语言的SDK代码示例,请参见API Explorer的代码示例页签,可生成自动对应的SDK代码示例。

状态码

状态码

描述

200

响应成功

400

错误响应

错误码

请参见错误码

相关文档