收集 OpenTelemetry 数据并将其转发到任何 OpenTelemetry 兼容的端点
您可以将 Alloy 配置为收集与 OpenTelemetry 兼容的数据,并将其转发到任何 OpenTelemetry 兼容的端点。
本主题介绍如何
- 配置 OpenTelemetry 数据传输。
- 配置批处理。
- 通过 OTLP 接收 OpenTelemetry 数据。
本主题中使用的组件
otelcol.auth.basic
otelcol.exporter.otlp
otelcol.exporter.otlphttp
otelcol.processor.batch
otelcol.receiver.otlp
开始之前
- 确保您对使用 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
组件,请完成以下步骤
将以下
otelcol.exporter.otlp
组件添加到您的配置文件中otelcol.exporter.otlp "<EXPORTER_LABEL>" { client { endpoint = "<HOST>:<PORT>" } }
替换以下内容
<EXPORTER_LABEL>
:组件的标签,例如default
。您使用的标签在同一配置文件中的所有otelcol.exporter.otlp
组件中必须唯一。<HOST>
:要发送 OTLP 请求的服务器的主机名或 IP 地址。<PORT>
:要发送 OTLP 请求的服务器的端口。
如果您的服务器需要基本身份验证,请完成以下步骤
将以下
otelcol.auth.basic
组件添加到您的配置文件中otelcol.auth.basic "<BASIC_AUTH_LABEL>" { username = "<USERNAME>" password = "<PASSWORD>" }
替换以下内容
<BASIC_AUTH_LABEL>
:组件的标签,例如default
。您使用的标签在同一配置文件中的所有otelcol.auth.basic
组件中必须唯一。<USERNAME>
:基本身份验证用户名。<PASSWORD>
:基本身份验证密码或 API 密钥。
在
otelcol.exporter.otlp
组件的client
块内添加以下行auth = otelcol.auth.basic.<BASIC_AUTH_LABEL>.handler
替换以下内容
<BASIC_AUTH_LABEL>
:otelcol.auth.basic
组件的标签。
如果您有多个服务器要导出指标,请为每个附加服务器创建一个
otelcol.exporter.otlp
组件。
注意
otelcol.exporter.otlp
使用基于 gRPC (HTTP/2) 的 OTLP 发送数据。要使用 HTTP/1.1 发送到服务器,请按照上述步骤操作,但改用otelcol.exporter.otlphttp
组件。
以下示例演示了如何配置带有身份验证的 otelcol.exporter.otlp
组件以及将数据转发到它的组件
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
组件,请完成以下步骤
按照配置 OpenTelemetry Protocol 导出器中的说明操作,确保接收到的数据可以写入外部系统。
将以下
otelcol.processor.batch
组件添加到您的配置文件中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
组件的标签。
要禁用其中一种遥测类型,请在
output
块中将相关类型设置为空列表,例如metrics = []
。要将批处理数据发送到另一个处理器,请将
output
列表中的组件替换为要使用的处理器组件。
以下示例演示了在导出之前配置一系列 otelcol.processor
组件。
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
组件,请完成以下步骤
按照配置 OpenTelemetry Protocol 导出器中的说明操作,确保接收到的数据可以写入外部系统。
可选:按照配置批处理中的说明操作,以提高压缩率并减少网络请求总量。
将以下
otelcol.receiver.otlp
组件添加到您的配置文件中。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
。
要允许应用程序通过 gRPC 在端口
4317
上发送 OTLP 数据,请将以下内容添加到您的otelcol.receiver.otlp
组件中。grpc { endpoint = "<HOST>:4317" }
替换以下内容
<HOST>
:用于监听流量的主机。尽可能使用范围狭窄的监听地址。要监听所有网络接口,请将<HOST>
替换为0.0.0.0
。
要允许应用程序通过 HTTP/1.1 在端口
4318
上发送 OTLP 数据,请将以下内容添加到您的otelcol.receiver.otlp
组件中。http { endpoint = "<HOST>:4318" }
替换以下内容
<HOST>
:用于监听流量的主机。尽可能使用范围狭窄的监听地址。要监听所有网络接口,请将<HOST>
替换为0.0.0.0
。
要禁用其中一种遥测类型,请在
output
块中将相关类型设置为空列表,例如metrics = []
。
以下示例演示了如何配置 otelcol.receiver.otlp
并将其发送到导出器
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
。