故障排除 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]))
使用以下设置更新限制:
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