O Application Real-Time Monitoring Service (ARMS) permite extrair parâmetros de negócio de forma não intrusiva a partir dos rastreamentos de chamadas de aplicações Python. Configure regras de extração no console do ARMS para gravar parâmetros específicos de requisições e respostas HTTP nos Span Attributes, sem modificar o código da aplicação. Os atributos extraídos ajudam a localizar causas raiz, rastrear informações de requisição e acionar marcações de erro personalizadas em Spans correspondentes.
Pré-requisitos
O agente Python do ARMS está instalado na aplicação Python.
A versão do agente Python é 3.1.0 ou superior.
Escopo suportado
A tabela a seguir descreve os tipos e as fontes de extração de parâmetros compatíveis com a versão Python.
|
Tipo de extração de parâmetro |
Fonte do parâmetro |
Frameworks compatíveis |
Descrição |
|
Requisição de servidor HTTP |
Header, Query Parameter, Cookie, Body |
Flask, Django, FastAPI |
O body deve estar no formato JSON. Para mais informações, consulte FAQs. |
|
Resposta de servidor HTTP |
Header, Body, Cookie |
Flask, Django, FastAPI |
O body deve estar no formato JSON. A fonte Cookie lê o cookie do lado da requisição. |
|
Requisição de cliente HTTP |
Header, Query Parameter |
requests, httpx, aiohttp, urllib3 |
O cliente não oferece suporte às fontes Body ou Cookie. |
|
Resposta de cliente HTTP |
Header |
requests, httpx, aiohttp, urllib3 |
- |
Caso a source de parâmetro necessária não esteja no escopo suportado, adicione instrumentação personalizada usando o SDK do OpenTelemetry para gravar parâmetros de negócio como Attributes em um Span.
Acesse a página de configuração
Faça login no console do ARMS.
No painel de navegação à esquerda, escolha Application Monitoring > Application List. Na barra de menu superior, selecione a região de destino e clique em nome da aplicação Python desejada.
No painel de navegação à esquerda, clique em Configuration. Em seguida, clique em aba Parameter Extraction Rule.
A página de configuração contém duas seções:
Parameter Extraction Rule — Crie, visualize e modifique regras de extração de parâmetros de negócio. O agente do ARMS detecta dinamicamente alterações nas regras e extrai parâmetros de negócio com base em todas as regras ativadas.
Custom Error Settings — Configure regras de erro personalizadas para corresponder aos valores dos parâmetros de negócio extraídos. Se houver correspondência, o sistema marcará o Span correspondente como erro.
Crie uma regra de extração
Na seção Parameter Extraction Rule, execute as etapas a seguir:
Clique em Create Rule.
Insira um nome para a regra e um nome de Attribute.
Selecione um tipo de extração de parâmetro, configure a interface ativa e especifique o escopo da interface para a regra.
Na seção de regra de extração de parâmetro, adicione fontes de parâmetro e configure as etapas de processamento. É possível configurar múltiplas fontes e etapas de processamento. Se várias fontes puderem extrair o parâmetro, a fonte listada primeiro terá maior prioridade.
Defina se deseja ativar a regra e clique em Save.
Ao criar uma regra de extração pela primeira vez, reinicie a aplicação para que o recurso entre em vigor. Adições ou modificações subsequentes de regras não exigem reinicialização. O agente entrega as regras dinamicamente por meio da atualização de configuração dinâmica (hot configuration update), e elas entram em vigor dentro de 1 a 2 minutos.
Após a criação e ativação de uma regra, ela é entregue ao agente Python do ARMS em tempo real. Os parâmetros de negócio extraídos são registrados nos Attributes do Span de rastreamento de chamada correspondente. Você pode filtrar e consultar os parâmetros na página de análise de rastreamento. Os nomes de Attribute possuem o prefixo biz. por padrão. Nomes de Attribute duplicados não são permitidos.
Configuração da regra
|
Parâmetro |
Descrição |
|
Nome da regra |
Um nome legível para a regra. |
|
Nome do Attribute |
O nome do Span Attribute para o valor extraído. O nome começa com |
|
Tipo de extração de parâmetro |
O tipo de parâmetro a extrair (requisição/resposta de servidor HTTP, requisição/resposta de cliente HTTP). |
|
Interface ativa |
O escopo da interface para a regra. O agente extrai parâmetros apenas de interfaces que correspondem a esta regra. Para mais informações, consulte How the active interface matches. |
|
Regra de extração de parâmetro |
A source e o método de processamento para o parâmetro. É possível configurar múltiplas fontes de parâmetro e etapas de extração. Se várias fontes puderem extrair o parâmetro, a fonte listada primeiro terá maior prioridade. |
|
Fonte do parâmetro |
A source real do parâmetro (Header, Query Parameter, Cookie ou Body). |
|
Etapas de processamento de parâmetro |
Etapas sequenciais de processamento para analisar a source do parâmetro e extrair o valor final. É possível adicionar múltiplas etapas. A saída da etapa anterior torna-se a entrada da próxima etapa. Se nenhuma etapa de processamento for adicionada, o valor extraído será o texto JSON do objeto de source. |
|
Enable |
Especifica se a regra deve ser ativada. |
Métodos de processamento de parâmetro
A tabela abaixo detalha os métodos de processamento de parâmetros compatíveis com a versão Python.
|
Método de processamento |
Entrada |
Saída |
Descrição |
|
JsonPath |
String JSON ou objeto JSON |
String |
Oferece suporte a instruções JsonPath com notação de ponto. Se vários valores corresponderem, o sistema usará o primeiro. Exemplo: |
|
Regex |
String |
String |
Oferece suporte a expressões regulares com grupos nomeados. A substring a extrair corresponde a um grupo chamado |
Como funciona a correspondência da interface ativa
O alvo da correspondência é o nome do Span, no formato Request method Route, como POST /api/order ou GET /api/user/{id}. Tenha em mente o seguinte:
Equals /api/ordernão corresponde. Configure comoEquals POST /api/order.Alternativamente, use
Ends with /api/order.Ou utilize a expressão regular
.*/api/order(expressões regulares também usam semântica de correspondência total).
Processamento de valores
Truncamento — Se um valor extraído exceder o limite máximo de comprimento (100 caracteres por padrão), ele será truncado com
...anexado ao final. Para extrair campos Body mais longos, aumente o limite de comprimento do valor extraído.Mesclagem de múltiplos valores — Caso existam vários valores para o mesmo nome de Header ou Query Parameter, eles serão mesclados em uma string no formato
[a,b,c].Dessensibilização — Quando a dessensibilização estiver ativada, o valor extraído será substituído por
***.Cookie — Se múltiplos cookies tiverem o mesmo nome, o último valor será utilizado. A fonte Cookie na fase de resposta lê o cookie do lado da requisição.
Verifique a configuração
Depois que uma regra de extração de parâmetro é configurada, ela entra em vigor imediatamente (exceto pela primeira regra, que exige reinicialização da aplicação). Para verificar se a extração está funcionando:
Localize o nome do Attribute para a nova regra. Por exemplo, se você definir o nome do Attribute como
orderCode, o nome completo do Attribute serábiz.orderCode.Na página de análise de rastreamento, adicione o nome do Attribute no formato
attributes.<Attribute name>(por exemplo,attributes.biz.orderCode) como condição de consulta para filtrar os Spans relevantes.Clique em um rastreamento e verifique o painel Span Attributes. Se o atributo
biz.orderCodeaparecer com o valor extraído esperado, a regra de extração entrou em vigor.
Gerencie regras
Ativar ou desativar uma regra — Alterne o interruptor Enable no lado direito da regra de destino.
Editar ou excluir uma regra — Clique em Edit ou Delete no lado direito da regra de destino.
Exclusão em lote — Selecione as regras de extração a excluir e clique em Batch Delete.
-
Cópia em lote — Selecione as regras de extração a copiar e clique em Batch Copy to Other Applications. Na caixa de diálogo, escolha se deseja copiar as regras para todas as outras aplicações ou para aplicações específicas.
A cópia em lote leva de 1 a 2 minutos para entrar em vigor.
Apenas as regras de extração de parâmetro são copiadas. As regras de erro personalizadas associadas não são copiadas para a aplicação de destino.
Uma regra não será copiada se a aplicação de destino já possuir uma regra com o mesmo nome de Attribute.
Perguntas frequentes
O que causa falha na extração de parâmetros?
O tipo ou a source de extração de parâmetro não está no escopo suportado (por exemplo, a fonte Body ou Cookie para o cliente). Consulte Supported scope para verificar se o framework e a source atuais são compatíveis.
A regra de correspondência da interface ativa está configurada incorretamente. O alvo da correspondência é o nome do Span no formato
Request method Route. Uma regra comoEquals /api/ordernão corresponde. Consulte How the active interface matches.-
A sintaxe da etapa de processamento de parâmetro está incorreta ou o tipo de entrada não corresponde aos requisitos do método de processamento:
Regex deve conter um grupo nomeado chamado
rese usa semântica de correspondência total. Para corresponder a uma substring, adicione.*em ambos os lados.A entrada para JsonPath deve ser um objeto JSON ou texto JSON. Executar JsonPath em uma string simples (como o valor de Header
abc) não produz resultado.
A versão do agente Python é anterior à 3.1.0, que não oferece suporte à extração de parâmetros de negócio.
A aplicação não foi reiniciada após a criação da primeira regra.
O que causa falha na extração do Body?
Para evitar afetar a leitura do corpo da requisição ou resposta pela própria aplicação, o agente realiza uma verificação de admissão antes de ler o Body. Se qualquer uma das condições a seguir não for atendida, a source Body será totalmente ignorada (não truncada antes da análise):
Content-Type não é JSON — Apenas
application/jsonou tipos de mídia terminados com+jsonsão compatíveis. Tipos comotext/plain,application/x-www-form-urlencoded,multipart/form-datae tipos binários não são extraídos.Content-Length ausente ou excede o limite — Se o cabeçalho da requisição não contiver
Content-Length(por exemplo, codificação de transferência chunked), ou se o comprimento do Body exceder o limite superior (64 KB por padrão), todo o Body será ignorado.Body não é JSON válido codificado em UTF-8 — Se a decodificação ou a análise JSON falhar, o Body será ignorado.
Resposta em streaming — Respostas de streaming do Flask ou
direct_passthrough,StreamingHttpResponsedo Django eStreamingResponsedo FastAPI/Starlette (incluindo SSE) não extraem o Body da resposta.
A seguir estão cenários específicos de frameworks:
FastAPI — O Body da requisição fica visível apenas quando a aplicação realmente o lê — ou seja, o endpoint declara um parâmetro Body (como um modelo Pydantic ou
Body()), ou o código chamaawait request.body()ouawait request.json(). Se o endpoint não ler o corpo da requisição, o agente não consome ativamente o fluxo da requisição e o Body não pode ser extraído.Django — Se a aplicação consumir primeiro o fluxo da requisição usando
request.read()(acionandoRawPostDataException), ou se o Body exceder o limiteDATA_UPLOAD_MAX_MEMORY_SIZEdo Django (acionandoRequestDataTooBig), o Body não poderá ser extraído. A leitura normal através derequest.bodynão é afetada (o Django armazena o body em cache, então a aplicação ainda pode lê-lo normalmente).Flask — O agente lê e armazena em cache o corpo da requisição usando
request.get_data(cache=True). A aplicação ainda pode ler o corpo normalmente depois disso, sem limitações adicionais.
E se o valor extraído não corresponder às expectativas?
Valor termina com
...: O valor excedeu o limite de comprimento do valor extraído (100 caracteres por padrão) e foi truncado. Aumente o limite de comprimento.Valor é
***: A dessensibilização está ativada para esta regra ou globalmente.Valor está no formato
[a,b]: Existem múltiplos valores para o mesmo Header ou Query Parameter e eles foram mesclados.Quando o JsonPath corresponde a múltiplos nós, apenas o primeiro resultado é retornado.
Quando múltiplas regras gravam no mesmo nome de Attribute, a regra aplicada posteriormente sobrescreve a anterior.
Posso usar a source Query Parameter para extrair campos de formulário de um Body de requisição codificado como formulário?
Não. Quando o Content-Type da requisição é application/x-www-form-urlencoded, a source Query Parameter é totalmente ignorada para evitar que o agente acione a análise de formulário do framework e afete a leitura do corpo da requisição pela própria aplicação. Para tais parâmetros, passe-os através de strings de consulta de URL ou Headers, ou adicione instrumentação personalizada conforme descrito na próxima pergunta.
Como extraio fontes de parâmetros de negócio não compatíveis com a versão Python?
Adicione instrumentação personalizada usando o SDK do OpenTelemetry para aplicações Python para gravar parâmetros de negócio como Attributes em um Span.