
# Log数据上报
Log数据用于记录智能体运行过程中产生的日志信息，便于排查异常、追踪运行状态。日志最终写入华为云的LTS（云日志服务）。
AgentArts支持通过API方式接入日志采集：
表1Log数据采集方式说明 
| 接入方式  | 适用场景                   | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
|:---|:---|:---|
| API接入 | 通用场景，需主动调用LTS接口手动上报日志。 | 在智能体代码中直接调用LTS提供的REST API，主动将日志数据推送至LTS。需要修改业务代码添加上报逻辑，但对智能体的部署环境没有限制。 - 接入复杂度：需要自行构造HTTP请求。  - 鉴权方式：通过X-Auth-Token鉴权。  - 需要准备的参数：lts_exporter_endpoint、project_id、lts_group_id、lts_stream_id、agent_id、agent_type   |
   
上报的日志数据将写入华为云LTS（云日志服务），LTS会根据日志数量按需计费，详细计费规则请参考[LTS计费说明](https://support.huaweicloud.com/price-lts/lts-03216.html)。
#### API接入
通过调用LTS REST API，在代码中主动上报日志数据。
**接入地址**
```
POST {lts_exporter_endpoint}/v2/{project_id}/lts/groups/{lts_group_id}/streams/{lts_stream_id}/tenant/contents
```
URI中的四个路径参数，取值可在平台页面获取，详细获取方法可参考后续步骤：
表2路径参数 
| 参数                    | 是否必选 | 参数类型   | 说明                                                                                |
|:---|:---|:---|:---|
| lts_exporter_endpoint | 是    | String | LTS的接入地址。                                                                         |
| project_id            | 是    | String | 华为云项目ID。                                                                          |
| log_group_id          | 是    | String | 日志组ID。                                                                            |
| log_stream_id         | 是    | String | 日志流ID。 每个日志流写入速率最大不能超过100MB/s，超过此规格可能会导致日志丢失。 |
   
图1获取路径参数取值   
![](https://support.huaweicloud.com/ops-agentarts/zh-cn_image_0000002717835549.png)
**请求头**
```
Content-Type: application/json;charset=UTF-8
X-Auth-Token: {从IAM获取的用户Token}
```
注意：与Trace/Metric上报使用OTel SDK + 专用Token不同，Log上报使用的是IAM用户Token（X-Auth-Token）进行鉴权，获取方法请参考[附录：获取Token]。
**请求体结构**
```
{
  "log_time_ns": 1586850540000000000,
  "contents": [
    "Fri Feb  1 07:48:04 UTC 2019 0",
    "Sat April 18 16:04:04 UTC 2019"
  ],
  "labels": {
    "__label__.task_name": "{{agent_id}}",
    "__label__.task_type": "{{agent_type}}"
  }
}
```
表3请求体参数 
| 参数          | 是否必填            | 类型 | 说明                                                                                                                                                                                                                                                     |
|:---|:---|:---|:---|
| log_time_ns | Long            | 是  | 日志上报时间，UTC时间（纳秒）。上报时间距当前时间不可超过2天，否则日志将被LTS自动删除。                                                                                                                                                                                                        |
| contents    | Array of String | 是  | 日志内容，字符串数组，每个元素为一条日志记录，支持一次上报多条。                                                                                                                                                                                                                       |
| labels      | Object          | 是  | 自定义标签，用于日志分类与过滤。 __label__.task_name为必填字段（填写智能体ID），__label__.task_type为必填字段（填写智能体类型，如agent、multiagents、workflow，分别表示单智能体、多智能体、工作流）。 请勿使用LTS内置保留字段作为标签名称，否则可能造成字段名称重复、查询不精确等问题。 |
   
**上报Log数据示例代码**
本示例使用手动构造的静态模拟数据，用于首次接入AgentArts时，验证接入地址、鉴权Token、日志组ID及日志流ID是否配置正确，并确认平台能否正常接收日志数据。此阶段使用手动构造的静态数据，不涉及真实的智能体调用。
1. 获取上报参数。 
   1. 在AgentArts平台左侧导航栏中选择"运营运维 \> 观测"，并进入"智能体列表"页面。
   
   2. 单击"智能体接入"，填写智能体名称，并选择类型。类型按实际选择。
      图2智能体接入   
      ![](https://support.huaweicloud.com/ops-agentarts/zh-cn_image_0000002688075930.png) 
   
   3. 填写完成后，单击"创建"等待平台自动创建接入信息，记录接入地址、鉴权信息、智能体ID等信息。请妥善保管该信息。
      表4接入信息说明 
      | 参数                                                                                                                                                                      | 说明                                                                                                                                                                     |
      |:---|:---|
      | lts_exporter_endpoint project_id log_group_id log_stream_id | 选择"Log上报 \> API接入"，平台会提供完整的接入地址，各参数取值地址中均有包含。 ![](https://support.huaweicloud.com/ops-agentarts/zh-cn_image_0000002717835545.png) |
      | __label__.task_name __label__.task_type                                                                                           | 分别表示智能体ID、智能体类型。 ![](https://support.huaweicloud.com/ops-agentarts/zh-cn_image_0000002717835547.png)                                |
         
      
   
   
   
   
2. 安装依赖库。 
   ```
   pip install requests==2.31.0
   pip install python-dotenv==1.0.0
   ```
   
   
3. 编写日志上报脚本。 
   ```
   import time
   import requests
   # 1. 替换为您的真实接入凭证
   AGENT_ID = "您的智能体ID"
   AGENT_TYPE = "您的智能体类型"
   LTS_ENDPOINT = "从平台复制的完整Log接入地址"
   X_AUTH_TOKEN = "您的IAM用户Token"
   # 2. 请求头
   HEADERS = {
       "Content-Type": "application/json;charset=UTF-8",
       "X-Auth-Token": X_AUTH_TOKEN,
   }
   def test_connection():
       # 【注意】此处为模拟数据，仅供测试连通性，实际场景需在智能体交互流程中动态上报
       payload = {
           "log_time_ns": int(time.time() * 1e9),
           "contents": [
               "[INFO] 连通性测试日志 - 智能体启动",
               "[INFO] 连通性测试日志 - 模型调用成功",
           ],
           "labels": {
               "__label__.task_name": AGENT_ID,
               "__label__.task_type": AGENT_TYPE
           }
       }
       response = requests.post(LTS_ENDPOINT, headers=HEADERS, json=payload)
       if response.status_code in (200, 201, 204):
           print("连通性测试成功，请前往AgentArts控制台查看日志数据。")
       else:
           print(f"连通性测试失败，状态码：{response.status_code}，响应：{response.text}")
   if __name__ == "__main__":
       test_connection()
   ```
   
   
4. 运行Python脚本，执行测试，验证上报数据。
 
 #### 附录：获取Token
Token在计算机系统中代表令牌（临时）的意思，拥有Token就代表拥有某种权限。Token认证就是在调用API的时候将Token加到请求消息头，从而通过身份认证，获得操作API的权限。
Token的有效期为24小时，需要使用一个Token鉴权时，可以先缓存起来，避免频繁调用。
Token可通过调用"获取用户Token"接口获取，请求示例如下所示。
**username** **、** **domainname、project name** 可登录控制台["我的凭证 \> API凭证"](https://console.huaweicloud.com/iam/#/myCredential)页面获取。password为用户密码。
图3获取凭证   
![](https://support.huaweicloud.com/ops-agentarts/zh-cn_image_0000002687916078.png)
- 伪码
  ```
  POST https://iam.cn-southwest-2.myhuaweicloud.com/v3/auth/tokens
  Content-Type: application/json
  { 
      "auth": { 
          "identity": { 
              "methods": [ 
                  "password" 
              ], 
              "password": { 
                  "user": { 
                      "name": "username", //IAM用户名
                      "password": "********", //密码
                      "domain": { 
                          "name": "domainname" //账号名
                      } 
                  } 
              } 
          }, 
          "scope": { 
              "project": { 
                  "name": "project name" //替换为实际的project name，如cn-southwest-2
              } 
          } 
      } 
  }
  ```
  
- Python
  ```
  import requests
  import json
  url = "https://iam.cn-southwest-2.myhuaweicloud.com/v3/auth/tokens"
  payload = json.dumps({
    "auth": {
      "identity": {
        "methods": [
          "password"
        ],
        "password": {
          "user": {
            "name": "username",
            "password": "********",
            "domain": {
              "name": "domainname"
            }
          }
        }
      },
      "scope": {
        "project": {
          "name": "cn-southwest-2"
        }
      }
    }
  })
  headers = {
    'Content-Type': 'application/json'
  }
  response = requests.request("POST", url, headers=headers, data=payload)
  print(response.headers["X-Subject-Token"])
  ```
  
#### 常见问题
**调用API后，AgentArts观测页面看不到日志数据怎么办？**
1. 检查接入参数：确认lts_group_id、lts_stream_id、project_id、lts_exporter_endpoint与接入指南中获取的信息一致。
2. 检查鉴权Token：确认X-Auth-Token为有效的IAM用户Token，Token存在24小时有效期，过期后需重新获取。
3. 检查labels取值：该字段为必填项，必须填写智能体ID、智能体类型，缺失或填写错误将导致平台无法关联日志至对应智能体。
4. 检查时间戳：log_time_ns必须为纳秒级UTC时间戳，且与当前时间相差不超过2天，超出时间范围的日志会被LTS自动删除。
5. 等待数据同步：数据上报后通常需要1\~2分钟才能在观测页面展示，请稍后刷新查看。
 
