当前位置: 首页 > 知识库问答 >
问题:

OpenTelemeter将跟踪导出到弹性APM和弹性OpenDeto

李招
2023-03-14

我正在尝试使用python应用程序(基于django)进行测试,以便能够将事务跟踪推送到Elastic APM,稍后可以使用OpenDistro Elastic中的跟踪分析工具查看。

我试过以下方法

方法1:

安装opentelemeter-exporter-otlp

然后,在manage.py文件中,我添加了以下代码,以直接将跟踪发送到弹性APM。

    span_exporter = OTLPSpanExporter(
        endpoint="http://localhost:8200",
        insecure=True
    )

运行代码时,出现以下错误:

Transient error StatusCode.UNAVAILABLE encountered while exporting span batch, retrying in 1s.
Transient error StatusCode.UNAVAILABLE encountered while exporting span batch, retrying in 2s.

方法2:

由于方法1不起作用,我尝试在两者之间使用OpenTelemetry Collector。我用以下方式配置了收集器:

extensions:
  memory_ballast:
    size_mib: 512
  zpages:
    endpoint: 0.0.0.0:55679

receivers:
  otlp:
    protocols:
      grpc:
      http:

processors:
  batch:
  memory_limiter:
    # 75% of maximum memory up to 4G
    limit_mib: 1536
    # 25% of limit up to 2G
    spike_limit_mib: 512
    check_interval: 5s

exporters:
  logging:
    logLevel: debug
  otlp/elastic:
    endpoint: "198.19.11.22:8200"
    insecure: true

service:
  pipelines:
    traces:
      receivers: [otlp]
      processors: [memory_limiter, batch]
      exporters: [logging, otlp/elastic]
    metrics:
      receivers: [otlp]
      processors: [memory_limiter, batch]
      exporters: [logging]

  extensions: [memory_ballast, zpages]

并将我的代码配置为像这样向收集器发送跟踪-

    span_exporter = OTLPSpanExporter(
        endpoint="http://localhost:4317",
        insecure=True
    )

一旦启动程序,收集器日志中就会出现以下错误-

go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send
    go.opentelemetry.io/collector@v0.35.0/exporter/exporterhelper/queued_retry.go:304
go.opentelemetry.io/collector/exporter/exporterhelper.(*tracesExporterWithObservability).send
    go.opentelemetry.io/collector@v0.35.0/exporter/exporterhelper/traces.go:116
go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1
    go.opentelemetry.io/collector@v0.35.0/exporter/exporterhelper/queued_retry.go:155
go.opentelemetry.io/collector/exporter/exporterhelper/internal.ConsumerFunc.Consume
    go.opentelemetry.io/collector@v0.35.0/exporter/exporterhelper/internal/bounded_queue.go:103
go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*BoundedQueue).StartConsumersWithFactory.func1
    go.opentelemetry.io/collector@v0.35.0/exporter/exporterhelper/internal/bounded_queue.go:82
2022-01-05T17:36:55.349Z    error   exporterhelper/queued_retry.go:304  Exporting failed. No more retries left. Dropping data.  {"kind": "exporter", "name": "otlp/elastic", "error": "max elapsed time expired failed to push trace data via OTLP exporter: rpc error: code = Unavailable desc = connection closed", "dropped_items": 1}

我在这里错过了什么?

注意:我使用的是最新版本的opentelemetry sdk和API以及最新版本的collector。

共有1个答案

闻人修明
2023-03-14

好的,所以使用开放发行版的Elastic来获取跟踪的方法是:

避免使用APM本身。OpenDistro提供了一个名为Data Prepper的工具,必须使用该工具才能将数据(跟踪)从Otel Collector发送到OpenDistro Elastic。

以下是我为Otel Collector所做的配置,用于将数据发送到数据预处理器

... # other configurations like receivers, etc. 
exporters:
  logging:
    logLevel: debug
  otlp/data-prepper:
    endpoint: "http://<DATA_PREPPER_HOST>:21890"
    tls:
      insecure: true
... # Other configurations like pipelines, etc. 

这就是我如何配置Data Prepper来从Collector接收数据并将其发送到弹性

entry-pipeline:
  delay: "100"
  source:
    otel_trace_source:
      ssl: false
  sink:
    - pipeline:
        name: "raw-pipeline"
raw-pipeline:
  source:
    pipeline:
      name: "entry-pipeline"
  prepper:
     - otel_trace_raw_prepper:
  sink:
    - elasticsearch:
        hosts: [ "http://<ELASTIC_HOST>:9200" ]
        trace_analytics_raw: true
 类似资料:
  • 我收到弹性APM日志结构中来自opentelemeter收集器的日志: “{Timestamp:HH:mm:ss}{Level:u3}trace.id={TraceId}事务。id={SpanId}{NewLine}{Message:lj}{NewLine}{Exception}” 例子: 我试着使用管道 我的目标是查看Elastic APM中的日志

  • logstash的elasticsearch输出可以选择关闭SSL验证 https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html#plugins-输出-elasticsearch-ssl_证书_验证 apm是否有类似的选择? Elasticsearch使用自签名证书,而apm在连接到ES时

  • 之前我们介绍过,响应式网站设计主要包括三部分:弹性布局、媒体查询和弹性媒介。我们分别了解下这几个。 弹性布局 所谓的弹性布局,说的是在创建网站的时候,采用流体网格布局方式,动态地调整网站布局宽度以此来适应各种设备屏幕大小。 弹性布局不使用固定的测量单位,比如像素或者英寸。原因显而易见,视窗( viewport )的高度和宽度在不同设备之间是不断变化的,那么弹性网站布局为了适应这种变化,所以就不可能

  • 我使用Kafka作为队列,节点服务使用Kafka节点生成和使用Kafka主题的消息。 我一直在使用自制的分布式跟踪解决方案,但现在我们正在转向弹性APM。 这似乎是为HTTP服务器量身定制的,但如何配置它以与Kafka一起使用呢? 我希望能够像下面这样跟踪事务:服务A向服务B发送一个HTTP请求,服务B向Kafka Topic C生成该请求,服务D从中使用该请求,服务D将一些数据放入Kafka T

  • 我们正在尝试安装弹性apm(目前在我们的开发系统上)。 根据自制软件,我们有最新的(7.10.2)、(7.10.2),今天安装了(7.13.0版)。运行apm服务器测试输出,我们得到: 因为关于让APM运行的文档有些迟钝,这可能是一个配置问题。但如何进一步调查呢? 解决方案是安装早期版本的apm服务器吗?如果是的话。。。。如何用自制软件实现这一点?

  • Kibana反应是 APM服务器返回503-内部服务器错误,难以确定根本原因。是ES队列已满或内存不足,还是群集设置不正确? 根据ES文件:https://www.elastic.co/guide/en/apm/server/master/common-problems.html#queue-满满的 满队列通常意味着代理收集的数据比APM服务器能够处理的要多。当APM服务器没有为您的Elastic