Configurar o X-Ray SDK para Ruby
O X-Ray SDK para Ruby tem uma classe chamada XRay.recorder
, que fornece o gravador global. Você pode configurar o gravador global para personalizar o middleware que cria segmentos para chamadas HTTP de entrada.
Seções
Plug-ins de serviço
Use plugins
para registrar informações sobre o serviço que hospeda a aplicação.
Plug-ins
-
Amazon EC2: o
ec2
adiciona o ID de instância e a zona de disponibilidade. -
Elastic Beanstalk: o
elastic_beanstalk
adiciona o nome do ambiente, o rótulo da versão e o ID de implantação. -
Amazon ECS: o
ecs
adiciona o ID do contêiner.
![Segment - Scorekeep overview showing Elastic Beanstalk and EC2 deployment details.](images/scorekeep-PUTrules-segment-resources-python09.png)
Para usar plug-ins, você deve especificá-los no objeto de configuração que passa ao gravador.
exemplo main.rb: configuração do plug-in
my_plugins = %I[ec2 elastic_beanstalk]
config = {
plugins: my_plugins,
name: 'my app',
}
XRay.recorder.configure(config)
Você também pode usar variáveis de ambiente, que têm precedência sobre valores definidos no código, para configurar o gravador.
O SDK também usa as configurações do plug-in para definir o campo origin
no segmento. Isso indica o tipo de recurso da AWS que executa a aplicação. Quando você utiliza vários plug-ins, o SDK usa a seguinte ordem de resolução para determinar a origem: ElasticBeanstalk > EKS > ECS > EC2.
Regras de amostragem
O SDK usa as regras de amostragem que você define no console do X-Ray para determinar quais solicitações serão registradas. A regra padrão rastreia a primeira solicitação a cada segundo e 5% de todas as solicitações adicionais em todos os serviços que enviam rastreamentos ao X-Ray. Crie regras adicionais no console do X-Ray para personalizar a quantidade de dados registrados para cada uma das aplicações.
O SDK aplica regras personalizadas na ordem em que elas estão definidas. Se uma solicitação corresponder a várias regras personalizadas, o SDK aplicará somente a primeira regra.
nota
Se o SDK não conseguir acessar o X-Ray para obter regras de amostragem, ele reverterá para uma regra local padrão da primeira solicitação a cada segundo e 5% de todas as solicitações adicionais por host. Isso pode ocorrer se o host não tiver permissão para chamar APIs de amostragem ou não conseguir se conectar ao daemon do X-Ray, que atua como um proxy de TCP para chamadas de API feitas pelo SDK.
Você também pode configurar o SDK para carregar regras de amostragem de um documento JSON. O SDK pode usar regras locais como backup para casos em que a amostragem do X-Ray não está disponível ou usar exclusivamente regras locais.
exemplo sampling-rules.json
{
"version": 2,
"rules": [
{
"description": "Player moves.",
"host": "*",
"http_method": "*",
"url_path": "/api/move/*",
"fixed_target": 0,
"rate": 0.05
}
],
"default": {
"fixed_target": 1,
"rate": 0.1
}
}
Este exemplo define uma regra personalizada e uma regra padrão. A regra personalizada aplica uma taxa de amostragem de 5% sem um número mínimo de solicitações para rastrear os caminhos em /api/move/
. A regra padrão rastreia a primeira solicitação a cada segundo e 10% das solicitações adicionais.
A desvantagem de definir regras localmente é que o destino fixo é aplicado por instância do gravador de forma independente, em vez de ser gerenciado pelo serviço X-Ray. À medida que você implanta mais hosts, a taxa fixa é multiplicada, dificultando o controle da quantidade de dados registrados.
Para configurar regras de backup, defina um hash para o documento no objeto de configuração que você passa para o gravador.
exemplo main.rb: configuração da regra de backup
require 'aws-xray-sdk'
my_sampling_rules = {
version: 1,
default: {
fixed_target: 1,
rate: 0.1
}
}
config = {
sampling_rules: my_sampling_rules,
name: 'my app',
}
XRay.recorder.configure(config)
Para armazenar as regras de amostragem de forma independente, defina o hash em um arquivo separado e exija que o arquivo o inclua em seu aplicativo.
exemplo config/sampling-rules.rb
my_sampling_rules = {
version: 1,
default: {
fixed_target: 1,
rate: 0.1
}
}
exemplo main.rb: regra de amostragem de um arquivo
require 'aws-xray-sdk'
require 'config/sampling-rules.rb'
config = {
sampling_rules: my_sampling_rules,
name: 'my app',
}
XRay.recorder.configure(config)
Para usar apenas regras locais, exija as regras de amostragem e configure o LocalSampler
.
exemplo main.rb: amostragem de regra local
require 'aws-xray-sdk' require 'aws-xray-sdk/sampling/local/sampler' config = { sampler: LocalSampler.new, name: 'my app', } XRay.recorder.configure(config)
Você também pode configurar o gravador global para desabilitar a amostragem e instrumentar todas as solicitações de entrada.
exemplo main.rb: desabilitar a amostragem
require 'aws-xray-sdk'
config = {
sampling: false,
name: 'my app',
}
XRay.recorder.configure(config)
Registro em log
Por padrão, o gravador encaminha os eventos informativos para $stdout
. Você pode personalizar o registro em log definindo um registrador
exemplo main.rb: registrar em log
require 'aws-xray-sdk'
config = {
logger: my_logger,
name: 'my app',
}
XRay.recorder.configure(config)
Use logs de depuração para identificar problemas como subsegmentos não fechados ao gerar subsegmentos manualmente.
Configuração do gravador no código
Configurações adicionais estão disponíveis no método configure
no XRay.recorder
.
-
context_missing
: defina comoLOG_ERROR
para evitar o lançamento de exceções, caso o código instrumentado tente registrar dados quando nenhum segmento estiver aberto. -
daemon_address
: defina o host e a porta do receptor do daemon do X-Ray. -
name
: defina um nome de serviço para o SDK usar para segmentos. -
naming_pattern
: defina um nome de domínio padrão para usar a nomeação dinâmica. -
plugins
: registre informações sobre os recursos da AWS de sua aplicação com plug-ins. -
sampling
: defina comofalse
para desabilitar a amostragem. -
sampling_rules
: defina o hash que contém suas regras de amostragem.
exemplo main.rb: desabilitar exceções de contexto ausente
require 'aws-xray-sdk'
config = {
context_missing: 'LOG_ERROR'
}
XRay.recorder.configure(config)
Configuração do gravador com o rails
Se você usa a estrutura do Rails, pode configurar as opções do gravador global em um arquivo Ruby em app_root/initializers
. O X-Ray SDK aceita uma chave de configuração adicional para usar com o Rails.
-
active_record
: defina comotrue
para registrar os subsegmentos das transações de banco de dados de registros ativos.
Defina as configurações disponíveis em um objeto de configuração denominado Rails.application.config.xray
.
exemplo config/initializers/aws_xray.rb
Rails.application.config.xray = {
name: 'my app',
patch: %I[net_http aws_sdk],
active_record: true
}
Variáveis de ambiente
É possível usar variáveis de ambiente para configurar o X-Ray SDK para Ruby. O SDK é compatível com as seguintes variáveis:
-
AWS_XRAY_TRACING_NAME
: defina um nome de serviço para o SDK usar para segmentos. Sobrepõe o nome do serviço que você definiu na estratégia de nomeação de segmentos do filtro do servlet. AWS_XRAY_DAEMON_ADDRESS
: defina o host e a porta do receptor do daemon do X-Ray. Por padrão, o SDK envia dados de rastreamento para127.0.0.1:2000
. Use essa variável se você tiver configurado o daemon para escutar em uma porta diferente ou se ele estiver sendo executado em um host diferente.AWS_XRAY_CONTEXT_MISSING
: defina comoRUNTIME_ERROR
para lançar exceções, caso o código instrumentado tente registrar dados quando nenhum segmento estiver aberto.Valores válidos
-
RUNTIME_ERROR
: lance uma exceção de tempo de execução. -
LOG_ERROR
: registre um erro e continue (padrão). -
IGNORE_ERROR
: ignore o erro e continue.
Erros relativos a segmentos ou subsegmentos ausentes poderão ocorrer quando você tentar usar um cliente instrumentado no código de inicialização que é executado quando nenhuma solicitação estiver aberta ou em um código que gere um novo thread.
-
As variáveis de ambiente substituem os valores definidos no código.