菜单
开源

故障排除 metrics-generator

如果您担心 metrics-generator 中的数据质量问题,我们首先建议

  • 审查您的遥测流水线,确定丢失的 Span 数量。这里只需查找主要问题。
  • 审查服务图文档,了解它们是如何构建的。

如果从这两个方面来看一切正常,请考虑以下主题,以帮助解决所有指标以及专门针对 Span 指标的常见问题。

所有指标

Distributor 中丢失的 Span

Distributor 有一个指向 metrics-generator 的 Span 出队队列。如果队列满了,Distributor 会在 Span 到达 generator 之前丢弃它们。使用以下指标可以确定是否发生这种情况:

sum(rate(tempo_distributor_queue_pushes_failures_total{}[1m]))

向 Generator 推送失败

由于各种原因,Distributor 可能无法向 generator 推送数据。使用以下指标可以确定是否发生这种情况:

sum(rate(tempo_distributor_metrics_generator_pushes_failures_total{}[1m]))

Generator 中被丢弃的 Span

metrics-generator 通过可配置的松弛时间和用户可配置的过滤器拒绝考虑某些 Span。您可以使用此指标查看因原因而被拒绝的 Span 数量:

sum(rate(tempo_metrics_generator_spans_discarded_total{}[1m])) by (reason)

如果大量 Span 因您的过滤器而在 metrics-generator 中被丢弃,您需要调整它们。如果 Span 因摄取松弛时间而被丢弃,请考虑调整此设置:

metrics_generator:
  metrics_ingestion_time_range_slack: 30s

如果 Span 经常超出此值,您可能需要审查您的追踪流水线,看看是否存在过度缓冲。请注意,增加此值会使 generator 消耗更多 Span,但会降低指标的准确性,因为包含的 Span 离“现在”更远。

如果属性在转换为指标标签时不是有效的 UTF-8 字符,Span 也可能被丢弃。

最大活跃系列

Generator 通过限制其生成的系列的最大数量来保护自身和您的远程写入目标。使用下面的 sum 来确定是否由于此限制导致系列被丢弃:

sum(rate(tempo_metrics_generator_registry_series_limited_total{}[1m]))

使用以下设置更新限制:

yaml
overrides:
  defaults:
    metrics_generator:
      max_active_series: 0

请注意,此值是每个 metrics generator 的。实际远程写入的最大系列数量将是 <# 个 metrics generator> * <metrics_generator.max_active_series>

远程写入失败

由于各种原因,generator 可能无法写入远程写入目标。使用以下指标来确定是否发生这种情况:

sum(rate(prometheus_remote_storage_samples_failed_total{}[1m]))
sum(rate(prometheus_remote_storage_samples_dropped_total{}[1m]))
sum(rate(prometheus_remote_storage_exemplars_failed_total{}[1m]))
sum(rate(prometheus_remote_storage_exemplars_dropped_total{}[1m]))

服务图指标

服务图具有额外的配置,可能影响输出指标的质量。

过期边

以下指标可用于确定有多少边无法找到匹配。

没有匹配的过期边的速率

sum(rate(tempo_metrics_generator_processor_service_graphs_expired_edges{}[1m]))

所有边的速率

sum(rate(tempo_metrics_generator_processor_service_graphs_edges{}[1m]))

如果您看到大量边在没有匹配的情况下过期,请考虑调整 wait 设置。这控制了 metrics generator 在放弃之前等待找到匹配项的时间。

metrics_generator:
  processor:
    service_graphs:
      wait: 10s

服务图最大项数

服务图处理器会跟踪最大数量的边,以限制处理器使用的总内存量。要确定是否由于此限制导致边被丢弃,请检查:

sum(rate(tempo_metrics_generator_processor_service_graphs_dropped_spans{}[1m]))

使用 max_items 调整跟踪的边的最大数量:

metrics_generator:
  processor:
    service_graphs:
      max_items: 10000