可观测性
使用运行状况探测、结构化日志、OTLP 跟踪和 Runtime Console 运行时视图。
Lenso 有两个可观察层:
- 操作员的流程级运行状况、日志和跟踪;
- Runtime Console 视图由模块活动的平台/运行时表支持。
platform-admin 拥有 /admin/runtime/* 下的运行时可观测性 API。这是
平台问题,而不是产品模块,并读取平台/运行时表,例如
作为Outbox事件、Story 事件、运行时函数运行、Provider调用,以及
遥测跨度。
健康探测
基本路由器在 OpenAPI 合约之外公开探针:
curl -sS http://127.0.0.1:3000/livez | jq .
curl -sS http://127.0.0.1:3000/readyz | jq .
/livez 返回进程活跃度。 /readyz 运行注册的健康检查和
返回 healthy 或 unhealthy。
日志
使用环境变量配置日志:
| 变量 | 目的 |
|---|---|
RUST_LOG |
跟踪过滤器,默认为 info |
LOG_FORMAT |
compact 或 json |
APP_ENV |
部署环境名称 |
SERVICE_NAME |
服务名称,默认为lenso |
本地可读日志:
RUST_LOG=info LOG_FORMAT=compact lenso serve
生产风格的 JSON 日志:
RUST_LOG=info,tower_http=warn LOG_FORMAT=json cargo run --bin api
OTLP 追踪
仅当收集器运行时设置 OTEL_EXPORTER_OTLP_ENDPOINT:
OTEL_EXPORTER_OTLP_ENDPOINT=http://127.0.0.1:4317 cargo run --bin api
对于存储库的本地收集器:
just observability-up
如果本地冒烟由于收集器不可用而失败,请取消设置 端点:
unset OTEL_EXPORTER_OTLP_ENDPOINT
Runtime Console 视图
打开:
http://127.0.0.1:3000/console
使用Runtime Console检查:
- 加载的模块和Manifest lints;
- 运行时函数声明和运行;
- 作为函数运行排队后安排的运行时工作;
- Outbox和Story 事件;
- Service Provider 调用;
- 模块健康状况和安装状态;
- 与遥测跨度相关的技术操作。
当模块操作失败时,从 API 错误或日志中复制 correlation_id
使用该 ID 行并搜索Runtime Console Story/技术操作视图。
Cron 触发的工作使用相同的证据路径:工作人员记录时间表
状态,在到期时将运行时函数运行排入队列,并且该函数运行出现在
与其他后台工作相同的 Runtime Console 视图。
从模块记录什么
使用结构化字段将日志连接到Runtime Console 证据:
use lenso::host::http::HttpRequestContext;
fn log_invoice_finalized(request: &HttpRequestContext, invoice_id: &str) {
tracing::info!(
module = "billing",
invoice_id = %invoice_id,
correlation_id = %request.correlation_id.0,
"invoice finalized"
);
}
在需要请求或的处理程序中使用 HttpRequestContext 作为 request
相关元数据。
优先选择稳定的标识符而不是完整的有效负载转储。不记录令牌、会话 机密、密码或原始客户 PII。
快速诊断
| 症状 | 首先检查 |
|---|---|
| API 无法访问 | /livez |
| API 启动但依赖项失败 | /readyz |
| 日志有噪音 | 窄RUST_LOG |
| JSON 日志丢失 | 设置 LOG_FORMAT=json |
| 本地出现OTLP错误 | 取消设置 OTEL_EXPORTER_OTLP_ENDPOINT 或启动收集器 |
| 控制台运行时页面为空 | 运行API和worker,然后触发模块操作 |
| Story存在但缺少操作 | 检查相关 ID 和遥测跨度属性 |