通过OpenTelemetry接入Ruby Trace数据

本文介绍通过OpenTelemetry Ruby SDK将Ruby应用的Trace数据接入到日志服务的操作步骤。

前提条件

  • 已创建Trace实例。更多信息,请参见创建Trace实例
  • 已安装Ruby 2.0及以上版本的开发环境。

  • 已安装OpenTelemetry Ruby SDK。

    如果未安装,可参见如下命令,完成安装。

    gem install opentelemetry-api
    gem install opentelemetry-sdk
    gem install opentelemetry-exporter-otlp

操作步骤

  1. 配置环境变量。

    如下代码中的变量需根据实际情况替换。关于变量的详细说明,请参见变量说明

    export OTEL_RESOURCE_ATTRIBUTES=sls.otel.project=${project},sls.otel.instanceid=${instance},sls.otel.akid=${akid},sls.otel.aksecret=${aksecret},service.name=${service},service.version=${version},host.name=${host}

    export OTEL_RESOURCE_ATTRIBUTES=sls.otel.project=${project},sls.otel.instanceid=${instance},sls.otel.akid=${akid},sls.otel.aksecret=${aksecret},service.namespace=${service.namespace},service.name=${service},service.version=${version},host.name=${host}

    表 1. 变量说明

    变量

    说明

    示例

    ${service}

    服务名。根据您的实际场景取值即可。

    payment

    ${version}

    服务版本号。建议按照va.b.c格式定义。

    v0.1.2

    ${service.namespace}

    服务归属的命名空间。

    order

    ${project}

    日志服务Project名称。

    test-project

    ${instance}

    Trace服务实例ID。更多信息,请参见创建Trace实例

    test-traces

    ${akid}

    阿里云账号AccessKey ID。

    建议您使用只具备日志服务Project写入权限的RAM用户的AccessKey(包括AccessKey ID和AccessKey Secret)。授予RAM用户向指定Project写入数据权限的具体操作,请参见授权。如何获取AccessKey的具体操作,请参见访问密钥

    ${aksecret}

    阿里云账号AccessKey Secret。

    建议您使用只具备日志服务Project写入权限的RAM用户的AccessKey。

    ${host}

    主机名。

    localhost

  2. 设置埋点。

    如下代码中的${endpoint}变量需根据实际情况替换。关于变量的详细说明,请参见变量说明。更多接入示例请参见opentelemetry-ruby

    require 'opentelemetry/sdk'
    require 'opentelemetry-exporter-otlp'
    
    # Configure the sdk with default export and context propagation formats
    # see SDK#configure for customizing the setup
    OpenTelemetry::SDK.configure do |c|
      c.add_span_processor(
        OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new(
          OpenTelemetry::Exporter::OTLP::Exporter.new(
            endpoint: 'https://${endpoint}/opentelemetry/v1/traces'
          )
        )
      )
    end
    
    # To start a trace you need to get a Tracer from the TracerProvider
    tracer = OpenTelemetry.tracer_provider.tracer('my_app_or_gem', '0.1.0')
    
    tracer.in_span('foo') do |span|
      # set an attribute
      span.set_attribute('tform', 'osx')
      # add an event
      span.add_event('event in bar')
      # create bar as child of foo
      tracer.in_span('bar') do |child_span|
        # inspect the span
        pp child_span
      end
    end
    
    sleep 10

    表 2. 变量说明

    变量

    说明

    示例

    ${endpoint}

    日志服务Project的接入地址,格式为${project}.${region-endpoint},其中:

    • ${project}:日志服务Project名称。

    • ${region-endpoint}:日志服务Project所在地域的访问域名,支持公网和阿里云内网(经典网络、VPC)。更多信息,请参见服务入口

    https://test-project.cn-hangzhou.log.aliyuncs.com

后续步骤