O agente New Relic Ruby instrumenta automaticamente clientes e servidores gRPC que usam a gem grpc (versão 1.0.0 ou superior). Todos os tipos de comunicação são suportados: unário, bidirecional, streaming de cliente e streaming de servidor.
Importante
A instrumentação gRPC requer o agente Ruby versão 8.10.0 ou superior.
Configuração (todas as configurações são opcionais)
Você pode configurar a instrumentação de clientes e servidores gRPC separadamente. Por padrão, ambas as opções de configuração são definidas como auto
, que é a abreviação de automatic
. O comportamento automático do agente para cada um é ativar a instrumentação tentando aproveitar o comportamento de pré-anexação do módulo Ruby inicialmente e recorrendo ao comportamento de cadeia do método Ruby se forem encontrados problemas de compatibilidade conhecidos.
Veja opções e exemplos adicionais nas seções a seguir.
Opções de cliente e servidor
Você pode alterar o comportamento do agente modificando o arquivo de configuração do New Relic ou definindo variáveis de ambiente. Aqui estão as opções que se aplicam a clientes e servidores:
auto
: O padrão que é habilitado por meio da seleção automática de comportamento do método Rubydisabled
: instrumentação desabilitadaprepend
: Força o uso do prefixo do método Rubychain
: Forçar o uso do método Ruby cadeia
Opções específicas do cliente
Use o seguinte apenas para clientes:
- parâmetro do arquivo de configuração:
instrumentation.grpc_client
- variável de ambiente:
NEW_RELIC_INSTRUMENTATION_GRPC_CLIENT
Opções específicas do servidor
Use o seguinte apenas para servidores:
- parâmetro do arquivo de configuração:
instrumentation.grpc_server
- variável de ambiente:
NEW_RELIC_INSTRUMENTATION_GRPC_SERVER
Exemplos de configuração de cliente e servidor
Para desativar a instrumentação do servidor gRPC por meio do arquivo de configuração:
# newrelic.ymlinstrumentation.grpc_server: disabled
Para desabilitar a instrumentação do cliente gRPC por meio de uma variável de ambiente:
$export NEW_RELIC_INSTRUMENTATION_GRPC_CLIENT=disabled
Verificação
Assim que o agente New Relic Ruby for iniciado, ele detectará a presença da gema grpc
carregada e tentará aplicar a instrumentação gRPC. Quando a aplicação dessa instrumentação for bem-sucedida para os componentes do cliente e do servidor gRPC, o agente gravará as seguintes linhas em seu arquivo de log (log/newrelic_agent.log
por padrão):
INFO : Installing New Relic supported gRPC_Client instrumentation using PrependINFO : Installing New Relic supported gRPC_Server instrumentation using Prepend
Uso
Contanto que a instrumentação esteja funcionando corretamente (consulte a verificação acima para confirmar isso), toda a instrumentação executada pelo agente New Relic Ruby deve ser totalmente automática e não exigir nenhuma modificação em nenhum código do cliente e/ou servidor gRPC existente.
A instrumentação gRPC do agente New Relic Ruby inclui cabeçalhos distributed tracing em spans, o que permite que chamadas de cliente e servidor gRPC sejam conectadas a qualquer outro serviço que suporte distributed tracing W3C. As solicitações gRPC podem ser enviadas de um cliente baseado em Ruby para um servidor baseado em outra linguagem, e um servidor baseado em Ruby pode atender solicitações provenientes de um cliente baseado em outra linguagem.
Importante
As solicitações do cliente gRPC não serão relatadas à New Relic, a menos que sejam geradas quando uma transação existente da New Relic estiver presente. Normalmente, isso significa que um método controlador Rails ou processo de trabalho em segundo plano está ativo e responsável pela invocação da solicitação do cliente gRPC. A solicitação será então acumulada na transação do wrapper externo na interface da web do New Relic.
As solicitações do servidor gRPC sempre gerarão uma nova transação New Relic e não exigirão nem serão acumuladas em nenhuma transação New Relic pré-existente.
Ver dados
Você pode ver os dados gRPC coletados em várias páginas na interface do New Relic.
Página de resumo
Na página Resumo da interface, as solicitações do cliente gRPC aparecem como transação da web e contribuem com dados para os seguintes gráficos: Web transactions time, Throughput e Error rate.
Página distributed tracing
Dica
distributed tracing é ativado por padrão no novo agente Ruby, mas se você tiver dúvidas, consulte distributed tracing para seus serviços Ruby.
Confira os dados do gRPC na página distributed tracing da interface:
Vá para one.newrelic.com > All capabilities > APM & services.
Clique na sua entidade (serviço).
Na seção Monitor do painel esquerdo, clique em Distributed tracing.
Clique em um grupo trace .
Escolha um trace da lista e clique nele.
Clique em Expand all.
Na lista resultante de intervalos trace , clique em um intervalo trace individual.
Clique na guia Attributes no painel direito.
- Client instances: O atributo
grpc_status
,grpc_type
,http.method
ehttp.url
devem aparecer. No caso de falha na solicitação do cliente (que terá um valorgrpc_status
diferente de0
), um atributogrpc_message
adicional aparecerá com a mensagem de status do gRPC. - Server instances: O atributo
request.grpc_type
,request.method
erequest.uri
devem aparecer.
- Client instances: O atributo
Contanto que o aplicativo cliente e servidor estejam sendo monitorados por um agente New Relic com suporte para gRPC (em Ruby ou outra linguagem), o mapa distributed tracing deverá fazer o seguinte:
- Exiba o aplicativo cliente e servidor.
- Informar quantos tipos de chamadas distintas foram realizadas entre eles.
No caso de uma exceção Ruby baseada em gRPC, as informações sobre a exceção aparecerão na página Events > Errors .
Suporte e feedback
Ao entrar em contato com a New Relic para obter suporte e/ou feedback relacionado à instrumentação gRPC do agente New Relic Ruby, tente obter respostas para as seguintes perguntas:
- Qual versão da gem
grpc
você está usando? - Você usa o rastreamento infinito da New Relic?
- Como você descreveria o ambiente do seu aplicativo? framework, versão Ruby, outras tecnologias-chave usadas)
- Para que você usa o gRPC?
- Você usa Ruby para clientes gRPC?
- Você usa uma linguagem diferente para clientes gRPC?
- Você usa Ruby para servidores gRPC?
- Você usa uma linguagem diferente para servidores gRPC?
- Para onde você está chamando seu código de cliente gRPC? (de um controlador, um trabalho em segundo plano, etc.)
- Que estratégia/estratégias você está usando para enviar seus dados? (unário, bidirecional, streaming de cliente, streaming de servidor)