采集 OpenTelemetry 数据并转发到 Grafana
您可以配置 Alloy 来采集 OpenTelemetry 兼容的数据并将其转发到 Grafana 堆栈。
本主题介绍了如何
- 配置 Alloy 将您的数据发送到 Loki。
- 配置 Alloy 将您的数据发送到 Tempo。
- 配置 Alloy 将您的数据发送到 Mimir 或 Prometheus Remote Write。
本主题中使用的组件
loki.write
otelcol.auth.basic
otelcol.exporter.loki
otelcol.exporter.otlp
otelcol.exporter.prometheus
otelcol.processor.batch
otelcol.receiver.otlp
prometheus.remote_write
开始之前
- 确保您对使用 OpenTelemetry 对应用进行插桩有基本的了解。
- 准备好一组 OpenTelemetry 应用,以便将遥测数据推送到 Alloy。
- 确定 Alloy 将接收到的遥测数据写入何处。
- 熟悉 Alloy 中的 组件 概念。
- 完成 采集 OpenTelemetry 数据 任务。
数据处理管道
您可以使用在 采集 OpenTelemetry 数据 任务中创建的 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"
}
}
数据处理管道如下所示
Metrics, Logs, Traces: OTLP Receiver → batch processor → OTLP Exporter
Grafana Cloud
Grafana Cloud 提供 OTLP 端点,您可以直接在 Alloy 中使用它们。
您可以在 Grafana Cloud Portal 中 OpenTelemetry 的详细信息页面找到 OTLP 连接详情。
您必须按如下方式更新配置文件
otelcol.auth.basic "default" {
username = "<ACCOUNT ID>"
password = "<API TOKEN>"
}
otelcol.exporter.otlphttp "default" {
client {
endpoint = "<OTLP_ENDPOINT>"
auth = otelcol.auth.basic.default.handler
}
}
替换以下内容
<ACCOUNT ID>
: 您的 Grafana Cloud 账户 ID。<API TOKEN>
: 您的 Grafana Cloud API token。<OTLP_ENDPOINT>
: 您的 OTLP 端点。
此配置使用存储在 otelcol.auth.basic "default"
中的凭据对 Grafana Cloud OTLP 端点进行认证,您的数据应该开始到达。
其他平台(Grafana Enterprise, Grafana Open Source)
您可以实现以下数据处理管道,将数据发送到 Loki、Tempo 以及 Mimir 或 Prometheus。
Metrics: OTel → batch processor → Mimir or Prometheus remote write
Logs: OTel → batch processor → Loki exporter
Traces: OTel → batch processor → OTel exporter
Grafana Loki
Grafana Loki 是一个受 Prometheus 启发的可水平扩展、高可用、多租户日志聚合系统。与 Prometheus 类似,要将 OTLP 数据发送到 Loki,您可以配置从 otelcol.exporter.loki
组件到 loki.write
组件的直通。
otelcol.exporter.loki "default" {
forward_to = [loki.write.default.receiver]
}
loki.write "default" {
endpoint {
url = "http://loki-endpoint:8080/loki/api/v1/push"
}
}
要将 Loki 与基本认证一起使用(Grafana Cloud Logs 需要基本认证),您必须配置 loki.write
组件。您可以从 Grafana Cloud Portal 中 Loki 的详细信息页面获取 Loki 配置。
otelcol.exporter.loki "grafana_cloud_logs" {
forward_to = [loki.write.grafana_cloud_logs.receiver]
}
loki.write "grafana_cloud_logs" {
endpoint {
url = "https://logs-prod-us-central1.grafana.net/loki/api/v1/push"
basic_auth {
username = "5252"
password = sys.env("GRAFANA_CLOUD_API_KEY")
}
}
}
Grafana Tempo
Grafana Tempo 是一个开源、易用、可扩展的分布式追踪后端。Tempo 可以直接接收 OTLP 数据,您可以使用 OTLP 导出器将追踪发送到 Tempo。
otelcol.exporter.otlp "default" {
client {
endpoint = "tempo-server:4317"
}
}
要将 Tempo 与基本认证一起使用(Grafana Cloud Traces 需要基本认证),您必须使用 otelcol.auth.basic 组件。您可以从 Grafana Cloud Portal 中 Tempo 的详细信息页面获取 Tempo 配置。
otelcol.exporter.otlp "grafana_cloud_traces" {
client {
endpoint = "tempo-us-central1.grafana.net:443"
auth = otelcol.auth.basic.grafana_cloud_traces.handler
}
}
otelcol.auth.basic "grafana_cloud_traces" {
username = "4094"
password = sys.env("GRAFANA_CLOUD_API_KEY")
}
Grafana Mimir 或 Prometheus Remote Write
Prometheus Remote Write 是一种流行的指标传输协议,受到大多数指标系统的支持,包括 Grafana Mimir 和 Grafana Cloud。要将 OTLP 数据发送到 Prometheus 兼容的 remote_write
端点,您可以配置从 otelcol.exporter.prometheus
组件到 prometheus.remote_write
组件的直通。Alloy 中的 Prometheus remote write 组件是一个强大的协议实现,包括用于弹性的预写日志 (WAL)。
otelcol.exporter.prometheus "default" {
forward_to = [prometheus.remote_write.default.receiver]
}
prometheus.remote_write "default" {
endpoint {
url = "http://prometheus:9090/api/v1/write"
}
}
要将 Prometheus 与基本认证一起使用(Grafana Cloud Metrics 需要基本认证),您必须配置 prometheus.remote_write
组件。您可以从 Grafana Cloud Portal 中 Prometheus 的详细信息页面获取 Prometheus 配置。
otelcol.exporter.prometheus "grafana_cloud_metrics" {
forward_to = [prometheus.remote_write.grafana_cloud_metrics.receiver]
}
prometheus.remote_write "grafana_cloud_metrics" {
endpoint {
url = "https://prometheus-us-central1.grafana.net/api/prom/push"
basic_auth {
username = "12690"
password = sys.env("GRAFANA_CLOUD_API_KEY")
}
}
}
整合所有配置
您需要引用设置的三个导出器,而不是在 otelcol.processor.batch
的输出中引用 otelcol.exporter.otlp.default.input
。最终配置如下:
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.prometheus.grafana_cloud_metrics.input]
logs = [otelcol.exporter.loki.grafana_cloud_logs.input]
traces = [otelcol.exporter.otlp.grafana_cloud_traces.input]
}
}
otelcol.exporter.otlp "grafana_cloud_traces" {
client {
endpoint = "tempo-us-central1.grafana.net:443"
auth = otelcol.auth.basic.grafana_cloud_traces.handler
}
}
otelcol.auth.basic "grafana_cloud_traces" {
username = "4094"
password = sys.env("GRAFANA_CLOUD_API_KEY")
}
otelcol.exporter.prometheus "grafana_cloud_metrics" {
forward_to = [prometheus.remote_write.grafana_cloud_metrics.receiver]
}
prometheus.remote_write "grafana_cloud_metrics" {
endpoint {
url = "https://prometheus-us-central1.grafana.net/api/prom/push"
basic_auth {
username = "12690"
password = sys.env("GRAFANA_CLOUD_API_KEY")
}
}
}
otelcol.exporter.loki "grafana_cloud_logs" {
forward_to = [loki.write.grafana_cloud_logs.receiver]
}
loki.write "grafana_cloud_logs" {
endpoint {
url = "https://logs-prod-us-central1.grafana.net/loki/api/v1/push"
basic_auth {
username = "5252"
password = sys.env("GRAFANA_CLOUD_API_KEY")
}
}
}
运行 Alloy 将显示如下信息
./alloy run alloy-config.alloy
./alloy run alloy-config.alloy
ts=2023-05-09T09:37:15.300959Z level=info msg="running usage stats reporter"
ts=2023-05-09T09:37:15.300958Z level=info msg="now listening for http traffic" addr=127.0.0.1:12345
ts=2023-05-09T09:37:15.301104Z level=info trace_id=6466516c9e1a556422df7a84c0ade6b0 msg="starting complete graph evaluation"
ts=2023-05-09T09:37:15.301307Z level=info trace_id=6466516c9e1a556422df7a84c0ade6b0 msg="finished node evaluation" node_id=loki.write.grafana_cloud_logs duration=188.209µs
ts=2023-05-09T09:37:15.301334Z level=info trace_id=6466516c9e1a556422df7a84c0ade6b0 msg="finished node evaluation" node_id=otelcol.exporter.loki.grafana_cloud_logs duration=18.791µs
ts=2023-05-09T09:37:15.303138Z component=prometheus.remote_write.grafana_cloud_metrics level=info subcomponent=wal msg="replaying WAL, this may take a while" dir=data-alloy/prometheus.remote_write.grafana_cloud_metrics/wal
ts=2023-05-09T09:37:15.303257Z component=prometheus.remote_write.grafana_cloud_metrics level=info subcomponent=wal msg="WAL segment loaded" segment=0 maxSegment=1
ts=2023-05-09T09:37:15.303302Z component=prometheus.remote_write.grafana_cloud_metrics level=info subcomponent=wal msg="WAL segment loaded" segment=1 maxSegment=1
ts=2023-05-09T09:37:15.303507Z component=prometheus.remote_write.grafana_cloud_metrics subcomponent=rw level=info remote_name=7f623a url=https://prometheus-us-central1.grafana.net/api/prom/push msg="Starting WAL watcher" queue=7f623a
ts=2023-05-09T09:37:15.303515Z component=prometheus.remote_write.grafana_cloud_metrics subcomponent=rw level=info remote_name=7f623a url=https://prometheus-us-central1.grafana.net/api/prom/push msg="Starting scraped metadata watcher"
ts=2023-05-09T09:37:15.303522Z level=info trace_id=6466516c9e1a556422df7a84c0ade6b0 msg="finished node evaluation" node_id=prometheus.remote_write.grafana_cloud_metrics duration=2.181958ms
ts=2023-05-09T09:37:15.303557Z level=info trace_id=6466516c9e1a556422df7a84c0ade6b0 msg="finished node evaluation" node_id=otelcol.exporter.prometheus.grafana_cloud_metrics duration=30.083µs
ts=2023-05-09T09:37:15.303611Z component=prometheus.remote_write.grafana_cloud_metrics subcomponent=rw level=info remote_name=7f623a url=https://prometheus-us-central1.grafana.net/api/prom/push msg="Replaying WAL" queue=7f623a
ts=2023-05-09T09:37:15.303618Z level=info trace_id=6466516c9e1a556422df7a84c0ade6b0 msg="finished node evaluation" node_id=otelcol.auth.basic.grafana_cloud_traces duration=52.5µs
ts=2023-05-09T09:37:15.303694Z level=info trace_id=6466516c9e1a556422df7a84c0ade6b0 msg="finished node evaluation" node_id=otelcol.exporter.otlp.grafana_cloud_traces duration=70.375µs
ts=2023-05-09T09:37:15.303782Z component=otelcol.processor.memory_limiter.default level=info msg="Memory limiter configured" limit_mib=150 spike_limit_mib=30 check_interval=1s
ts=2023-05-09T09:37:15.303802Z level=info trace_id=6466516c9e1a556422df7a84c0ade6b0 msg="finished node evaluation" node_id=otelcol.processor.memory_limiter.default duration=100.334µs
ts=2023-05-09T09:37:15.303853Z level=info trace_id=6466516c9e1a556422df7a84c0ade6b0 msg="finished node evaluation" node_id=otelcol.processor.batch.default duration=44.75µs
ts=2023-05-09T09:37:15.303948Z level=info trace_id=6466516c9e1a556422df7a84c0ade6b0 msg="finished node evaluation" node_id=otelcol.receiver.otlp.default duration=87.333µs
ts=2023-05-09T09:37:15.303968Z level=info trace_id=6466516c9e1a556422df7a84c0ade6b0 msg="finished node evaluation" node_id=tracing duration=10.792µs
ts=2023-05-09T09:37:15.303981Z level=info trace_id=6466516c9e1a556422df7a84c0ade6b0 msg="finished node evaluation" node_id=logging duration=9µs
ts=2023-05-09T09:37:15.303987Z level=info trace_id=6466516c9e1a556422df7a84c0ade6b0 msg="finished complete graph evaluation" duration=2.960333ms
ts=2023-05-09T09:37:15.304Z level=info msg="scheduling loaded components"
ts=2023-05-09T09:37:15.304109Z component=otelcol.receiver.otlp.default level=info msg="Starting GRPC server" endpoint=0.0.0.0:4317
ts=2023-05-09T09:37:15.304234Z component=otelcol.receiver.otlp.default level=info msg="Starting HTTP server" endpoint=0.0.0.0:4318
您可以通过访问 https://:12345/graph 以图形方式查看数据处理管道
