Agent
为何以及如何将信号发送到 Collector,再从 Collector 发送到后端
在 Agent 部署模式下,遥测信号可以来自
- 使用 OpenTelemetry SDK 并通过 OpenTelemetry Protocol (OTLP) 进行插桩的应用程序
- 使用 OTLP Exporter 的 Collector
信号被发送到紧邻应用程序运行或与应用程序在同一主机上运行的 Collector 实例,例如 sidecar 或 DaemonSet。
每个客户端 SDK 或下游 Collector 都配置有 Collector 实例的地址
- 在应用程序中,SDK 被配置为将 OTLP 数据发送到 Collector。
- Collector 被配置为将遥测数据发送到一个或多个后端。
示例
在此 Agent 部署模式的示例中,首先手动使用 OpenTelemetry Java SDK 对Java 应用程序进行插桩以导出指标,包括默认的 OTEL_METRICS_EXPORTER 值 otlp。接下来,配置 OTLP Exporter 指向您的 Collector 地址。例如
export OTEL_EXPORTER_OTLP_ENDPOINT=http://collector.example.com:4318
接下来,配置运行在 collector.example.com:4318 的 Collector 如下
receivers:
otlp: # the OTLP receiver the app is sending traces to
protocols:
http:
endpoint: 0.0.0.0:4318
exporters:
otlp/jaeger: # Jaeger supports OTLP directly
endpoint: https://jaeger.example.com:4317
sending_queue:
batch:
service:
pipelines:
traces/dev:
receivers: [otlp]
exporters: [otlp/jaeger]
receivers:
otlp: # the OTLP receiver the app is sending metrics to
protocols:
http:
endpoint: 0.0.0.0:4318
exporters:
prometheusremotewrite: # the PRW exporter, to ingest metrics to backend
endpoint: https://prw.example.com/v1/api/remote_write
sending_queue:
batch:
service:
pipelines:
metrics/prod:
receivers: [otlp]
exporters: [prometheusremotewrite]
receivers:
otlp: # the OTLP receiver the app is sending logs to
protocols:
http:
endpoint: 0.0.0.0:4318
exporters:
file: # the File Exporter, to ingest logs to local file
path: ./app42_example.log
rotation:
service:
pipelines:
logs/dev:
receivers: [otlp]
exporters: [file]
要端到端地探索此模式,请参阅 Java 或 Python 示例。
权衡
使用 Agent Collector 的主要优缺点如下
优点
- 易于上手
- 应用程序与 Collector 之间有一对一的清晰映射
缺点
- 对于团队和基础设施资源而言,可扩展性有限
- 对于复杂或不断变化的部署而言不够灵活