代理

为什么以及如何向收集器发送信号,并从收集器将信号发送回端口

代理收集器部署模式包括应用 - 使用OpenTelemetry SDKOpenTelemetry协议(OTLP)进行仪表化 - 或其他收集器(使用OTLP导出器)将遥测信号发送到与应用程序一起运行的收集器实例或与应用程序在同一主机上的位置(例如边车或守护进程)。

每个客户端SDK或下游收集器都配置有一个收集器位置:

分散式收集器部署概念
  1. 在应用程序中,SDK被配置为向收集器发送OTLP数据。
  2. 收集器被配置为将遥测数据发送到一个或多个后端。

示例

代理收集器部署模式的一个具体示例可以如下所示:手动仪表化一个Java应用程序以导出指标,例如使用OpenTelemetry Java SDK。在应用程序的上下文中,您将将OTEL_METRICS_EXPORTER设置为otlp(默认值),并使用您的收集器的地址配置OTLP导出器,例如(在Bash或zsh shell中):

export OTEL_EXPORTER_OTLP_ENDPOINT=http://collector.example.com:4318

然后,位于collector.example.com:4318的收集器将被配置如下:

receivers:
  otlp: # 应用程序发送跟踪数据到OTLP接收器
    protocols:
      grpc:

processors:
  batch:

exporters:
  otlp/jaeger: # Jaeger直接支持OTLP
    endpoint: https://jaeger.example.com:4317

service:
  pipelines:
    traces/dev:
      receivers: [otlp]
      processors: [batch]
      exporters: [otlp/jaeger]
receivers:
  otlp: # 应用程序发送指标数据到OTLP接收器
    protocols:
      grpc:

processors:
  batch:

exporters:
  prometheusremotewrite: # PRW导出器,将指标传送到后端
    endpoint: https://prw.example.com/v1/api/remote_write

service:
  pipelines:
    metrics/prod:
      receivers: [otlp]
      processors: [batch]
      exporters: [prometheusremotewrite]
receivers:
  otlp: # 应用程序发送日志数据到OTLP接收器
    protocols:
      grpc:

processors:
  batch:

exporters:
  file: # 文件导出器,将日志导入到本地文件
    path: ./app42_example.log
    rotation:

service:
  pipelines:
    logs/dev:
      receivers: [otlp]
      processors: [batch]
      exporters: [file]

如果您想自己尝试一下,请参考端到端的Java示例Python示例

具体取舍

优点:

  • 简单易上手
  • 应用程序与收集器之间有明确的一对一映射关系

缺点:

  • 可扩展性(无论是人力还是负载)
  • 不灵活
最后修改 December 10, 2023: translate (a4350d6e)