使用OpenTelemetry Collector直接将指标写入到Prometheus远程存储

OpenTelemetry是一个开源的观测数据协议,用于收集、分析和分享分布式系统的数据。

图片引用来源:https://www.appdynamics.com/blog/product/what-is-opentelemetry/

OpenTelemetry是一个项目,它合并了OpenTracing和OpenCensus,并作为它们的下一个主要版本提供。它提供了一组API、SDK和工具,旨在创建和管理诸如跟踪、度量和日志等遥测数据。通过使用OpenTelemetry,可以测量、生成、收集和导出遥测数据。由于它本身不提供存储或视图等功能,因此对于跟踪,可以将遥测数据导出到开源或云服务提供商提供的商业后端,如Jaeger或Zipkin;对于度量,可以导出到Prometheus等开源或云服务提供商的后端。

如果使用OpenTelemetry从应用程序收集遥测数据,您可以根据每种语言使用的API和SDK进行直接插装,也可以从应用程序外部收集遥测数据,例如Prometheus的导出器,然后直接导出到后端,或者将遥测数据导出到下文提到的OpenTelemetry Collector。

目前(截至2020/11/25的时间点),许多组件似乎已经处于beta阶段,并且正在朝着GA的方向进行工作。关于日志方面,在最初阶段并不支持,但似乎正在努力后续将其整合进去。

开放遥测收集器

我对OpenTelemetry Collector的理解是,它能够在一个组件中实现类似于OpenCensus的OpenCensus Service的配置。OpenTelemetry Collector是OpenTelemetry提供的其中一个组件,它本身作为一个独立的应用程序启动,提供了与供应商无关的实现方式来接收、处理和导出遥测数据。

OpenTelemetry Collector是一个用于接收实现了兼容格式的遥测数据(如Prometheus和Jaeger等)的接收器,并将遥测数据导出到实现了导出器的后端的工具。

可以对收到的遥测数据进行批处理、重试、过滤、加工等操作,并且可以将这些处理从应用程序侧转移到收集器。

スクリーンショット 2020-12-01 14.50.33.png

同时,它可以将不同后端的代理收集器集成到OpenTelemetry Collector中,并输出到多个后端。即使在OpenTelemetry提供的特定语言SDK中没有实现并且无法导出监控服务后端时,只要在Collector端实现了相应的导出器,就可以通过Collector进行导出。还可以从OpenTelemetry Collector导出到另一个OpenTelemetry Collector,并且可以在应用程序附近(例如Pod的sidecar或同一节点上)启动,并通过另一个Collector进行聚合。

作为 OpenTelemetry Collector,有以下两种类型的公开版本。

opentelemetry-collector

コアリポジトリであり主要な機能とメジャーなオープンソースのレシーバーとエクスポーターを含むもの

opentelemetry-collector-contrib

opentelemetry-collectorのスーパーセットであり主要な機能でないものや、その他のオープンソースや商用のバックエンドのための実装を含むもの

Collector可以自行制作,似乎还可以在内部开发适用于相关监控服务的Collector发行版。如果想要开发这些发行版,以下内容可能会有所帮助。我也打算抽空尝试一下。

    • Building your own OpenTelemetry Collector distribution

 

    OpenTelemetry Collector Builder

试用OpenTelemetry收集器。

使用OpenTelemetry Collector在运行在Kubernetes上的应用程序中收集以Prometheus格式输出的指标,并直接将其导出到Prometheus的远程存储。 OpenTelemetry Collector,Thanos和应用程序都在同一个Kubernetes集群上运行。

由于Prometheus格式的指标获取和写入到Prometheus的远程存储已经包含在opentelemetry-collector中,因此我们在本次使用这个收集器。

スクリーンショット 2020-11-25 15.40.20.png

在远程存储中使用了Thanos。Thanos通过使用名为Receiver的组件可以接受Prometheus的远程写入请求。

虽然Thanos本身无法使用远程读取的API,但是有一个名为Query的组件可以直接与Prometheus的API通信,因此即使没有Prometheus,Grafana也可以从Thanos中查看保存的数据。换句话说,OpenTelemetry Collector和Thanos可以构建无Prometheus的配置。

版本信息 xī)

    • OpenTelemetry Collector v0.15.0

 

    • Thanos v0.17.0

 

    Kubernetes v1.19.4

OpenTelemetry Collector 的配置

OpenTelemetry Collector所需的设置大致分为以下三个方面。

    • exporters

テレメトリデータのエクポートに関する設定

processors

テレメトリデータの加工、フィルター、リトライ、バッチ処理等の設定

receivers:

どういうフォーマットでどのようにテレメトリデータを受信するかという設定

请查阅官方文件以了解需要哪些整体设置。
在此,我们列出了本次使用的设置和清单文件等。以下是从中挑选出来的OpenTelemetry Collector的设置中与导出器和接收器相关的部分。

出口商

本次我们将输出到Prometheus的Remote Write。由于本次没有使用TLS,因此与Prometheus的Remote Write相关的配置只需简单如下。

exporters:
  prometheusremotewrite:
    endpoint: "http://thanos-receive:19291/api/v1/receive"

请查阅此处以了解所有可设置的选项。

接收者

似乎可以使用与Prometheus的配置文件相同的配置格式来获取Prometheus形式的指标设置。
因此,我们可以使用scrape_config来进行配置,并且直接使用Prometheus的配置来设置抓取目标和挑选级别,这非常令人高兴。
这次我们将以Prometheus的github存储库中管理的这个配置文件为基础来使用。

receivers:
  prometheus:
    config:
      global:
        scrape_interval: 1m
        scrape_timeout: 30s
      scrape_configs:
        ...(省略)

请参考以下列出的设置选项。

与Prometheus使用Kubernetes API来对目标进行发现类似,因此如果启用了RBAC,则需要为OpenTelemetry Collector分配适当的角色。只需将Collector使用的服务账号分配与当前使用的Prometheus相同的ClusterRole和Role应该就足够了。例如,可以使用这样的ClusterRole。

实际运行

如果您能够准备好Kubernetes集群,请使用以下命令进行测试。

$ kubectl apply -f https://gist.githubusercontent.com/uesyn/a7ec18c98b6e5ae822f8433c2d4aea2a/raw/58b8682113c725ce6b5884f81ecff19d2f40f00f/demo-otel-collector-and-thanos.yaml

上述将部署Thanos和OpenTelemetry Collector。
还将部署一个输出指标的示例应用程序。

$ kubectl apply -f https://gist.githubusercontent.com/uesyn/f9d8c352d4f57f857be9abd09a136706/raw/5d4d56c379785aa0d0bf7e5b2afcbe13c61046ff/random-metrics.yaml

通过以下命令将端口转发到Thanos的UI界面,然后可以确认上述应用程序的指标已经被收集。

$ kubectl -n otel port-forward svc/thanos-query 10902:10902
スクリーンショット 2020-12-01 11.52.26.png

最后

我在收集其他应用程序的指标时注意到,与相同设置的Prometheus相比,现有的导出器没有导出一些指标。我还发现有一些目标被遗漏了。前者似乎是导出器的限制,而后者在我初步检查时似乎无法正确获取指标,即使通过relabel改变了收集指标的端口和路径。我认为这可能是receiver的错误,所以我打算继续调查。由于这个项目非常让我担心,所以我打算继续追踪其动向!另外,就指标而言,由于VictoriaMetrics的vmagent似乎可以实现类似的功能,所以我也想尝试一下这个工具!

请提供更多的上下文以便正确的翻译

    • Using the OpenTelemetry Collector to empower end users

 

    • OpenTelemetry公式ページ

 

    • Thanos公式ページ

 

    OpenTelemetry Collector
bannerAds