是否可以配置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和添加事件。
有什么建议吗?
1条答案
按热度按时间webghufk1#
使用
ElasticAPM.with_span
是可行的,因为Elastic APM gem旨在直接与Elasticsearch APM服务器通信。但您可能需要额外的设置才能识别OpenTelemetry data。一定要提高Rails应用程序和APM服务器的日志记录级别,以便更深入地了解断开连接的位置。
有一个官方的“Elasticsearch OpenTelemetry integration“指南。因此,请尝试按照“从OpenTelemetry代理发送数据”部分,特别是关于环境变量的部分,配置OpenTelemetry代理并启用与Elastic APM的通信。