Rails OpenTelemetry-sdk与Elasticsearch

oxf4rvwz  于 9个月前  发布在  ElasticSearch
关注(0)|答案(1)|浏览(91)

是否可以配置gem opentelemetry-sdk以向Elasticsearch APM server发送遥测数据?
我的Rails应用程序是这样设置的:
在Gemfile中,我添加了以下gems:

gem 'opentelemetry-exporter-otlp'
gem 'opentelemetry-instrumentation-all'
gem 'opentelemetry-sdk'

字符串
config/initializers中,我添加了一个新文件opentelemetry.rb,内容如下:

require 'opentelemetry/sdk'
require 'opentelemetry/instrumentation/all'
require 'opentelemetry-exporter-otlp'

OpenTelemetry::SDK.configure do |c|
  c.service_name = 'my_app_name'
  c.logger = Rails.logger
  c.use_all

  c.add_span_processor(
    OpenTelemetry::SDK::Trace::Export::SimpleSpanProcessor.new(
      OpenTelemetry::Exporter::OTLP::Exporter.new(
        endpoint: 'http://localhost:8200/',
        headers: { 'Authorization' => 'Bearer MY_ACCESS_TOKEN' }
      )
    )
  )
end

Tracer = OpenTelemetry.tracer_provider.tracer('my_app_name')


在我的代码中,我添加了这样的东西:

Tracer.in_span 'fn1' do |span|
  # do work
end


然后我使用命令./apm-server -c apm-server.yml -e运行APM服务器。
我的apm-server.yml文件是:

apm-server:
  host: "localhost:8200"
  auth:
    secret_token: qwerty

  kibana:
    enabled: true
    host: "localhost:5601"

output.elasticsearch:
  hosts: ["localhost:9200"]


APM启动,我没有错误。
当Rails Tracer.in_span代码运行时,我可以在APM输出中看到如下内容:

{"log.level":"info","@timestamp":"2023-12-15T15:24:47.035+0100","log.logger":"request","log.origin":{"file.name":"middleware/log_middleware.go","file.line":63},"message":"request ok","service.name":"apm-server","url.original":"/","http.request.method":"POST","user_agent.original":"Ruby, OTel-OTLP-Exporter-Ruby/0.26.1 Ruby/3.2.2 (arm64-darwin22; ruby/3.2.2)","source.address":"127.0.0.1","http.request.body.bytes":497,"http.request.id":"87bdb9b6-548f-4719-a608-6d7b5130532a","event.duration":318125,"http.response.status_code":200,"ecs.version":"1.6.0"}


但是在Kibana中我找不到任何痕迹。如果我从Ruby opentelemetry-sdk gem切换到official Elasticsearch gem elastic-apm,并将Tracer.in_span代码替换为

ElasticAPM.with_span 'f1' do |span|
  # do work
end


一切正常,我可以看到奇花的痕迹。
但是我不喜欢ElasticAPM gem,因为它是有限的,你不能添加可搜索的属性到span和添加事件。
有什么建议吗?

webghufk

webghufk1#

使用ElasticAPM.with_span是可行的,因为Elastic APM gem旨在直接与Elasticsearch APM服务器通信。但您可能需要额外的设置才能识别OpenTelemetry data
一定要提高Rails应用程序和APM服务器的日志记录级别,以便更深入地了解断开连接的位置。
有一个官方的“Elasticsearch OpenTelemetry integration“指南。因此,请尝试按照“从OpenTelemetry代理发送数据”部分,特别是关于环境变量的部分,配置OpenTelemetry代理并启用与Elastic APM的通信。

相关问题