• 简体中文
  • 可观测性

    aiod 向 stdout 写 JSON 日志,在 GET /metrics 提供 Prometheus 指标,配置端点后上报 OpenTelemetry trace。默认不主动推送。

    日志

    stdout 上每个请求一行 JSON,标记为 HTTP_REQUEST,挂在 app.request 这一 target 上。内容包括:

    字段含义
    methodpathroute这次请求,以及它匹配到的路由模板
    statusduration_msHTTP 状态码,以及响应耗时(毫秒)
    logidclient_ip请求 id,以及调用方地址
    successerror_kinderror_message处理结果,以及失败原因
    querypath_paramsrequestresponse进来的内容和返回的内容
    trace_idspan_id开了 trace 上报时才有

    凭证会在写入日志前脱敏。

    名称包含以下标记的 query 参数或 body 字段会被替换:api_keyauthorizationtokenpasswordsecretcookieticket

    替换后的值包含长度和一段短 SHA-256,可以区分不同值,但不会暴露原始内容:

    {
      "path": "/v1/bash/exec",
      "status": 200,
      "request": {
        "captured": true,
        "size": 42,
        "sha256": "9833e0d76731",
        "params": {
          "command": "echo hi",
          "password": {
            "redacted": true,
            "len": 7,
            "sha256": "f52fbd32b2b3"
          }
        }
      }
    }

    只有满足以下条件的 JSON body 才会被摘要:application/json、带明确的 Content-Length,且大小不超过 8 KiB。

    上传、流式请求、WebSocket 握手和超出上限的 body 不会被摘要。日志条目会使用 captured: false,并通过 reason 说明原因;body 仍会逐字节交给 handler。

    请求 id 按以下顺序获取:x-tt-logidx-logidx-log-idx-request-id

    这些请求头都不存在时,系统会生成一个 id。响应通过 x-tt-logid 返回该 id,并将同一个 id 传给 computer-use,因此一个 id 可以关联两个进程:

    curl -sD - -o /dev/null "$BASE_URL/v1/ping" -H "x-tt-logid: my-trace-1" | grep logid
    # x-tt-logid: my-trace-1
    变量默认值作用
    AIO_RUST_LOG_LEVELinfo日志级别,也接受 aio_daemon=debug,info 这样的 tracing 过滤表达式

    指标

    curl "$BASE_URL/metrics" -H "Authorization: Bearer <key>"

    Prometheus 文本格式,按请求生成。设置了 API key 时,/metrics 需要携带 key。一共四组指标:

    指标类型标签
    http_requests_totalCountermethodroutestatus
    http_request_duration_secondsHistogram无;整个进程一条耗时分布
    command_exec_totalCounter
    command_exec_duration_secondsHistogram

    两个 histogram 用同一套分桶,从 1 毫秒到 30 秒。没有匹配到路由的请求统一归到 <unmatched> 标签,因此扫描端点不会让时间序列数量失控。

    OpenTelemetry Trace

    默认关闭。通过环境变量启用:

    OTEL_EXPORTER_OTLP_ENDPOINT=http://collector:4317 aiod start
    变量默认值作用
    OTEL_EXPORTER_OTLP_ENDPOINT未设置配置后开启 trace 上报
    OTEL_EXPORTER_OTLP_PROTOCOLgrpcgrpchttp/protobuf
    OTEL_EXPORTER_OTLP_HEADERS未设置collector 鉴权用的请求头
    OTEL_EXPORTER_OTLP_TIMEOUT10000上报超时,单位毫秒
    OTEL_SERVICE_NAMEaiod(worker 为 computer-use打在 span 上的服务名
    OTEL_RESOURCE_ATTRIBUTES未设置附加的资源属性
    OTEL_SDK_DISABLED未设置设为 true 则即使配了端点也不上报

    _TRACES_ 的专用变量优先于通用变量。

    使用 http/protobuf 时,通用端点会被视为 base URL,并自动追加 /v1/tracesOTEL_EXPORTER_OTLP_TRACES_ENDPOINT 则按原值使用。

    每个请求一个 span(otel.kindserver,带 http.methodhttp.route)。trace context 透传:调用方的 trace 会经 daemon 转发到 computer-use。

    只支持明文 http:// 的 collector:构建里没有编入 TLS 后端。

    相关页面