遥测

Llama Stack 遥测系统提供全面的跟踪、指标和日志记录功能。它支持多种接收器类型,包括 OpenTelemetry、SQLite 和控制台输出。

事件

遥测系统支持三种主要类型的事件

  • 非结构化日志事件: 带有严重性级别的自由格式日志消息

unstructured_log_event = UnstructuredLogEvent(
    message="This is a log message", severity=LogSeverity.INFO
)
  • 指标事件: 带有单位的数值测量

metric_event = MetricEvent(metric="my_metric", value=10, unit="count")
  • 结构化日志事件: 系统事件,例如 span 开始/结束。可扩展以添加更多结构化日志类型。

structured_log_event = SpanStartPayload(name="my_span", parent_span_id="parent_span_id")

跨度和跟踪

  • 跨度 (Spans): 表示带有时间和层级关系的操作

  • 跟踪 (Traces): 相关 span 的集合,形成完整的请求流

接收器

  • OpenTelemetry: 将事件发送到 OpenTelemetry Collector。这对于在 Jaeger 等工具中可视化跟踪很有用。

  • SQLite: 将事件存储在本地 SQLite 数据库中。如果您想稍后通过 Llama Stack API 查询事件,则需要此选项。

  • 控制台: 将事件打印到控制台。

提供者

Meta 参考提供者

目前,仅实现了 Meta 参考提供者。它可以配置为将事件发送到三种接收器类型

  1. OpenTelemetry Collector

  2. SQLite

  3. 控制台

配置

这是一个将遥测信号发送到所有三种接收器类型的示例。您的配置可能只使用其中一种。

  telemetry:
  - provider_id: meta-reference
    provider_type: inline::meta-reference
    config:
      sinks: ['console', 'sqlite', 'otel_trace', 'otel_metric']
      otel_trace_endpoint: "https://:4318/v1/traces"
      otel_metric_endpoint: "https://:4318/v1/metrics"
      sqlite_db_path: "/path/to/telemetry.db"

使用 Jaeger 可视化跟踪

otel 接收器与任何兼容 OpenTelemetry collector 的服务一起工作,跟踪和指标有两个独立的端点。让我们使用 Jaeger 可视化这些数据。

使用以下命令启动一个 Jaeger 实例,其 OTLP HTTP 端点为 4318,Jaeger UI 为 16686

$ docker run --pull always --rm --name jaeger \
  -p 16686:16686 -p 4318:4318 \
  jaegertracing/jaeger:2.1.0

Jaeger 实例运行后,您可以通过访问 https://:16686/ 来可视化跟踪。

查询存储在 SQLite 中的跟踪

sqlite 接收器允许您在没有外部系统的情况下查询跟踪。以下是一些示例查询。请参阅 Llama Stack 构建 AI 应用程序 中的笔记本,获取有关如何查询跟踪和空间的更多示例。