Alaya NeW Cloud

下载任务日志

将某个分布式训练任务的容器日志按指定时间区间、Pod、关键字等条件导出为文件,用于离线归档或问题复盘。查询条件与查询任务日志一致,区别在于本接口返回的是整段日志内容(Base64 编码的字节流),而非逐行的结构化数据。

GEThttps://api.alayanew.com/v1/training/instance/{id}/logs/download

鉴权(Authorizations)

AuthorizationString必填

用户可通过已获取的 Open API Key 做验证。例如:Bearer [YOUR_API_KEY]

Path Parameters

idString必填

训练任务 ID(来自任务列表id)。例如:1234567890

Query Parameters

namespaceString必填

日志所在的命名空间,必填。例如:default

podNameString

Pod(节点)名称,可选。不传则导出任务下全部 Pod 的日志。取值可由查询日志 Pod 名称列表获取。例如:tn-exqr5k7lvj7k-master-0

containerNameString

容器名称,可选。同一 Pod 内有多个容器时用于精确定位。例如:tn-exqr5k7lvj7k-master-0

startTimeInteger

导出起始时间,纳秒时间戳(int64)。例如:1762837000000000000

endTimeInteger

导出结束时间,纳秒时间戳(int64),需大于 startTime。例如:1762837999000000000

limitInteger

导出日志条数上限。例如:500

filterString

按日志内容过滤(包含匹配),仅导出包含该子串的行。例如:ERROR

directionString

日志排序方向:forward 从旧到新、backward 从新到旧。例如:forward

Response

statusInteger

业务状态码,200 表示成功。

messageString

接口响应信息。例如:"OK"

dataString

日志文件内容,Base64 编码的字节流(byte)。客户端解码后即得到完整的日志文本,可直接落盘保存。例如:"W0lORk9dIExpbmUgMDAwMTAwIC0gdHJhaW5pbmcgc3RlcCBkb25lCg=="

curl -X 'GET' \
  'https://api.alayanew.com/v1/training/instance/1234567890/logs/download?namespace=default&podName=tn-exqr5k7lvj7k-master-0&startTime=1762837000000000000&endTime=1762837999000000000&limit=500&filter=ERROR&direction=forward' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer [YOUR_API_KEY]'
import base64
import requests

task_id = "1234567890"
url = f"https://api.alayanew.com/v1/training/instance/{task_id}/logs/download"
params = {
    "namespace": "default",
    "podName": "tn-exqr5k7lvj7k-master-0",
    "startTime": 1762837000000000000,
    "endTime": 1762837999000000000,
    "limit": 500,
    "filter": "ERROR",
    "direction": "forward"
}
headers = {
    "accept": "application/json",
    "Authorization": "Bearer [YOUR_API_KEY]"
}

response = requests.get(url, params=params, headers=headers)
result = response.json()
# data 为 Base64 字节流,解码后写入文件
with open("training.log", "wb") as f:
    f.write(base64.b64decode(result["data"]))
const taskId = '1234567890';
const params = new URLSearchParams({
  namespace: 'default',
  podName: 'tn-exqr5k7lvj7k-master-0',
  startTime: '1762837000000000000',
  endTime: '1762837999000000000',
  limit: '500',
  filter: 'ERROR',
  direction: 'forward'
});

fetch(`https://api.alayanew.com/v1/training/instance/${taskId}/logs/download?${params}`, {
  method: 'GET',
  headers: {
    'accept': 'application/json',
    'Authorization': 'Bearer [YOUR_API_KEY]'
  }
})
  .then(res => res.json())
  .then(result => {
    // data 为 Base64 字节流,解码得到日志文本
    const text = atob(result.data);
    console.log(text);
  })
  .catch(console.error);
{
  "status": 200,
  "message": "OK",
  "data": "W0lORk9dIExpbmUgMDAwMTAwIC0gdHJhaW5pbmcgc3RlcCBkb25lCg=="
}
{
  "status": 403,
  "message": "Forbidden",
  "data": {}
}
{
  "status": 500,
  "message": "Internal Server Error",
  "data": {}
}

Last updated on