更新时间:2026-09-15 GMT+08:00
分享

使用API调用观测接口

此类接口与单/多智能体、工作流的调用方式有所差异。认证鉴权信息中的Authorization、X-Sdk-Date的值需要通过一个API签名SDK获取。

这类接口的域名地址为:agentarts.cn-southwest-2.myhuaweicloud.com

接口Header由三个参数构成:Authorization、X-Sdk-Date、Content-Type,其中Content-Type的固定值为application/json。

本案例以Python调用“查询Trace列表”接口(POST /v1/ops/observation/traces)为例进行讲解。该接口用于在观测页面查询Trace数据列表。

前置检查

  • 已开通AgentArts服务。
  • IAM用户需具备对应授权项:agentarts::listOpsTrace,同时依赖apm:apm2TraceEvents:get、apm:apm2Service:get权限;账号根用户默认拥有调用权限。

步骤一:了解接口参数

获取Trace列表接口请求URI如下:

POST /v1/ops/observation/traces

拼接域名地址后,完整的调用接口为:https://agentarts.cn-southwest-2.myhuaweicloud.com/v1/ops/observation/traces

本接口的必填参数只有Header的Authorization、X-Sdk-Date、Content-Type,其中Authorization、X-Sdk-Date参数取值方法请参见后续步骤,Content-Type的固定值为application/json。参数含义如下:

表1 请求Header参数

参数

是否必选

参数类型

描述

Content-Type

是

String

参数解释:

消息体编码格式。用于告知服务端请求体(Body)所采用的主体数据类型,以便服务端正确解析。

约束限制:

不涉及。

取值范围:

不涉及。

默认取值:

application/json。

Authorization

是

String

参数解释:

签名认证信息,当使用AK/SK方式认证时,使用SDK对请求进行签名的过程中会自动填充该字段。

约束限制:

不涉及。

取值范围:

不涉及。

默认取值:

不涉及。

X-Sdk-Date

是

String

参数解释:

请求发送的时间,当使用AK/SK方式认证时,使用SDK对请求进行签名的过程中会自动填充该字段。

约束限制:

不涉及。

取值范围:

不涉及。

默认取值:

不涉及。

请求Body参数说明

请求Body为JSON格式,全部参数均为非必选,支持时间范围、资源、trace_id、会话、标签、分页等多维度条件过滤。

虽然Body参数均为非必填,但在实际接口调用时,建议填写以下参数以确保获取到有效数据。尤其是start_time和end_time参数,如果不填写,接口可能返回空数据。填写这两个时间参数时,需确保所选时间范围内已有实际的调用数据产生,接口才会返回对应的Trace数据。

建议填写的参数如下:

  • page_no、page_size:分页控制参数,建议填写以管理返回数据量。
  • start_time、end_time:毫秒级Unix时间戳,限定Trace查询时间区间。如不填写,接口可能不返回数据;填写时需确保时间范围内存在调用数据。
  • span_type:用于过滤哪些节点上报的数据。

完整参数字段、结构体、约束、取值范围,请参见API参考文档查询trace列表‑ListOpsTrace的请求参数章节。

步骤二:构造接口调用脚本

安装运行环境:

  • 安装Python:如果您尚未安装,去python.org下载并安装(记得安装时勾选 "Add Python to PATH")。
  • 安装requests库:

    打开电脑的“命令提示符”(Windows按Win+R键输入cmd),输入以下命令并按回车:

    pip install requests

获取API签名所需的SDK包:

  1. 在签名指南文档中下载Python SDK,并在本地解压。签名指南文档中的其他内容本案例中可不用关注。

    图1 获取SDK

    解压后的文件目录结构如下:

    ApiGateway-python-sdk/              ← 根目录(解压出来的文件夹)
    │
    ├── apig_sdk/                       ← 【核心签名库,不要动!】
    │   ├── __init__.py                 ← 包的入口标识文件
    │   └── signer.py                   ← 签名核心代码(所有签名逻辑都在这里)
    │
    ├── main.py                         ← 【您要改的文件】调用示例
    │
    └── licenses/                       ← 开源许可证文件夹(不用管)
        └── license-requests            ← requests库的许可证说明
    图2 目录结构

构造接口调用脚本

  1. 获取AK、SK,并添加至本地电脑的环境变量中。

    1. 登录控制台“我的凭证 > 访问密钥”,获取AK和SK。AK、SK最多可添加2个。
      图3 获取AK、SK
      图4 AK、SK示例
    2. 通过以下命令,在Windows的命令提示符cmd中设置临时环境变量。
      set HUAWEICLOUD_SDK_AK=您的Access Key
      set HUAWEICLOUD_SDK_SK=您的Secret Key
    3. 通过以下命令检查环境变量是否生效。
      echo %HUAWEICLOUD_SDK_AK%
      echo %HUAWEICLOUD_SDK_SK%

  2. 打开Python SDK的文件夹目录,编辑main.py脚本,添加具体的业务接口信息。

    用记事本(或者安装了代码编辑器如VS Code)打开main.py脚本,删除原有内容,并将下方代码添加进去。

    示例中已经将“查询Trace列表”接口的示例填入,可以直接使用。如果更换其他接口也可以参考脚本的批注进行填写。

    # -*- coding: utf-8 -*-
    # Copyright (c) Huawei Technologies CO., Ltd. 2022-2025. All rights reserved.
    import os
    import json
    import requests
    from apig_sdk import signer
    
    def demo_api_call():
        # --- 1. 初始化签名对象 ---
        sig = signer.Signer()
        ak = os.getenv('HUAWEICLOUD_SDK_AK')
        sk = os.getenv('HUAWEICLOUD_SDK_SK')
        if not ak or not sk:
            print("错误:未找到环境变量 HUAWEICLOUD_SDK_AK 或 HUAWEICLOUD_SDK_SK")
            return
        sig.Key = ak.strip()
        sig.Secret = sk.strip()
    
        # --- 2. 构造请求参数(全部使用英文符号!!) ---
        method = "POST"
        # 重要:这里全部是英文短横线 `-`
        url = "https://agentarts.cn-southwest-2.myhuaweicloud.com/v1/ops/observation/traces"
    
        headers = {
            "Content-Type": "application/json"
        }
        # POST请求体示例:分页+时间范围过滤
        req_body = {
            "page_no": 1,
            "page_size": 10,
            "start_time": 1787648299491,
            "end_time": 1788857899491,
            "span_type": "root"
        }
        body = json.dumps(req_body, ensure_ascii=False)
    
        # --- 3. 执行签名 ---
        r = signer.HttpRequest(method, url, headers, body)
        sig.Sign(r)
    
        print(f"--- 鉴权信息 ---")
        print(f"X-Sdk-Date: {r.headers.get('X-Sdk-Date')}")
        print(f"Authorization: {r.headers.get('Authorization')}\n")
    
        # --- 4. 发起请求并处理响应 ---
        try:
            resp = requests.request(
                method=r.method,
                url=r.scheme + "://" + r.host + r.uri,
                headers=r.headers,
                data=r.body
            )
            print(f"--- 响应结果 ---")
            print(f"状态码: {resp.status_code} {resp.reason}")
            if resp.status_code == 200:
                print(json.dumps(resp.json(), indent=4, ensure_ascii=False))
            else:
                print(resp.text)
        except Exception as e:
            print(f"请求发生异常: {e}")
    
    if __name__ == '__main__':
        demo_api_call()

  3. 脚本编辑完成后,保存并关闭该脚本。

步骤三:运行脚本获取接口响应

  1. 在Python SDK的文件夹上方显示路径的地址栏里,清空地址,直接输入cmd后按回车。

  2. 在打开的命令提示符窗口中会显示出当前的文件夹路径,输入以下命令执行脚本。

    python main.py

    运行该脚本会返回接口的鉴权信息值,以及接口的响应结果。

    图5 运行示例
    图6 控制台示例

    没有数据时,响应示例如下:

    图7 运行示例

相关文档