正在运行的 Prometheus 服务器公开了一个在 /federate 处提供的特殊端点。此端点允许检索与一个或多个即时向量选择器匹配的时间序列(我们在 第 7 章,Prometheus 查询语言– PromQL)。为了使这些机制更清晰,我们在测试环境中提供了一个非常简单的示例。每个分片实例都有一个记录规则,生成代表对导出器的 HTTP 请求数量的聚合指标,如以下代码块所示:
为了提供全局视图,我们可以在测试环境中使用 global 实例来抓取两个分片的联合端点,只请求那些聚合指标(所有以 job:),如以下代码段所示:
在这个片段中有几件事需要注意。联合使用与常规抓取作业相同的机制,但需要配置不同的抓取端点,以及一个 HTTP 参数来指定我们要收集哪些指标。此外,设置 honor_labels: true 将确保保留所有原始标签值并且永远不会被覆盖;这需要配置,否则 Prometheus 会将诸如 instance 和 job 之类的标签设置为来自抓取作业的值。
您可以在我们的测试环境中的 http://192.168.42.12:9090/targets 端点检查聚合器 Prometheus 实例中联合目标的状态,如下所示:
Figure 13.6: Prometheus
targets endpoint showing the federated servers
我们还可以在全局 Prometheus Web 界面中测试指标的联合:即使这个实例没有抓取任何导出器,也没有记录规则,我们可以从 job:promhttp_metric_handler_requests:sum_rate1m
metric,最初是在每个分片实例中产生的。请注意,返回的 job 标签来自原始作业,而不是联合抓取作业。此外,我们可以看到我们在实例中配置为外部标签的 shard 标签存在于此; external_labels 部分中定义的标签会自动添加到从 /federate 端点返回的指标中,如下所示:
Figure 13.7: Global Prometheus view on the aggregate metric
现在我们了解了联合工作的机制,我们可以继续研究联合的常见模式和最佳实践。