日志转发
日志转发会在服务写出运行日志时,把它们实时发送到你自己的日志工具:Datadog、Grafana Loki(包括 Grafana Cloud)或任何 HTTPS 地址。Pro 及以上套餐包含日志转发。
添加转发目标
团队所有者和管理员打开 账号设置 → 日志转发(作用于侧边栏中选中的团队),点击 添加转发目标:
| 目标 | 需要什么 |
|---|---|
| Datadog | API 密钥(Datadog:Organization Settings → API Keys)和你账号所在的站点,例如 datadoghq.com 或 datadoghq.eu。 |
| Loki | Push 地址,例如 https://logs-prod-012.grafana.net/loki/api/v1/push;不带路径的地址会自动加上 /loki/api/v1/push。Grafana Cloud 还需要用户(stack 的数字 ID)和一个有 logs:write 权限的令牌。多租户 Loki 的租户以 X-Scope-OrgID 发送。 |
| HTTP | 任意 https:// 地址。Zenavo 会向它 POST 签名后的 JSON(见下文)。 |
选择 全部项目,包括以后新建的,或者只选部分项目。测试 会立即发送一行,并显示是否送达。每个团队最多 5 个转发目标。
地址、API 密钥和密码都属于机密:它们加密存储,控制台只显示目标的主机和路径。Zenavo 只向所有地址都是公网地址的主机发送,并且不跟随重定向。添加、修改、测试和删除转发目标都会记录在审计日志中。
发送哪些内容
运行中的服务输出的每一行,变量值和其他地方一样被遮盖([REDACTED]),并标注团队、项目和服务。构建日志不会转发。
| 目标 | 格式 |
|---|---|
| Datadog | 发送到 https://http-intake.logs.<site>/api/v2/logs,ddsource 为 zenavo,service 为服务名称,hostname 为项目名称,并带有 project、project_id、service_id 和 team_id 标签。 |
| Loki | 每个服务一个流,标签为 source="zenavo"、project、project_id、service、service_id 和 team_id。 |
| HTTP | 下文的 JSON。 |
日志按批发送,每批最多 500 行,或者每 2 秒发送一次。失败的批次会在 1、5 和 15 秒后重试;被目标拒绝的请求(例如 API 密钥错误,即除 408 和 429 以外的任何 4xx 响应)不会重试。重试之后仍失败的批次会被丢弃。每个转发目标最多缓存 10,000 行;目标处理不过来时,较新的行会被丢弃。控制台会显示每个转发目标最近一次发送的结果或失败原因,以及丢弃了多少行。控制台中的日志(实时和已保存的)永远不受转发影响。
发送是至少一次(at-least-once):控制面重启时,最近几分钟的日志可能会被再次发送。
HTTP 请求内容
{
"logs": [
{
"time": "2026-10-22T08:00:00.123456789Z",
"message": "GET /cart 200 12ms",
"team_id": "team_…",
"project_id": "proj_…",
"project": "shop",
"service_id": "svc-…",
"service": "web"
}
]
}任何 2xx 响应都视为已送达。每个请求都带有 X-Zenavo-Timestamp(Unix 秒)和 X-Zenavo-Signature: v1=<hex>,后者是用转发目标的签名密钥对 <timestamp>.<原始请求体> 计算的 HMAC-SHA256,与通知 Webhook 的方案相同。密钥(whsec_…)在添加转发目标时只显示一次;更换密钥 会替换它,并只显示一次新密钥。
套餐
日志转发需要 Pro、Team 或企业版套餐。团队换到不包含它的套餐后,转发会停止;转发目标仍然可以关闭、编辑或删除,升级后会重新开始转发。