菜单
文档breadcrumb arrow Grafana Alloybreadcrumb arrow 收集和转发数据breadcrumb arrow 收集 OpenTelemetry 数据
开源

收集 OpenTelemetry 数据并将其转发到任何 OpenTelemetry 兼容的端点

您可以将 Alloy 配置为收集与 OpenTelemetry 兼容的数据,并将其转发到任何 OpenTelemetry 兼容的端点。

本主题介绍如何

  • 配置 OpenTelemetry 数据传输。
  • 配置批处理。
  • 通过 OTLP 接收 OpenTelemetry 数据。

本主题中使用的组件

开始之前

  • 确保您对使用 OpenTelemetry 对应用程序进行插桩有基本的了解。
  • 准备好一组 OpenTelemetry 应用程序,以便将遥测数据推送到 Alloy。
  • 确定 Alloy 将接收到的遥测数据写入到何处。
  • 熟悉 Alloy 中的组件概念。

配置 OpenTelemetry Protocol 导出器

在组件接收 OpenTelemetry 数据之前,您必须有一个负责导出 OpenTelemetry 数据的组件。OpenTelemetry 导出器组件负责将 OpenTelemetry 数据写入(导出到)外部系统。

在此任务中,您将使用 otelcol.exporter.otlp 组件通过 OpenTelemetry Protocol (OTLP) 将 OpenTelemetry 数据发送到服务器。定义导出器组件后,您可以使用其他 Alloy 组件将数据转发到它。

提示

有关可用于导出 OpenTelemetry 数据的完整 otelcol.exporter 组件列表,请参阅可用组件列表。

要配置用于使用 OTLP 导出 OpenTelemetry 数据的 otelcol.exporter.otlp 组件,请完成以下步骤

  1. 将以下 otelcol.exporter.otlp 组件添加到您的配置文件中

    alloy
    otelcol.exporter.otlp "<EXPORTER_LABEL>" {
      client {
        endpoint = "<HOST>:<PORT>"
      }
    }

    替换以下内容

    • <EXPORTER_LABEL>:组件的标签,例如 default。您使用的标签在同一配置文件中的所有 otelcol.exporter.otlp 组件中必须唯一。
    • <HOST>:要发送 OTLP 请求的服务器的主机名或 IP 地址。
    • <PORT>:要发送 OTLP 请求的服务器的端口。
  2. 如果您的服务器需要基本身份验证,请完成以下步骤

    1. 将以下 otelcol.auth.basic 组件添加到您的配置文件中

      alloy
      otelcol.auth.basic "<BASIC_AUTH_LABEL>" {
        username = "<USERNAME>"
        password = "<PASSWORD>"
      }

      替换以下内容

      • <BASIC_AUTH_LABEL>:组件的标签,例如 default。您使用的标签在同一配置文件中的所有 otelcol.auth.basic 组件中必须唯一。
      • <USERNAME>:基本身份验证用户名。
      • <PASSWORD>:基本身份验证密码或 API 密钥。
    2. otelcol.exporter.otlp 组件的 client 块内添加以下行

      alloy
      auth = otelcol.auth.basic.<BASIC_AUTH_LABEL>.handler

      替换以下内容

      • <BASIC_AUTH_LABEL>otelcol.auth.basic 组件的标签。
  3. 如果您有多个服务器要导出指标,请为每个附加服务器创建一个 otelcol.exporter.otlp 组件。

注意

otelcol.exporter.otlp 使用基于 gRPC (HTTP/2) 的 OTLP 发送数据。要使用 HTTP/1.1 发送到服务器,请按照上述步骤操作,但改用 otelcol.exporter.otlphttp 组件。

以下示例演示了如何配置带有身份验证的 otelcol.exporter.otlp 组件以及将数据转发到它的组件

alloy
otelcol.exporter.otlp "default" {
  client {
    endpoint = "my-otlp-grpc-server:4317"
    auth     = otelcol.auth.basic.credentials.handler
  }
}

otelcol.auth.basic "credentials" {
  // Retrieve credentials using environment variables.

  username = sys.env("BASIC_AUTH_USER")
  password = sys.env("API_KEY")
}

otelcol.receiver.otlp "example" {
  grpc {
    endpoint = "127.0.0.1:4317"
  }

  http {
    endpoint = "127.0.0.1:4318"
  }

  output {
    metrics = [otelcol.exporter.otlp.default.input]
    logs    = [otelcol.exporter.otlp.default.input]
    traces  = [otelcol.exporter.otlp.default.input]
  }
}

有关使用 OpenTelemetry Protocol 写入 OpenTelemetry 数据的更多信息,请参阅 otelcol.exporter.otlp

配置批处理

生产就绪的 Alloy 配置不应直接将 OpenTelemetry 数据发送到导出器进行传输。相反,数据通常发送到一个或多个处理器组件,由它们对数据执行各种转换。

确保数据进行批处理是提高数据压缩率、减少对外部系统的出站网络请求数量的生产就绪步骤。

在此任务中,您将配置一个 otelcol.processor.batch 组件,以便在将数据发送到导出器之前对数据进行批处理。

注意

有关可用于处理 OpenTelemetry 数据的完整 otelcol.processor 组件列表,请参阅可用组件列表。您可以通过让一个处理器将数据发送到另一个处理器来链式使用处理器。

要配置 otelcol.processor.batch 组件,请完成以下步骤

  1. 按照配置 OpenTelemetry Protocol 导出器中的说明操作,确保接收到的数据可以写入外部系统。

  2. 将以下 otelcol.processor.batch 组件添加到您的配置文件中

    alloy
    otelcol.processor.batch "<PROCESSOR_LABEL>" {
      output {
        metrics = [otelcol.exporter.otlp.<EXPORTER_LABEL>.input]
        logs    = [otelcol.exporter.otlp.<EXPORTER_LABEL>.input]
        traces  = [otelcol.exporter.otlp.>EXPORTER_LABEL>.input]
      }
    }

    替换以下内容

    • <PROCESSOR_LABEL>:组件的标签,例如 default。您使用的标签在同一配置文件中的所有 otelcol.processor.batch 组件中必须唯一。
    • <EXPORTER_LABEL>:您的 otelcol.exporter.otlp 组件的标签。
    1. 要禁用其中一种遥测类型,请在 output 块中将相关类型设置为空列表,例如 metrics = []

    2. 要将批处理数据发送到另一个处理器,请将 output 列表中的组件替换为要使用的处理器组件。

以下示例演示了在导出之前配置一系列 otelcol.processor 组件。

alloy
otelcol.processor.memory_limiter "default" {
  check_interval = "1s"
  limit          = "1GiB"

  output {
    metrics = [otelcol.processor.batch.default.input]
    logs    = [otelcol.processor.batch.default.input]
    traces  = [otelcol.processor.batch.default.input]
  }
}

otelcol.processor.batch "default" {
  output {
    metrics = [otelcol.exporter.otlp.default.input]
    logs    = [otelcol.exporter.otlp.default.input]
    traces  = [otelcol.exporter.otlp.default.input]
  }
}

otelcol.exporter.otlp "default" {
  client {
    endpoint = "my-otlp-grpc-server:4317"
  }
}

有关配置 OpenTelemetry 数据批处理的更多信息,请参阅 otelcol.processor.batch

配置 OpenTelemetry Protocol 接收器

您可以将 Alloy 配置为接收 OpenTelemetry 指标、日志和追踪。OpenTelemetry 接收器组件负责从外部系统接收 OpenTelemetry 数据。

在此任务中,您将使用 otelcol.receiver.otlp 组件通过 OpenTelemetry Protocol (OTLP) 在网络上接收 OpenTelemetry 数据。您可以配置接收器组件将接收到的数据转发到其他 Alloy 组件。

有关可用于接收 OpenTelemetry 兼容数据的完整 otelcol.receiver 组件列表,请参阅可用组件列表。

要配置用于接收 OTLP 数据的 otelcol.receiver.otlp 组件,请完成以下步骤

  1. 按照配置 OpenTelemetry Protocol 导出器中的说明操作,确保接收到的数据可以写入外部系统。

  2. 可选:按照配置批处理中的说明操作,以提高压缩率并减少网络请求总量。

  3. 将以下 otelcol.receiver.otlp 组件添加到您的配置文件中。

    alloy
    otelcol.receiver.otlp "<LABEL>" {
      output {
        metrics = [<COMPONENT_INPUT_LIST>]
        logs    = [<COMPONENT_INPUT_LIST>]
        traces  = [<COMPONENT_INPUT_LIST>]
      }
    }

    替换以下内容

    • <LABEL>:组件的标签,例如 default。您使用的标签在同一配置文件中的所有 otelcol.receiver.otlp 组件中必须唯一。
    • <COMPONENT_INPUT_LIST>:要将接收到的数据转发到的组件输入列表,以逗号分隔。例如,要将数据发送到批处理处理器组件,请使用 otelcol.processor.batch.PROCESSOR_LABEL.input。要直接将数据发送到导出器组件,请使用 otelcol.exporter.otlp.EXPORTER_LABEL.input
    1. 要允许应用程序通过 gRPC 在端口 4317 上发送 OTLP 数据,请将以下内容添加到您的 otelcol.receiver.otlp 组件中。

      alloy
      grpc {
        endpoint = "<HOST>:4317"
      }

      替换以下内容

      • <HOST>:用于监听流量的主机。尽可能使用范围狭窄的监听地址。要监听所有网络接口,请将 <HOST> 替换为 0.0.0.0
    2. 要允许应用程序通过 HTTP/1.1 在端口 4318 上发送 OTLP 数据,请将以下内容添加到您的 otelcol.receiver.otlp 组件中。

      alloy
      http {
        endpoint = "<HOST>:4318"
      }

      替换以下内容

      • <HOST>:用于监听流量的主机。尽可能使用范围狭窄的监听地址。要监听所有网络接口,请将 <HOST> 替换为 0.0.0.0
    3. 要禁用其中一种遥测类型,请在 output 块中将相关类型设置为空列表,例如 metrics = []

以下示例演示了如何配置 otelcol.receiver.otlp 并将其发送到导出器

alloy
otelcol.receiver.otlp "example" {
  grpc {
    endpoint = "127.0.0.1:4317"
  }

  http {
    endpoint = "127.0.0.1:4318"
  }

  output {
    metrics = [otelcol.processor.batch.example.input]
    logs    = [otelcol.processor.batch.example.input]
    traces  = [otelcol.processor.batch.example.input]
  }
}

otelcol.processor.batch "example" {
  output {
    metrics = [otelcol.exporter.otlp.default.input]
    logs    = [otelcol.exporter.otlp.default.input]
    traces  = [otelcol.exporter.otlp.default.input]
  }
}

otelcol.exporter.otlp "default" {
  client {
    endpoint = "my-otlp-grpc-server:4317"
  }
}

有关使用 OpenTelemetry Protocol 接收 OpenTelemetry 数据的更多信息,请参阅 otelcol.receiver.otlp