CLI 的工作方式
在终端中使用易读的文本输出。在脚本和编码智能体中使用--json。
读取账号数据需要账号登录。开始登录之前,先运行 logbrew status --json。浏览器授权必须由人完成。项目接入密钥用于发送遥测数据,不能代替账号登录。
创建项目、创建密钥、更改问题的状态、优先级和负责人、记录部署以及更新支持工单,都会更改账号数据。运行这类命令之前,确认要执行的命令和目标都正确。
运行 logbrew --help 查看所有命令。在命令后添加 --help(例如 logbrew read logs --help)可查看该命令的选项。运行 logbrew help json 查看 JSON 规则。
读取项目 doctor 报告
使用logbrew projects --json 返回的项目 ID:
status、checks 和 next。每项检查包含 check、status 和 next。检查项为 api、auth、project、ingest_key、setup、telemetry 和 logs。
退出码 0 表示 CLI 已写出报告,并不表示项目已就绪。阅读报告的 status 和每项检查。状态为 not_checked 的检查没有通过。
项目读取成功时,
logs 检查的结果为 visible、empty、unavailable、error 或 invalid_response。此检查不会改变报告的 status。日志结果为空,并不说明其他信号的情况。读取失败不等于结果为空。
把 next 当作恢复指引。它并不授权你更改账号或项目状态。
示例:缺少账号访问
没有账号凭据时,该命令不会发出 API 请求。它会把以下报告写到标准输出,并以退出码0 退出:
state、setup_status 或 next_action。
筛选条件
--since 接受 24h 或 7d 这样的时长,或 RFC 3339 时间戳。--until 接受 RFC 3339 时间戳。它表示不包含在内的结束时间,且必须晚于 --since。按 ID 读取单个问题时,不接受 --until。
日志的严重程度为 info(信息)、warning(警告)、error(错误)或 critical(严重)。问题状态是问题的工作流状态,而不是严重程度。--status ignored 是 --status archived 的旧名称。--status open 表示 unresolved,--status closed 表示 resolved。--assignee none 选择没有负责人的问题,--assignee my_teams 选择你所在团队的问题。--assignee 的其他值都会以 invalid_assignee 失败。
CLI 还接受以下别名:--project-id、--env、--service-name、--trace-id、--distinct-id,以及作为 --severity 别名的 --level。在新脚本中使用表格中的名称。
此命令读取 1 天内的错误:
--:
选择问题的发生记录
一个问题会把匹配的发生记录归为一组。读取问题可获取它的状态、发生次数,以及首次出现和最近出现的时间:explain issue 或 investigate issue 获取某一条发生记录的证据。不加 --occurrence 时,LogBrew 会选择推荐的发生记录,它不一定是最新的发生记录。要读取最新的发生记录:
--occurrence 还接受 recommended、first 或 LogBrew 返回的发生记录 ID。这些命令不接受项目、版本、环境和时间筛选条件。比较证据之前,先读取所选发生记录的时间戳。证据字段请参阅排查问题。
更改问题状态和优先级
使用 1 个问题 ID 更改 1 个问题:archive 设置为 archived(已归档),resolve 设置为 resolved(已解决),reopen 设置为 unresolved(未解决)。优先级为 high(高)、medium(中)或 low(低)。你手动设置的优先级会保持不变。否则,优先级跟随问题的严重程度。
要更改多个问题,添加 --project。所有问题都必须属于该项目。一条命令最多更改 100 个问题:
updated、unchanged 或 not_found。unchanged 表示该问题已经是所请求的值。网络故障后,可以再次运行同一条命令。
这些命令不会要求确认。先检查问题 ID。问题的读取和更改结果显示 archived 而不是 ignored,并显示每个问题的 priority、priority_source 和 assignee。请参阅问题响应。
分配问题
一个问题有 0 或 1 个负责人:一个账号或一个团队。列出项目中可以分配的账号和团队:me 分配给自己,或分配给某个团队:
--project 可更改该项目中最多 100 个问题。账号必须能够读取该项目,团队必须属于该项目所在的组织。查找分配给你或你所在团队的问题:
team #<slug>。如果账号没有姓名,显示电子邮件地址;如果也没有电子邮件地址,显示用户 ID。没有负责人的问题显示 unassigned(未分配)。
所有者、变更历史和收件箱
issues owners 列出建议的所有者,以及它检查过的证据。issues ownership set 发送本地文件,每个文件不超过 128 KiB。发送空文件会清空对应的文本。issues activity 和 inbox 接受 1 到 200 之间的 --limit,以及取自 next_cursor 的 --cursor-time 和 --cursor-id。请参阅查找问题的所有者。
设置严重程度规则
info、warning、error、critical 或 source。source 会重新显示采集到的严重程度。--ignore 会在默认日志列表中隐藏匹配的日志。不带 --ignore 时,规则会显示这些日志。
读取下一页
日志、问题、操作、指标和链路支持游标分页,版本不支持。第一页使用--pagination cursor:
logs 和 next_cursor。非 null 的 next_cursor 包含 time 和 id。通过 --cursor-time 和 --cursor-id 发送它们:
next_cursor 为 null 时停止。根据游标而不是行数判断是否还有更多页。最后一页可能为空:
issues、actions 或 metrics 代替 logs。
实时查看
logbrew watch --json 实时流式输出日志、问题和操作。添加 logs、issues 或 actions 可只输出一种类型。tail、follow 和 stream 是 watch 的别名。watch 不支持链路或 Span。
watch 需要 --json。不加时,命令会以退出码 1 退出,并输出 watch streams JSON for agents。
watch 中的问题事件会把已归档的问题显示为 ignored,且不包含优先级。读取该问题可获取它当前的状态和优先级。
watch 只接受 --severity,例如 --severity error,critical。logbrew watch actions 不接受 --severity。CLI 在收到事件之后才应用此筛选条件,不会减少服务器发送的数据。watch 没有项目、版本、环境或时间筛选条件。需要这些筛选条件时,使用 read 命令。临时断开连接后,CLI 会等待一段时间,然后重新连接。
读取结果和错误
把--json 放在命令之前或之后都可以。使用输出之前,先读取退出码。不要解析供人阅读的输出,它可能在不同版本之间变化。
成功输出保持 API 响应的结构,可能是数组或对象。不使用游标分页时,读取日志会返回一个数组。空数组表示没有匹配的日志,不是错误。
错误输出到标准错误。例外是
debug-artifacts --json,它会把错误写到标准输出。JSON 错误包含 ok、error、message 和 next。把 error 当作稳定的失败代码。运行 next 建议的命令之前,先检查它。
例如,logbrew watch traces --json 会以退出码 2 退出,并输出:
logbrew read logs --limit 0 --json 会以退出码 2 退出,并输出:
