请求日志下载
请求日志导出接口
Base URL: https://api.qnaigc.com
概述
本接口用于导出请求日志(monitor_log),是 log 查询接口的导出版本。提供两个接口:
GET /v2/stat/export_log:以 JSON 响应体返回(带统一包裹结构)。GET /v2/stat/export_log_file:以 JSON 文件形式返回(浏览器触发下载,响应体为裸数组)。
两个接口的查询参数、鉴权方式、过滤与排序逻辑完全相同,仅返回结构不同(见下方各接口的响应说明)。
日志保留周期约为 30 天(以实际配置为准),请及时下载所需数据。
认证方式
支持两种鉴权方式:
-
APIKey 认证:使用 APIKey 进行认证
Authorization: Bearer <APIKey> -
AK/SK 签名认证:使用七牛云标准的 AK/SK 签名认证
Authorization: Qiniu <AccessKey>:<EncodedSign>
数字签名生成算法可参考文档站中「批量生成 APIKey」部分。
查询参数(两接口通用)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
start |
string |
否 | 开始时间,格式为 RFC3339(2006-01-02T15:04:05Z07:00)。作为时间过滤的左闭边界(>=)。建议传入以限定查询范围。 |
end |
string |
否 | 结束时间,格式为 RFC3339。作为时间过滤的右开边界(<)。当 start 与 end 同时传入时才会校验范围上限。 |
size |
integer |
是 | 每页返回数据条数,范围为 1~500,无默认值,不传或越界将返回 400 错误。 |
page |
integer |
否 | 页码,从 1 开始,不传或 <=0 时默认为 1。用于超出 500 条数据的分批导出。 |
model |
string |
否 | 模型名称,用于过滤特定模型的请求日志。示例:deepseek/deepseek-v3.1 |
code |
integer |
否 | HTTP 状态码过滤,精确匹配。0 或不传表示不限制(返回所有状态码)。示例:200 |
apikey |
string |
否 | APIKey 值,用于过滤特定 APIKey 的请求日志,会同时匹配带或不带 Bearer 前缀的记录。示例:sk-xx |
请求头:
| 名称 | 类型 | 必填 | 描述 |
|---|---|---|---|
Authorization |
string |
是 | 支持 APIKey 与 AK/SK 两种鉴权方式 |
排序与时间限制
- 排序:结果固定按请求开始时间(
start_time)倒序排列,不支持自定义排序。 - 时间上限:当
start与end同时传入时,end - start不得超过 35 天,且end不得早于start,否则返回 400 错误。 - 仅传入
start或end其中一个时,不做范围上限校验(按单边过滤)。 - 时间按项目标准时区 CST(东八区)解析。
接口一:导出日志(JSON 响应体)
GET /v2/stat/export_log
以项目统一响应结构返回 JSON,data 字段直接为日志数组。
请求示例:
curl --location "https://api.qnaigc.com/v2/stat/export_log?start=2024-01-01T00:00:00Z&end=2024-01-08T00:00:00Z&size=100&page=1" \
--header "Authorization: Bearer sk-xx"
成功响应(200 OK)
{
"status": true,
"data": [
{
"id": "65a1f2c3...",
"model_id": "deepseek/deepseek-v3.1",
"api_key": "sk-***xxxx",
"start_time": "2024-01-01T10:00:00+08:00",
"end_time": "2024-01-01T10:00:02+08:00",
"server_type": "chat",
"code": 200,
"errors": null,
"state": "",
"usage": {
"input": 1024,
"output": 512,
"cached_input": 0,
"cache_creation": 0
},
"bo_usage": {
"input_tokens": 1024
},
"bo_usage_cost": {
"input_tokens": 0.001
}
}
]
}
接口二:导出日志(JSON 文件下载)
GET /v2/stat/export_log_file
以文件形式返回。响应头包含:
Content-Disposition: attachment; filename=logs.json
Content-Type: application/json
响应体为裸数组(没有 status / data 包裹),内容与 export_log 的 data 字段完全一致。
请求示例:
curl --location "https://api.qnaigc.com/v2/stat/export_log_file?start=2024-01-01T00:00:00Z&end=2024-01-08T00:00:00Z&size=100&page=1" \
--header "Authorization: Bearer sk-xx" \
-o logs.json
成功响应(200 OK)
[
{
"id": "65a1f2c3...",
"model_id": "deepseek/deepseek-v3.1",
"api_key": "sk-***xxxx",
"start_time": "2024-01-01T10:00:00+08:00",
"end_time": "2024-01-01T10:00:02+08:00",
"server_type": "chat",
"code": 200,
"errors": null,
"state": "",
"usage": {
"input": 1024,
"output": 512
}
}
]
注意区别:
export_log返回{"status":true,"data":[...]};export_log_file直接返回[...]。两者字段含义相同,仅包裹方式不同。
响应字段说明(日志对象 data[])
| 字段 | 类型 | 说明 |
|---|---|---|
id |
string |
日志记录的唯一 ID(MongoDB 文档 _id) |
model_id |
string |
请求所使用的模型标识 |
api_key |
string |
发起请求的 APIKey(已脱敏处理) |
start_time |
string |
请求开始时间,RFC3339 格式 |
end_time |
string |
请求结束时间,RFC3339 格式 |
server_type |
string |
服务类型,如 chat / image / video 等 |
code |
integer |
上游返回的 HTTP 状态码 |
errors |
array<string> |
错误信息列表,无错误时为 null |
state |
string |
请求状态标识 |
usage |
object |
用量统计。key 因模型类型不同而异,常见包括 input、output、cached_input、cache_creation(文本/对话类),tts_bytes(TTS)、asr_ms(ASR)、ocr_requests(OCR)、search_requests(搜索)、video_second(视频)等;无用量数据时为 null |
bo_usage |
object |
BO 计费用量明细(按计费项 key 聚合),无数据时省略 |
bo_usage_cost |
object |
BO 计费用量对应的费用(人民币元),无数据时省略 |
错误响应
接口对错误采用两种返回风格:
1. 真实 HTTP 错误状态码(status:false + error 对象)
| HTTP 状态码 | 触发条件 | 响应示例 |
|---|---|---|
400 |
参数错误:size 越界、时间格式非法、时间范围超过 35 天、end 早于 start 等 |
{"status":false,"error":{"message":"invalid size,should be between 1 and 500","type":"param err"}} |
401 |
AK/SK 签名无效或缺失 | {"status":false,"error":{"message":"invalid ak/sk sign","type":"authorization err"}} |
2. HTTP 200 + status:false(项目统一错误风格)
| 场景 | 响应示例 |
|---|---|
| APIKey 无效或未提供鉴权 | {"status":false,"error":"UNAUTHENTICATED"} |
| 服务器内部错误(如数据库查询失败) | {"status":false,"error":"INTERNAL_ERROR"} |
⚠️ 注意:鉴权失败(APIKey 模式)与服务器内部错误返回的是 HTTP 200,需以响应体中的
"status": false判断是否成功。
代码示例
使用 APIKey 认证
curl --location "https://api.qnaigc.com/v2/stat/export_log?start=2024-01-01T00:00:00Z&end=2024-01-08T00:00:00Z&size=100&page=1" \
--header "Authorization: Bearer sk-xx"
使用 AK/SK 签名认证
curl --location "https://api.qnaigc.com/v2/stat/export_log?start=2024-01-01T00:00:00Z&end=2024-01-08T00:00:00Z&size=100&page=1&model=deepseek/deepseek-v3.1" \
--header "Authorization: Qiniu <AccessKey>:<EncodedSign>"
导出为文件
curl --location "https://api.qnaigc.com/v2/stat/export_log_file?start=2024-01-01T00:00:00Z&end=2024-01-08T00:00:00Z&size=100&page=1" \
--header "Authorization: Bearer sk-xx" \
-o logs.json
分批导出大量数据
单次最多返回 500 条(size 上限为 500)。如需导出 1500 条,需分 3 次请求,每次仅修改 page,其余参数保持不变:
# 第 1 批:page=1, size=500
curl --location "https://api.qnaigc.com/v2/stat/export_log?start=2024-01-01T00:00:00Z&end=2024-01-08T00:00:00Z&size=500&page=1" \
--header "Authorization: Bearer sk-xx"
# 第 2 批:page=2, size=500
curl --location "https://api.qnaigc.com/v2/stat/export_log?start=2024-01-01T00:00:00Z&end=2024-01-08T00:00:00Z&size=500&page=2" \
--header "Authorization: Bearer sk-xx"
# 第 3 批:page=3, size=500
curl --location "https://api.qnaigc.com/v2/stat/export_log?start=2024-01-01T00:00:00Z&end=2024-01-08T00:00:00Z&size=500&page=3" \
--header "Authorization: Bearer sk-xx"
注意事项
- 两接口仅返回结构不同:
export_log返回{status, data}包裹;export_log_file返回裸数组并触发文件下载。参数、鉴权、过滤与排序逻辑完全一致。 - 时间范围:
start与end同时传入时,跨度上限为 35 天,且end不得早于start;单边传入不校验上限。 size必填:范围为1~500,无默认值,不传或越界返回 400。- 分页:超出 500 条时用
page分批,每次仅改page、其余参数不变。 - 排序:固定按
start_time倒序,不支持自定义。 - 时间格式:RFC3339(
2006-01-02T15:04:05Z07:00),按东八区解析。 - APIKey 脱敏:返回结果中的
api_key已做脱敏处理,非完整明文。 - 成功判断:APIKey 模式下鉴权失败与服务器错误均返回 HTTP 200,须依据响应体
"status"字段判断。
文档反馈
(如有产品使用问题,请 提交工单)