Jaeger 本身是一个分布式的微服务系统。如果在生产环境中运行,你可能需要为不同的组件设置适当的监控,例如确保后端不会因过多的追踪数据而饱和。
请参阅 OpenTelemetry Collector 文档了解配置内部遥测的详细信息。
指标
以下是获取指标的 curl 调用示例:
curl -s http://jaeger-collector:8888/metrics
以下指标值得特别关注:
otelcol_receiver_accepted_spans
otelcol_receiver_refused_spans
otelcol_exporter_sent_spans
otelcol_exporter_send_failed_spans
前两个指标描述了 Jaeger 接收了多少 Span。后两个指标表示有多少 Span 被发送到了存储。在正常情况下,accepted 和 sent_spans 计数器应该非常接近。
指标上的标签允许区分不同的接收器和导出器。例如,第一个指标带上所有标签可能如下所示(为可读性进行了格式化):
otelcol_receiver_accepted_spans{
receiver="otlp",
service_instance_id="f91d66c2-0445-42bf-a062-32aaed09facf",
service_name="jaeger",
service_version="2.0.0",
transport="http"
} 44
日志
默认情况下,日志以纯文本格式输出到 stderr。对于生产部署,建议使用 info 或 warning 的日志级别。
链路追踪
Jaeger 具有追踪自身某些组件的能力,即对查询服务的请求。例如,如果你按照快速开始中的描述启动 all-in-one,并多次刷新 UI 界面,你将在服务下拉菜单中看到 jaeger 已填充。
可以通过设置 OTEL_TRACES_SAMPLER=always_off 环境变量来禁用自追踪。
监控最佳实践
在生产环境中运行 Jaeger 时,全面的监控对于确保最佳性能和可靠性至关重要。本节涵盖关键指标和监控策略。
进程级指标
为所有 Jaeger 组件监控以下基本系统指标:
系统资源
- CPU 使用率:监控 CPU 利用率以检测性能瓶颈
- 内存使用:跟踪 RSS 和虚拟内存消耗
- 文件描述符:监控已打开的文件描述符数量
- 网络使用:监控数据摄入和存储操作的网络 I/O
磁盘 I/O(适用于具有本地存储的组件)
- 磁盘使用:监控磁盘空间利用率
- 磁盘 I/O:跟踪每秒的读/写操作及延迟
Go 运行时指标
Jaeger v2 组件基于 OpenTelemetry Collector 构建,它暴露了标准的 Go 运行时指标:
垃圾回收
- GC 持续时间:监控垃圾回收暂停时间
- GC 频率:跟踪垃圾回收发生的频率
Goroutine
- Goroutine 数量:监控活跃 Goroutine 的数量
- Goroutine 增长:关注可能表示泄漏的异常增长
内存统计
- 堆使用:监控 Go 堆内存使用量
- 内存分配:跟踪分配模式
OpenTelemetry Collector 指标
Jaeger v2 基于 OpenTelemetry Collector 构建。需要监控的关键指标包括:
Span 处理
- Span 摄入:监控接收的 Span
otelcol_receiver_accepted_spans:接收器接受的 Span 总数otelcol_receiver_refused_spans:被拒绝的 Span(表示数据丢失)
- Span 导出:监控发送到存储的 Span
otelcol_exporter_sent_spans:成功导出的 Spanotelcol_exporter_send_failed_spans:失败的导出尝试
组件健康
- 接收器健康:按接收器类型监控数据摄入组件
- 导出器健康:按存储后端监控存储导出组件
查询性能
监控 Jaeger 查询服务性能:
响应时间
- 查询延迟:监控 UI 和 API 查询响应时间
- 查询量:跟踪查询模式和频率
存储后端
- 根据其文档监控你的特定存储后端(Elasticsearch、Cassandra 等)
Prometheus 告警
Jaeger 仓库包含一组 Prometheus 告警规则示例。这些经过生产验证的告警涵盖:
- 服务可用性:当 Jaeger 组件宕机时的告警
- 性能下降:高延迟和高错误率的告警
- 容量问题:资源耗尽和队列饱和的告警
- 数据丢失:Span 丢弃和存储故障的告警
有关详细的设置说明,请参阅监控 mixin 文档。
监控工具集成
Prometheus 配置
Jaeger v2 的 Prometheus 抓取配置示例:
scrape_configs:
- job_name: 'jaeger-v2'
static_configs:
- targets: ['jaeger:8888'] # Internal telemetry port
scrape_interval: 15s
metrics_path: /metrics
健康检查
为以下项目实施健康检查:
应用健康
- 验证 OpenTelemetry Collector 管道健康状态
- 检查存储连接性
- 验证接收器端点可用性
依赖健康
- 根据存储系统的文档监控存储后端健康状况
- 检查组件之间的网络连接
故障排查
需要调查的常见场景:
高资源使用率
- 检查 Goroutine 数量和内存使用模式
- 检查 OpenTelemetry Collector 配置
数据丢失(被拒绝/失败的 Span)
- 检查存储后端健康状况和连接性
- 验证导出器配置
- 检查接收器容量设置
查询性能差
- 监控存储后端性能
- 检查资源竞争情况
- 检查查询模式