管理

如何在规模化环境下管理您的 OpenTelemetry 集合器部署

本文档描述了如何在规模化环境下管理您的 OpenTelemetry 集合器部署。

要充分利用本页面,您应了解如何安装和配置集合器。这些主题已在其他地方进行了介绍:

  • 开始使用 了解如何安装 OpenTelemetry 集合器。
  • 配置 了解如何配置 OpenTelemetry 集合器,设置遥测管道。

基础知识

在规模化环境中进行遥测收集需要采用一种结构化的方法来管理代理。典型的代理管理任务包括:

  1. 查询代理的信息和配置。代理信息可能包括其版本、操作系统相关信息或功能。代理的配置是指其遥测收集设置,例如 OpenTelemetry 集合器 配置
  2. 升级/降级代理和管理代理特定的软件包,包括基本代理功能和插件。
  3. 向代理应用新的配置。这可能是由于环境变化或政策变化而需要的。
  4. 对代理进行健康和性能监控,通常包括 CPU 和内存使用率以及代理特定的指标,例如处理速率或相关的后压力信息。
  5. 控制平面和代理之间的连接管理,例如处理 TLS 证书(吊销和轮换)。

并不是每个用例都需要支持上述所有代理管理任务。在 OpenTelemetry 任务 “4. 健康和性能监控” 的上下文中, 最理想的做法是使用 OpenTelemetry 进行监控。

OpAMP

可观察性供应商和云提供商提供了专有的代理管理解决方案。在开源可观察性领域,有一种新兴的标准可以用于代理管理:Open Agent Management Protocol(OpAMP)。

OpAMP 规范 定义了如何管理一组遥测数据代理。这些代理可以是 OpenTelemetry 集合器、Fluent Bit 或其他任意组合的代理。

注意 这里将术语 “代理” 作为一个统称,用于表示回应 OpAMP 的 OpenTelemetry 组件,这可能是集合器,也可能是 SDK 组件。

OpAMP 是一个支持通过 HTTP 和 WebSocket 进行通信的客户端/服务器协议:

  • OpAMP 服务器 是控制平面的一部分,充当编排者,管理一组遥测代理。
  • OpAMP 客户端 是数据平面的一部分。OpAMP 的客户端可以在进程内实现,例如在OpenTelemetry 集合器中实现 OpAMP 支持。OpAMP 的客户端也可以在进程外实现。对于后一种选项,可以使用监管程序来处理与 OpAMP 服务器的 OpAMP 特定通信,并同时控制遥测代理,例如应用配置或升级。请注意,监管程序/遥测通信不是 OpAMP 的一部分。

让我们看一个具体的设置:

OpAMP 示例设置
  1. 配置了管道的 OpenTelemetry 集合器,用于:
    • (A) 接收来自下游源的信号
    • (B) 导出信号到上游目的地,可能包括关于集合器本身的遥测(由 OpAMP 的 own_xxx 连接设置表示)。
  2. 控制平面和集合器之间的双向 OpAMP 控制流,其中控制平面实现了服务器端的 OpAMP 部分,集合器(或控制集合器的监管程序)实现了客户端的 OpAMP 部分。

您可以使用 OpAMP 协议在 Go 中的实现 尝试一个简单的 OpAMP 设置。在以下演示中,您需要准备一个版本为 1.19 或更高的 Go。

首先,克隆 open-telemetry/opamp-go 仓库:

git clone https://github.com/open-telemetry/opamp-go.git

接下来,我们需要一个 OpAMP 监管程序可以管理的 OpenTelemetry 集合器二进制文件。为此,请安装OpenTelemetry Collector Contrib 发行版。收集器二进制文件的路径(您安装到的位置)在下文中称为 $OTEL_COLLECTOR_BINARY

./opamp-go/internal/examples/server 目录中启动 OpAMP 服务器:

$ go run .
2023/02/08 13:31:32.004501 [MAIN] OpAMP Server starting...
2023/02/08 13:31:32.004815 [MAIN] OpAMP Server running...

./opamp-go/internal/examples/supervisor 目录中创建一个名为 supervisor.yaml 的文件,包含以下内容(告诉监管程序在哪里找到服务器,并告诉它要管理的 OpenTelemetry 集合器二进制文件):

server:
  endpoint: ws://127.0.0.1:4320/v1/opamp

agent:
  executable: $OTEL_COLLECTOR_BINARY

注意 请确保将 $OTEL_COLLECTOR_BINARY 替换为实际的文件路径。例如,对于 Linux 或 macOS,如果您将收集器安装在 /usr/local/bin/ 中,那么您应将 $OTEL_COLLECTOR_BINARY 替换为 /usr/local/bin/otelcol

然后,创建以下的集合器配置(将其保存为 effective.yaml 文件,放在 ./opamp-go/internal/examples/supervisor 目录中):

receivers:
  prometheus/own_metrics:
    config:
      scrape_configs:
        - job_name: otel-collector
          scrape_interval: 10s
          static_configs:
            - targets: [0.0.0.0:8888]
  hostmetrics:
    collection_interval: 10s
    scrapers:
      load:
      filesystem:
      memory:
      network:

exporters:
  # NOTE: Prior to v0.86.0 use `logging` instead of `debug`.
  debug:
    verbosity: detailed

service:
  pipelines:
    metrics:
      receivers: [hostmetrics, prometheus/own_metrics]
      exporters: [debug]

现在是时候启动监管程序了(监管程序将启动您的 OpenTelemetry 集合器):

$ go run .
2023/02/08 13:32:54 Supervisor starting, id=01GRRKNBJE06AFVGQT5ZYC0GEK, type=io.opentelemetry.collector, version=1.0.0.
2023/02/08 13:32:54 Starting OpAMP client...
2023/02/08 13:32:54 OpAMP Client started.
2023/02/08 13:32:54 Starting agent /usr/local/bin/otelcol
2023/02/08 13:32:54 Connected to the server.
2023/02/08 13:32:54 Received remote config from server, hash=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.
2023/02/08 13:32:54 Agent process started, PID=13553
2023/02/08 13:32:54 Effective config changed.
2023/02/08 13:32:54 Enabling own metrics pipeline in the config<F11>
2023/02/08 13:32:54 Effective config changed.
2023/02/08 13:32:54 Config is changed. Signal to restart the agent.
2023/02/08 13:32:54 Agent is not healthy: Get "http://localhost:13133": dial tcp [::1]:13133: connect: connection refused
2023/02/08 13:32:54 Stopping the agent to apply new config.
2023/02/08 13:32:54 Stopping agent process, PID=13553
2023/02/08 13:32:54 Agent process PID=13553 successfully stopped.
2023/02/08 13:32:54 Starting agent /usr/local/bin/otelcol
2023/02/08 13:32:54 Agent process started, PID=13554
2023/02/08 13:32:54 Agent is not healthy: Get "http://localhost:13133": dial tcp [::1]:13133: connect: connection refused
2023/02/08 13:32:55 Agent is not healthy: health check on http://localhost:13133 returned 503
2023/02/08 13:32:55 Agent is not healthy: health check on http://localhost:13133 returned 503
2023/02/08 13:32:56 Agent is not healthy: health check on http://localhost:13133 returned 503
2023/02/08 13:32:57 Agent is healthy.

如果一切顺利,您现在应该能够打开 http://localhost:4321/ 并访问 OpAMP 服务器 UI,在其中您应该可以看到由监管程序管理的集合器列表:

OpAMP 示例设置

您还可以查询导出的指标的收集器(请注意标签值):

$ curl localhost:8888/metrics
...
# HELP otelcol_receiver_accepted_metric_points Number of metric points successfully pushed into the pipeline.
# TYPE otelcol_receiver_accepted_metric_points counter
otelcol_receiver_accepted_metric_points{receiver="prometheus/own_metrics",service_instance_id="01GRRKNBJE06AFVGQT5ZYC0GEK",service_name="io.opentelemetry.collector",service_version="1.0.0",transport="http"} 322
# HELP otelcol_receiver_refused_metric_points Number of metric points that could not be pushed into the pipeline.
# TYPE otelcol_receiver_refused_metric_points counter
otelcol_receiver_refused_metric_points{receiver="prometheus/own_metrics",service_instance_id="01GRRKNBJE06AFVGQT5ZYC0GEK",service_name="io.opentelemetry.collector",service_version="1.0.0",transport="http"} 0

其他信息

最后修改 December 10, 2023: translate (a4350d6e)