As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Migrar para Ruby OpenTelemetry
Para migrar seus aplicativos Ruby do X-Ray SDK para a OpenTelemetry instrumentação, use os seguintes exemplos de código e orientações para instrumentação manual.
Seções
Instrumente manualmente suas soluções com o SDK
- Tracing setup with X-Ray SDK
-
O X-Ray SDK for Ruby exigia que você configurasse seu código com plug-ins de serviço.
require 'aws-xray-sdk' XRay.recorder.configure(plugins: [:ec2, :elastic_beanstalk])
- Tracing setup with OpenTelemetry SDK
-
nota
No momento, a amostragem remota X-Ray não está disponível para ser configurada para OpenTelemetry Ruby.
Para um aplicativo Ruby on Rails, coloque seu código de configuração em um inicializador Rails. Para obter mais informações, consulte Conceitos básicos do
. Para todos os programas Ruby instrumentados manualmente, você deve usar o OpenTelemetry::SDK.configure
método para configurar o SDK OpenTelemetry Ruby.Primeiro, instale os seguintes pacotes:
bundle add opentelemetry-sdk opentelemetry-exporter-otlp opentelemetry-propagator-xray
Em seguida, configure o OpenTelemetry SDK por meio do código de configuração que é executado quando o programa é inicializado. É recomendável que você configure os seguintes componentes:
-
OTLP Exporter
— Necessário para exportar traços para o CloudWatch agente e coletor OpenTelemetry -
An AWS X-Ray Propagator
— Necessário para propagar o contexto de rastreamento para AWS serviços integrados ao X-Ray
require 'opentelemetry-sdk' require 'opentelemetry-exporter-otlp' # Import the gem containing the AWS X-Ray for OTel Ruby ID Generator and propagator require 'opentelemetry-propagator-xray' OpenTelemetry::SDK.configure do |c| c.service_name = 'my-service-name' c.add_span_processor( # Use the BatchSpanProcessor to send traces in groups instead of one at a time OpenTelemetry::SDK::Trace::Export::BatchSpanProcessor.new( # Use the default OLTP Exporter to send traces to the ADOT Collector OpenTelemetry::Exporter::OTLP::Exporter.new( # The OpenTelemetry Collector is running as a sidecar and listening on port 4318 endpoint:"http://127.0.0.1:4318/v1/traces" ) ) ) # The X-Ray Propagator injects the X-Ray Tracing Header into downstream calls c.propagators = [OpenTelemetry::Propagator::XRay::TextMapPropagator.new] end
OpenTelemetry SDKs também têm o conceito de instrumentações de biblioteca. Habilitá-los criará automaticamente extensões para bibliotecas como o AWS SDK. OpenTelemetry fornece a opção de ativar todas as instrumentações da biblioteca ou especificar quais instrumentações da biblioteca devem ser ativadas.
Para habilitar todas as instrumentações, primeiro instale o
opentelemetry-instrumentation-all
pacote:bundle add opentelemetry-instrumentation-all
Em seguida, atualize a configuração para habilitar todas as instrumentações da biblioteca, conforme mostrado abaixo:
require 'opentelemetry/instrumentation/all' ... OpenTelemetry::SDK.configure do |c| ... c.use_all() # Enable all instrumentations end
OpenTelemetry SDKs também têm o conceito de instrumentações de biblioteca. Habilitá-los criará automaticamente extensões para bibliotecas como o AWS SDK. OpenTelemetry fornece a opção de ativar todas as instrumentações da biblioteca ou especificar quais instrumentações da biblioteca devem ser ativadas.
Para habilitar todas as instrumentações, primeiro instale o
opentelemetry-instrumentation-all
pacote:bundle add opentelemetry-instrumentation-all
Em seguida, atualize a configuração para habilitar todas as instrumentações da biblioteca, conforme mostrado abaixo:
require 'opentelemetry/instrumentation/all' ... OpenTelemetry::SDK.configure do |c| ... c.use_all() # Enable all instrumentations end
-
Rastreando solicitações recebidas (instrumentação Rails)
- With X-Ray SDK
-
Com o X-Ray SDK, o rastreamento do X-Ray é configurado para a estrutura do Rails na inicialização.
Exemplo — config/initializers/aws _xray.rb
Rails.application.config.xray = { name: 'my app', patch: %I[net_http aws_sdk], active_record: true }
- With OpenTelemetry SDK
Primeiro, instale os seguintes pacotes:
bundle add opentelemetry-instrumentation-rack opentelemetry-instrumentation-rails opentelemetry-instrumentation-action_pack opentelemetry-instrumentation-active_record opentelemetry-instrumentation-action_view
Em seguida, atualize a configuração para habilitar a instrumentação para sua aplicação Rails, conforme mostrado abaixo:
# During SDK configuration OpenTelemetry::SDK.configure do |c| ... c.use 'OpenTelemetry::Instrumentation::Rails' c.use 'OpenTelemetry::Instrumentation::Rack' c.use 'OpenTelemetry::Instrumentation::ActionPack' c.use 'OpenTelemetry::Instrumentation::ActiveSupport' c.use 'OpenTelemetry::Instrumentation::ActionView' ... end
AWS Instrumentação do SDK
- With X-Ray SDK
-
Para instrumentar as AWS solicitações de saída do AWS SDK, os clientes do AWS SDK são corrigidos com X-Ray, como no exemplo a seguir:
require 'aws-xray-sdk' require 'aws-sdk-s3' # Patch AWS SDK clients XRay.recorder.configure(plugins: [:aws_sdk]) # Use the instrumented client s3 = Aws::S3::Client.new s3.list_buckets
- With OpenTelemetry SDK
AWS O SDK for Ruby V3 fornece suporte para gravação e emissão de traços. OpenTelemetry Para obter informações sobre como configurar um cliente de serviço, consulte Configuração de recursos de observabilidade no AWS SDK OpenTelemetry for Ruby.
Instrumentar chamadas HTTP de saída
Ao fazer chamadas HTTP para serviços externos, talvez seja necessário instrumentar manualmente as chamadas se a instrumentação automática não estiver disponível ou não fornecer detalhes suficientes.
- With X-Ray SDK
-
Para instrumentar as chamadas downstream, o X-Ray SDK for Ruby foi usado para corrigir
net/http
a biblioteca que seu aplicativo usa:require 'aws-xray-sdk' config = { name: 'my app', patch: %I[net_http] } XRay.recorder.configure(config)
- With OpenTelemetry SDK
Para habilitar o uso da
net/http
instrumentação OpenTelemetry, primeiro instale oopentelemetry-instrumentation-net_http
pacote:bundle add opentelemetry-instrumentation-net_http
Em seguida, atualize a configuração para ativar a
net/http
instrumentação, conforme mostrado abaixo:OpenTelemetry::SDK.configure do |c| ... c.use 'OpenTelemetry::Instrumentation::Net::HTTP' ... end
Suporte de instrumentação para outras bibliotecas
Você pode encontrar a lista completa de instrumentações de biblioteca suportadas para OpenTelemetry Ruby em. opentelemetry-ruby-contrib
Como alternativa, você pode pesquisar no OpenTelemetry Registro para descobrir se OpenTelemetry suporta instrumentação. Para obter mais informações, consulte Registro
Criação manual de dados de rastreamento
- With X-Ray SDK
-
Usando o X-Ray, o
aws-xray-sdk
pacote exigia que você criasse manualmente segmentos e seus subsegmentos secundários para rastrear seu aplicativo. Você também pode ter adicionado anotações e metadados do X-Ray aos seus segmentos ou subsegmentos:require 'aws-xray-sdk' ... # Start a segment segment = XRay.recorder.begin_segment('my-service') # Add annotations (indexed key-value pairs) segment.annotations[:user_id] = 'user-123' segment.annotations[:payment_status] = 'completed' # Add metadata (non-indexed data) segment.metadata[:order] = { id: 'order-456', items: [ { product_id: 'prod-1', quantity: 2 }, { product_id: 'prod-2', quantity: 1 } ], total: 67.99 } # Add metadata to a specific namespace segment.metadata(namespace: 'payment') do |metadata| metadata[:transaction_id] = 'tx-789' metadata[:payment_method] = 'credit_card' end # Create a subsegment with annotations and metadata segment.subsegment('payment-processing') do |subsegment1| subsegment1.annotations[:payment_id] = 'pay-123' subsegment1.metadata[:details] = { amount: 67.99, currency: 'USD' } # Create a nested subsegment subsegment1.subsegment('operation-2') do |subsegment2| # Do more work... end end # Close the segment segment.close
- With OpenTelemetry SDK
-
Você pode usar extensões personalizadas para monitorar o desempenho de atividades internas que não são capturadas pelas bibliotecas de instrumentação. Observe que somente extensões do tipo servidor são convertidas em segmentos de X-Ray, todas as outras extensões são convertidas em subsegmentos de X-Ray. Por padrão, os intervalos são
INTERNAL
.Primeiro, crie um Tracer para gerar extensões, que você pode obter por meio do
OpenTelemetry.tracer_provider.tracer('<YOUR_TRACER_NAME>')
método. Isso fornecerá uma instância do Tracer registrada globalmente na OpenTelemetry configuração do seu aplicativo. É comum ter um único Tracer para uma aplicação inteira. Crie um OpenTelemetry rastreador e use-o para criar extensões:require 'opentelemetry-sdk' ... # Get a tracer tracer = OpenTelemetry.tracer_provider.tracer('my-application') # Create a server span (equivalent to X-Ray segment) tracer.in_span('my-application', kind: OpenTelemetry::Trace::SpanKind::SERVER) do |span| # Do work... # Create nested spans of default kind INTERNAL will become an X-Ray subsegment tracer.in_span('operation-1') do |child_span1| # Set attributes (equivalent to X-Ray annotations and metadata) child_span1.set_attribute('key', 'value') # Do more work... tracer.in_span('operation-2') do |child_span2| # Do more work... end end end
Adicionar anotações e metadados aos rastreamentos com o SDK OpenTelemetry
Use o
set_attribute
método para adicionar atributos a cada extensão. Observe que, por padrão, todos esses atributos de amplitude serão convertidos em metadados nos dados brutos do X-Ray. Para garantir que um atributo seja convertido em uma anotação e não em metadados, você pode adicionar essa chave de atributos à lista de atributos.aws.xray.annotations
Para obter mais informações, consulte Enable The Customized X-Ray Annotations. # SERVER span will become an X-Ray segment tracer.in_span('my-server-operation', kind: OpenTelemetry::Trace::SpanKind::SERVER) do |span| # Your server logic here span.set_attribute('attribute.key', 'attribute.value') span.set_attribute("metadataKey", "metadataValue") span.set_attribute("annotationKey1", "annotationValue") # Create X-Ray annotations span.set_attribute("aws.xray.annotations", ["annotationKey1"]) end
Instrumentação manual Lambda
- With X-Ray SDK
-
Depois que o Active Tracing foi habilitado no Lambda, não há necessidade de configurações adicionais para usar o X-Ray SDK. O Lambda criará um segmento representando a invocação do manipulador Lambda, e você poderá criar subsegmentos ou bibliotecas de instrumentos usando o X-Ray SDK sem nenhuma configuração adicional.
- With OpenTelemetry SDK
Considere o seguinte exemplo de código da função Lambda (sem instrumentação):
require 'json' def lambda_handler(event:, context:) # TODO implement { statusCode: 200, body: JSON.generate('Hello from Lambda!') } end
Para instrumentar manualmente seu Lambda, você precisará:
Adicione as seguintes gemas para seu Lambda
gem 'opentelemetry-sdk' gem 'opentelemetry-exporter-otlp' gem 'opentelemetry-propagator-xray' gem 'aws-distro-opentelemetry-exporter-xray-udp' gem 'opentelemetry-instrumentation-aws_lambda' gem 'opentelemetry-propagator-xray', '~> 0.24.0' # Requires version v0.24.0 or higher
Inicialize o OpenTelemetry SDK fora do seu Lambda Handler. Recomenda-se que o OpenTelemetry SDK seja configurado com:
-
Um processador de span simples com um exportador de span X-Ray UDP para enviar Traces ao endpoint UDP X-Ray do Lambda
-
Um propagador X-Ray Lambda
-
service_name
configuração a ser definida para o nome da função Lambda
-
Em sua classe de manipulador Lambda, adicione as seguintes linhas para instrumentar seu manipulador Lambda:
class Handler extend OpenTelemetry::Instrumentation::AwsLambda::Wrap ... instrument_handler :process end
O código a seguir demonstra a função Lambda após as alterações necessárias. Você pode criar extensões personalizadas adicionais para complementar as extensões fornecidas automaticamente.
require 'json' require 'opentelemetry-sdk' require 'aws/distro/opentelemetry/exporter/xray/udp' require 'opentelemetry/propagator/xray' require 'opentelemetry/instrumentation/aws_lambda' # Initialize OpenTelemetry SDK outside handler OpenTelemetry::SDK.configure do |c| # Configure the AWS Distro for OpenTelemetry X-Ray Lambda exporter c.add_span_processor( OpenTelemetry::SDK::Trace::Export::SimpleSpanProcessor.new( AWS::Distro::OpenTelemetry::Exporter::XRay::UDP::AWSXRayUDPSpanExporter.new ) ) # Configure X-Ray Lambda propagator c.propagators = [OpenTelemetry::Propagator::XRay.lambda_text_map_propagator] # Set minimal resource information c.resource = OpenTelemetry::SDK::Resources::Resource.create({ OpenTelemetry::SemanticConventions::Resource::SERVICE_NAME => ENV['AWS_LAMBDA_FUNCTION_NAME'] }) c.use 'OpenTelemetry::Instrumentation::AwsLambda' end module LambdaFunctions class Handler extend OpenTelemetry::Instrumentation::AwsLambda::Wrap def self.process(event:, context:) "Hello!" end instrument_handler :process end end
Veja a seguir um exemplo de mapa de rastreamento de uma função Lambda instrumentada escrita em Ruby.

Você também pode usar camadas Lambda OpenTelemetry para configurar seu Lambda. Para obter mais informações, consulte Instrumentação OpenTelemetry AWS-Lambda