Modificar Definições de Sondagem

Você pode modificar ou desativar as definições de sondagem padrão ou ativar uma sondagem personalizada para monitorar classes adicionais.

Modificar ou Desativar Definições de Sondagem Padrão

Você pode modificar ou desativar as definições de sondagem padrão usando o arquivo ProbeConfig.acml.

Depois que você provisionar um agente Java do APM, o arquivo ProbeConfig.acml ficará disponível no diretório oracle-apm-agent/config. Para obter informações sobre como acessar o arquivo ProbeConfig.acml, consulte Provisionar o Agente Java do APM.

O arquivo ProbeConfig.acml permite fazer o seguinte:

  • Ativar ou desativar determinadas investigações.
  • Desative o monitoramento de padrões específicos de rastreamento/spans com base em informações como URL, extensão de arquivo etc.
  • Ative a captura de tags/dimensões adicionais. Por exemplo, capturar cabeçalhos e parâmetros específicos para a investigação SERVLET.
  • Manipule o nome do intervalo. Por exemplo, manipulando o URL para investigações SERVLET ou HTTP_CLIENT.
  • Capture instruções de consulta SQL de BD com mais de 1.000 caracteres como log de intervalo.

    Para ativar ou desativar o registro em log de todas as instruções de consulta sql no log de extensão jdbc, use o parâmetro enable_complete_sql_span_log_jdbc. Esse recurso é útil quando uma consulta sql longa é truncada em 1.000 caracteres. Por exemplo, use: enable_complete_sql_span_log_jdbc: true para ativá-lo.

  • Capture o nome de usuário conectado.

    Os nomes de usuário hash são capturados para as sessões autenticadas com a intenção de permitir a geração de relatórios sobre o número de usuários exclusivos, sem expor informações de identificação pessoal (PII). No entanto, pode ser necessário relatar o nome de usuário em formato de texto simples. Nesse caso, vá para a seção geral e defina track_plain_username: true.

  • Capturar payloads.

    O payload inclui o conteúdo da solicitação e da resposta HTTP.

    Você pode rastrear o fluxo completo das solicitações do aplicativo e enviar os dados coletados ao Trace Explorer para análise, ativando o payload.

    O suporte à captura de carga útil inclui Servlet, JAX-RS Server, OSB Proxy Service e OSB Business Service.

    Começando com o agente Java do APM versão 1.16, Apache Http Clients (4.x e 5.x), JDK 11+ Http Client, OCI SDK Http Client (2.x e 3.x), Spring Web Client 5.x e OkHttp Clients 2.x e 3.x também são suportados.

    Ativar payload: Para ativar payloads de Solicitação e Resposta HTTP, defina os parâmetros: capture_request_payload e capture_response_payload no arquivo ProbeConfig.acml.

    • Para capturar um subconjunto do payload, as expressões xpath/jsonpath/regex podem ser aplicadas com base no nome da operação.
    • Depois de ativá-lo, os payloads capturados ficam disponíveis como dimensões: RequestPayload e ResponsePayload, respectivamente. O tamanho máximo padrão é de 1000 caracteres.
    • É possível capturar várias dimensões do mesmo payload especificando tag_name junto com a expressão.
  • Altere a modelagem de chamadas assíncronas HttpClient.

    A partir do agente Java do APM versão 1.16, um único intervalo representa a solicitação de saída, o tempo de espera e o callback.

    Para manter o comportamento anterior das versões anteriores do agente (um intervalo para a chamada de saída e um segundo para o callback), modifique o parâmetro httpclient_async_one_span na seção HTTP_CLIENT no arquivo ProbeConfig.acml e defina-o como false.
    #Enables capturing async client invocations as a single span. No separate callback spans will be reported
    httpclient_async_one_span: false

O comportamento das definições de sondagem padrão pode ser atualizado usando o arquivo ProbeConfig.acml do agente Java do APM.

Para fazer alterações nas definições de investigação padrão, siga as instruções disponíveis no arquivo ProbeConfig.acml.

As alterações no arquivo ProbeConfig.acml podem ser feitas quando o servidor de aplicativos está em execução, e o servidor de aplicativos não precisa ser reinicializado para que as alterações tenham efeito.

Observação

A partir da versão 1.12 do agente Java do APM, há uma operação aprimorada e simplificada da convenção de nomenclatura para sondagens Servlet, HttpClient e OSB. Portanto, a regra replace_all_patterns para remover o ID Hex e os números não é mais incluída por padrão no arquivo ProbeConfig.acml. Isso se aplica às seções SERVLET, HTTP_CLIENT e OSB.

Se seu cenário específico ainda o exigir, adicione o seguinte de volta ao arquivo depois de fazer upgrade do agente Java do APM:
# Hex ID and numbers
-
      pattern: "([a-fA-F\._\:-]*[0-9]+){2,}[a-fA-F_\:-]*([/\.])?"
      replacement: "*$2"

Configurar uma Sondagem Personalizada

Você pode configurar uma sondagem personalizada para monitorar classes adicionais e obter detalhes específicos do aplicativo.

A sondagem personalizada será útil se o conjunto incorporado de sondagens disponíveis no arquivo ProbeConfig.acml não atender aos requisitos de monitoramento. Por exemplo, se quiser monitorar um thread de segundo plano que não é monitorado usando as sondagens padrão, você poderá configurar uma sondagem personalizada para monitorá-lo.

Para configurar uma investigação personalizada, siga este procedimento:

  1. Configure um arquivo DirectivesConfig.acml para especificar quais classes, methods ou annotations devem ser monitorados. Para obter mais informações, consulte Configuração do Arquivo DirectctivesConfig.acml.
  2. Adicione o arquivo DirectivesConfig.acml ao diretório oracle-apm-agent/config.
    Agora está obsoleto para especificar o arquivo DirectivesConfig.acml usando o seguinte no script de inicialização do servidor de aplicativos:
    -Dcom.oracle.apm.agent.customDirectivesFile=<Path_to_DirectivesConfig.acml_file>
    Remova o argumento acima do script de inicialização do aplicativo se você tiver especificado o arquivo DirectivesConfig.acml dessa forma anteriormente.
  3. Reinicie o servidor de aplicativos se um novo arquivo DirectivesConfig.acml for especificado.

    As alterações no arquivo DirectivesConfig.acml entram em vigor depois que você reinicia o servidor de aplicativos.

    A reinicialização do servidor de aplicativos é necessária ao especificar um novo arquivo DirectivesConfig.acml ou ao excluir o arquivo.

    A reinicialização do servidor de aplicativos não será necessária se você fizer o seguinte:
    • Edite o span_name.
    • Adicione, edite ou exclua tags, logs ou Variáveis Avançadas em um arquivo DirectivesConfig.acml existente que já esteja em vigor.
    A reinicialização do servidor de aplicativos será necessária se você alterar quaisquer outros parâmetros da tabela abaixo em DirectivesConfig.acml Parameters.

Configuração do Arquivo DirectivasConfig.acml

Para configurar o arquivo DirectivesConfig.acml, analise o seguinte:

Parâmetros DirectorConfig.acml

Veja aqui as informações sobre os parâmetros que você pode especificar no arquivo DirectivesConfig.acml.

Pelo menos um dos parâmetros a seguir DEVE ser especificado no arquivo DirectivesConfig.acml:

  • class_name
  • class_name_regex
  • class_annotation
  • method_annotation
  • class_annotation_regex
  • method_annotation_regex
Parâmetro Descrição Exemplo
label

Um label exclusivo para a diretiva. Este é um parâmetro obrigatório.

Test:
  ...
Test2:
  ...
Test3:
  ...
class_name

O nome da classe que você deseja monitorar. É necessário especificar o nome completo da classe, incluindo o pacote.

Test:  
  class_name: "com.oracle.apm.samples.servlet.OutboundTestServlet"
class_name_regex

Um padrão de expressão regular (regex) para monitorar qualquer classe que corresponda a ele.

Para o padrão regex, em vez de usar "." para o pacote, use "/". Por exemplo, se você quiser monitorar uma classe chamada a.b.c.d.ClassName, o padrão regex deverá corresponder a a/b/c/d/ClassName.

Se class_name_regex e class_name forem especificados, class_name será ignorado.

Test:
  # Monitor all classes under the com.oracle.apm.test package
  class_name_regex: "com/oracle/apm/test/.*"
method_name

O nome do método que você deseja monitorar. Não inclui parâmetros de método.

Se method_name não for especificado, todos os métodos serão monitorados.

Test:
  class_name: "com.oracle.apm.samples.servlet.OutboundTestServlet"
  method_name "performHttpURLConnectionCall"
method_name_regex

Um padrão regex para monitorar qualquer método que corresponda a ele.

Se method_name_regex não for especificado, todos os métodos serão monitorados.

Se method_name_regex e method_name forem especificados, method_name será ignorado.

Test:
  class_name: "com.oracle.apm.samples.servlet.OutboundTestServlet"
  # Monitor all methods that start with "perform"
  method_name_regex: "perform.*"
class_annotation

O nome completo da classe da anotação que você deseja monitorar. Qualquer class com a anotação especificada é monitorada.

Test:
  class_annotation: "javax.jws.WebService"
method_annotation

O nome completo da classe da anotação que você deseja monitorar. Qualquer method com a anotação especificada é monitorado.

Test:
  method_annotation: "javax.jws.WebMethod"
class_annotation_regex

Um padrão regex para monitorar qualquer anotação de classe que corresponda a ele.

Para o padrão regex, em vez de usar "." para o pacote, use "/". Além disso, o valor deve começar com "L" e terminar com ";". Por exemplo, se você quiser monitorar uma anotação chamada a.b.c.d.Annotation, o padrão regex deverá corresponder a La/b/c/d/Annotation;.

Se class_annotation_regex e class_annotation forem especificados, class_annotation será ignorado.

Test:
  # Monitor all Path annotations in javax
  class_annotation_regex: "Ljavax/.*/Path;"
Test2:
  # Monitor all annotations that end with "Path"
  # The L in the beginning is not required since .* includes it
  class_annotation_regex: ".*/Path;"
Test3:
  # Monitor all annotations with the javax.jws package
  # The ; at the end is not required since .* includes it
  class_annotation_regex: "Ljavax/jws/.*"
method_annotation_regex

Um padrão regex para monitorar qualquer anotação de método que corresponda a ele.

Para o padrão regex, em vez de usar "." para o pacote, use "/". Além disso, o valor deve começar com "L" e terminar com ";". Por exemplo, se você quiser monitorar uma anotação chamada a.b.c.d.Annotation, o padrão regex deverá corresponder a La/b/c/d/Annotation;.

Se method_annotation_regex e method_annotation forem especificados, method_annotation será ignorado.

Test:
  # Monitor all Path annotations in javax
  method_annotation_regex: "Ljavax/.*/Path;"
Test2:
  # Monitor all annotations that end with "Path"
  # The L in the beginning is not required since .* includes it
  method_annotation_regex: ".*/Path;"
Test3:
  # Monitor all annotations with the javax.jws package
  # The ; at the end is not required since .* includes it
  method_annotation_regex: "Ljavax/jws/.*"
include_sub_classes

Especifique se as subclasses da classe de destino devem ser monitoradas. Por padrão, esse valor é definido como false.

Test:
  class_name: "com.oracle.apm.samples.servlet.OutboundTestServlet"
  method_name "performHttpURLConnectionCall"
  include_sub_classes: true
span_name

O nome do intervalo criado durante o monitoramento. Se span_name não for especificado, "${class_name}.${method_name}" será usado por padrão.

Observe que você pode especificar um nome para o intervalo, conforme mostrado no label Test no exemplo correspondente, que será usado toda vez que o destino monitorado for chamado.

Ao especificar o parâmetro span_name, você também pode usar variáveis, ${variable_name} e Variáveis Avançadas para obter informações adicionais sobre os parâmetros que você está monitorando e exibi-los no nome do intervalo. No exemplo correspondente, no label Test2, a variável param# denota os parâmetros alinhados com o método que você está monitorando.

Test:
  ...
  # The same name will be used every time the target class/method is invoked
  span_name: "SpecialName"
Test2:
  ...
  # Use the toString result of the first parameter passed to the monitored method
  span_name: "${param1}"
tags

As tags (nomes e valores) a serem incluídas no intervalo.

Como no caso do parâmetro span_name, você pode usar variáveis ao especificar valores para tags para adquirir e exibir informações adicionais sobre os parâmetros que você está monitorando.

Observe que as tags especificadas são exibidas como Dimensões na interface de usuário do Trace Explorer.

Para valores de tag, um tipo opcional pode ser especificado. Você pode especificar o valor da tag para ser do tipo String, Booliano, Inteiro, Longo, Flutuante ou Duplo usando a sintaxe e a palavra-chave apropriadas (conforme mostrado no exemplo). O tipo de valor de tag padrão será String. Será usado se nenhum tipo ou um tipo incompatível for especificado. Se um tipo incompatível for especificado para um valor de tag, o tipo será revertido para o padrão de String e haverá uma mensagem de log sobre a incompatibilidade. O valor da dimensão de intervalo pode ser confirmado por meio de consultas com agregações que aproveitam valores numéricos (se aplicável) no Trace Explorer.

Test:
  ...
  tags:
    importantInfo: "${param1}"
    consistentTag: "AlwaysTheSame"
    returnValue: "${return}"
    #The below tag will have value of default type String since no type was specified
    defaultTagType: "${param1}"
    #The below tag will have value of type Integer
    integerTag: "${param1} | integer"
    #The below tag will have value of type String, because the actual value type String, and the specified type Double are incompatible. Therefore it will default to String.
    booleanTag: "${param2} | double"
logs

Os logs (nomes e valores) que você deseja incluir no intervalo.

Como no caso dos parâmetros span_name e tags, você também pode usar variáveis ao especificar valores para o parâmetro logs para obter e exibir informações adicionais sobre os parâmetros que você está monitorando.

Observe que o logs especificado é exibido como Logs de Intervalo na interface do usuário do Trace Explorer.

Test:
  ...
  logs:
    importantInfoLog: "${param1}"
    consistentLog: "AlwaysTheSame"
    returnValueLog: "${return}"
  ...

span_name, tags e logs de Variáveis

Ao especificar os parâmetros span_name, tags e logs, as seguintes variáveis podem ser usadas para obter informações adicionais:

  • class_name: Nome da classe que está sendo monitorada, incluindo o pacote.
  • short_class_name: Nome da classe que está sendo monitorada, excluindo o pacote.
  • method_name: Nome do método que está sendo monitorado.
  • method_descriptor: Formato do descritor da assinatura do método que está sendo monitorado.
  • param#: Parâmetros do método que está sendo monitorado, em que param1 denota o primeiro parâmetro, param2 o segundo parâmetro, e assim por diante.
  • this: Objeto que está sendo monitorado. Observe que se o method que está sendo monitorado for static, a variável this não estará disponível.
  • return: Valor de retorno do método que está sendo monitorado.
    Observação

    A variável return só pode ser usada para o parâmetro tags e não para span_name.

DirectorConfig.acml - Exemplo

Veja um exemplo do arquivo DirectivesConfig.acml:

Test:
  class_name: "com.oracle.apm.samples.servlet.OutboundTestServlet"
  method_name: "performHttpURLConnectionCall"
  include_sub_classes: true
  span_name: "${short_class_name}.${method_name}"
  tags:
    targetURL: "${param2}"
    port: "${param1}"

Com base no exemplo acima:

  • com.oracle.apm.samples.servlet.OutboundTestServlet.performHttpURLConnectionCall será monitorado, junto com suas subclasses.
  • O nome do intervalo exibido no Trace Explorer será OutboundTestServlet.performHttpURLConnectionCall.
  • As tags targetURL e port serão adicionadas ao intervalo e usarão os valores do primeiro e segundo parâmetros do método performHttpURLConnectionCall.

As capturas de tela a seguir são um exemplo da página de sondagem personalizada:

Captura de Tela de Exemplo de Sondagem Personalizada 1

Captura de Tela de Exemplo de Sondagem Personalizada 2

Variáveis avançadas para sondagem personalizada

Ao usar sondagem personalizada, você pode configurar a sintaxe de comando avançada para construir dinamicamente variáveis usando encadeamento de método e manipulação de string por meio de expressões regulares. Essas variáveis avançadas podem ser referenciadas nas seções span_name , tags e logs, assim como as outras variáveis mencionadas acima.

Workflow Geral para Usar Variáveis Avançadas
  1. Reveja como configurar a investigação personalizada. Consulte Configurar uma Sondagem Personalizada.
  2. Reveja a sintaxe da cadeia de comandos. Consulte Sintaxe da Cadeia de Comandos.
  3. Revise os exemplos. Consulte Exemplos de Variáveis Avançadas.

Sintaxe da Cadeia de Comandos

Uma cadeia de comandos consiste nas três seguintes partes:

O símbolo de pipe "|" é usado para significar o encanamento do objeto inicial para o primeiro comando de cadeia e o objeto de saída de encanamento de um comando de cadeia para o próximo.

Tempo de Execução

As cadeias de comandos são executadas antes ou depois que o método monitorado da Sondagem Personalizada é chamado. Isso é especificado pelo tempo de execução, que aparece antes do SOI.

<execution time> ::= [before || after]

Nem todas as Cadeias de Comandos são compatíveis com os dois tempos de execução: quando return é usado como SOI ou como um parâmetro em um comando de método, o tempo após a execução deve ser usado. Isso ocorre porque o objeto de retorno só está disponível depois que o método monitorado é chamado. Quando outras variáveis são usadas como SOIs ou parâmetros nos comandos de método, os tempos de execução são dependentes das cadeias referenciadas.

Por exemplo, vamos definir chain1 e chain2, em que chain2 usa chain1 como SOI ou parâmetro para um comando de método. Observe que chain1 deve ser definido antes de chain2 se ambas as cadeias usarem o mesmo tempo de execução. Caso contrário, chain1 deverá ter um tempo de execução antes e chain2 deverá ter um tempo de execução depois.

Mais informações sobre o uso de SOIs e os comandos de método podem ser encontradas na seção abaixo Iniciando o Identificador de Objeto.

Identificador do Objeto Inicial

Um Identificador de Objeto Inicial (SOI) pode ser objeto associado a:

  • Palavras-chave predefinidas: this, return e param#.

  • Saída de uma cadeia identificada por sua chave.

Os tempos de execução podem ser pareados com a sintaxe SOI.

SOI Descrição Possível Tempo de Execução sintaxe Exemplo
ThisSOI A cadeia é executada no objeto especificado por class_name no arquivo DirectorConfig.acml. before ou after <this SOI> ::= [before || after] this thisSOIchain: before this | method (public getAddress ())
ParamSOI A cadeia é executada no objeto especificado por param# no arquivo DirectorConfig.acml.

Esses são parâmetros do método que está sendo monitorado.

before or after <param_SOI> ::= [before || after] param# paramSOIchain: before param1 | method (public getAddress ())

param1 denota o primeiro parâmetro.

ReturnSOI A cadeia é executada no objeto especificado por return no arquivo DirectorConfig.acml.

Esse é o valor de retorno do método que está sendo monitorado.

after <return_SOI> ::= [after] return returnSOIchain: after return | method (public getAddress ())
StaticSOI A cadeia não é iniciada com nenhum objeto. before or after <static SOI> ::= [before || after] static staticSOIchain: before static | static method((com.test.beans.Employee)(public getLevel()))
VariableSOI A cadeia é executada no objeto especificado por uma das variáveis acima definidas no arquivo DirecctionConfig.acml. before or after <variable_SOI> ::= [before || after] variable-key var1: this | method (public setNewAddress (string "Variable Street", string "Redwood City", string "California", int 94065, string "US"))

var1UsedAsStartObject: after var1 | method (public getAddress ()) | field(private street)

Sequência do Comando de Cadeia

Uma sequência de comandos de cadeia consiste em um ou mais comandos de cadeia.

Sintaxe: <chain_command_sequence> ::= <chain_command> || <chain_command> | <chain_command_sequence>

Tipos de Comando de Cadeia

Sintaxe: <chain_command> ::= <method_command> || <field_command> || <regex_command>

Comando de Método

Um comando de método é usado para chamar um método. A saída de um comando de método é o objeto de retorno desse método específico.

Um comando de método consiste na visibilidade do método, no nome do método e na sequência do parâmetro. Isso imita a assinatura do método.

A sintaxe deve se parecer com:

<method_command> ::= method(<visibility> <java_identifier> (<parameter_sequence>))

<visibility> ::= private || public || protected || package

O valor package é usado para especificar um método ou campo de visibilidade (sem modificador) privado do pacote.

<scalar_parameter_type> ::= int || double || float || String

<parameter> ::=<scalar_parameter_type> value || this || return || param<index> || variable-key

<parameter_sequence> ::= <parameter> || <parameter> , <parameter_sequence>

Exemplos de Comando de Método

  • Esta cadeia mostra this como objeto Usuário. Essa cadeia chama o método público getAddress na classe Usuário. A saída desta cadeia será a representação de string do endereço deste Usuário.
    addresschain: this | method (public getAddress ())
  • Essa cadeia chama o método public setName no Usuário e define o nome como "John Smith". Como esse método set não tem valor de retorno, a saída dessa cadeia será nula. Essa cadeia demonstra como usar parâmetros escalares em comandos de método.
    testSetupVar: this | method(public setName(String "John", String "Smith"))
  • Essa cadeia usa param1 (o primeiro parâmetro do método que está sendo monitorado) como um parâmetro do método que estamos chamando.
    testParamAsParam: this | method(public incUserId(param1))
  • Essa cadeia usa outra variável, nesse caso, testParamAsParam, como um parâmetro para o método.
    testVarAsParam: this | method(public incUserId(testParamAsParam))
  • Essa cadeia chama o supermétodo explicitamente.
    invokeUsingSuper: this | method(private super.overloadPrivate(String "string3", int 2222))

Comando de Campo

Um comando de campo é usado para inspecionar valores de campo. A saída de um comando de campo é o objeto nesse campo específico.

Um comando de método consiste na visibilidade do campo e no nome do campo.

Sintaxe: <field_command> ::= field (<visibility> <java_identifier>)

Exemplos de comando de campo

O exemplo abaixo pressupõe que this seja um Objeto do usuário. Aqui estamos acessando campos de várias visibilidade na classe User. A saída de cada cadeia é o valor do respectivo campo.
fieldPublic: this | field(public firstName)
fieldProtected: this | field (protected lastName) 
fieldPackagePrivate: this | field (package middleName)
fieldPrivate: this | field (private maidenName)

Comando do Método Estático

Um comando de método estático é usado para chamar um método estático. A saída de um comando de método estático é o objeto de retorno desse método específico.

Um comando de método consiste em uma classe inicial, visibilidade do método, nome do método e sequência de parâmetros. Isso imita a assinatura do método.

A sintaxe deve ser semelhante a esta:
<static_method_command> ::= static method((<starting_class>)(<visibility> <java_identifier> (<parameter_sequence>)))

A classe inicial é a classe na qual o método estático é encontrado.

Exemplos de Comando do Método Estático
  • Esta cadeia começa sem objeto. Essa cadeia chama o método público getlevel na classe Funcionário. A saída dessa cadeia será a representação de string do nível deste Funcionário.
  • staticMethodPublic: static | static method((com.test.beans.Employee)(public getLevel()))
  • O uso de outras visibilidades e diferentes tipos de parâmetros de método são os mesmos que nos exemplos de Comando de Método.

Comando de Campo Estático

Um comando de campo estático é usado para inspecionar valores de campo estáticos. A saída de um comando de campo estático é o objeto nesse campo específico.

Um comando de método consiste em uma classe inicial, visibilidade de campo e nome de campo.

Sintaxe:

A sintaxe deve ser semelhante a esta:
<static_field_command> ::= static field ((<starting_class>)(<visibility> <java_identifier>))

Exemplos de comando de campo estático:

O exemplo abaixo pressupõe que this seja um Objeto do usuário. Aqui estamos acessando campos de várias visibilidade na classe Usuário. A saída de cada cadeia é o valor do respectivo campo.

staticFieldPublic: static field((com.test.beans.Employee)(public role))

O uso de outras visibilidades é o mesmo que nos exemplos de Comando de Campo.

Comando Regex

Um comando regex é usado para localizar e/ou substituir strings resultantes do SOI, retornar valores dos comandos de método ou dos valores de campo. A saída de um comando regex é uma string.

Um comando regex consiste na string regex. Opcionalmente, ele também pode consistir em uma string substituta, além de se a primeira ou todas as ocorrências devem ser substituídas.

Sintaxe: <regex_command> ::=regex (string [,<replace-string> [, first || all]])

Exemplos de Comando Regex

  • Após obter o endereço "100 Oracle Pkway, Redwood City, CA 94065", substitua a primeira "Pk" por "This" para obter "100 Oracle Thatway, Redwood City, CA 94065
    replaceFirstChain : this | method (public getStreet()) | regex(Pk, This, first)
  • Após obter o endereço "100 Oracle Pkway, Redwood City, CA 94065", substitua todos os "0"s por "1" para obter "111 Oracle Pkway, Redwood City, CA 94165"
    replaceAllChain: this | method (public getStreet()) | regex(0, 1, all)

Exemplos de Variáveis Avançadas

Este é um exemplo de uma cadeia de comandos no arquivo DirectivesConfig.acml.

test:  class_name: "com.test.beans.User"
  method_name: "incAge"
  span_name: "${short_class_name}.${method_name}"
  tags:
    t: "${this}"
    params: "${param1}"
    r: "${return}"
    exampleVarTag: "${exampleVar}"
  variables:
    exampleVar:  before this | method (public getAddress ()) | field(private street) |  regex(Pk,This, all) | regex(This, That, first) 

Revisão da Execução da Cadeia Variável exampleVar:

A cadeia exampleVar começa com o objeto Usuário especificado em "class_name". XX
  • O primeiro comando de cadeia é um comando de método que retorna um objeto Address. Por exemplo: "100 Oracle Pkway, Redwood City, CA 94065."

  • O segundo comando de cadeia é um comando de campo que obtém a rua do endereço do comando de campo anterior. Isso será "Oracle Pkway".

  • O terceiro comando de cadeia é um comando regex que substitui todas as instâncias de "Pk" por "This" e retorna "Oracle Thisway".

  • O último comando de cadeia é um comando regex que substitui a primeira instância de "Isso" por "Isso", retornando "OracleThatway".

Resultado Final: Ao observar Dimensões desse intervalo, você vê uma tag chamada exampleVarTag com o valor "OracleThatway". Observe que a especificação de exampleVarTag: "${exampleVar}" na seção de tags foi necessária para ver essa dimensão de intervalo.

Use ACMLValidate para Verificar a Sintaxe do Arquivo

Ao trabalhar com arquivos do tipo acml, você pode usar o utilitário ACMLValidate para verificar a sintaxe dos arquivos acml.

ACMLValidate é um utilitário do agente Java do APM que pode ser usado para verificar e verificar a sintaxe dos seguintes arquivos acml:
  • ProbeConfig.acml
  • DirectivesConfig.acml
  • CircuitBreaker.acml
Observação

O utilitário ACMLValidate valida a sintaxe, mas não valida os valores. Ele está disponível a partir do agente Java do APM versão 1.16.

Pré-requisitos:

JDK disponível no PATH ou defina a variável de ambiente JAVA_HOME.

Localização:

O utilitário ACMLValidate está localizado no diretório oracle-apm-agent/bin.

Execute ACMLValidate:

Para chamar ACMLValidate, use o seguinte:
  • Para Windows: ACMLValidate.bat

  • Para Linux: ACMLValidate.sh

Sintaxe:
ACMLValidate.[bat|sh] <path to the acml file>
Exemplo 1:
oracle-apm-agent/bin % sh ACMLvalidate.sh  ../config/1.16.0.560/ProbeConfig.acml
A saída é semelhante à seguinte:
===============================================================================
Testing file: ../config/1.16.0.560/ProbeConfig.acml
ACML Validation Result: PASSED
===============================================================================
Exemplo 2:
oracle-apm-agent/bin % sh ACMLvalidate.sh ../config/1.16.0.560/ProbeConfig.acml  
A saída é semelhante à seguinte:
===========================================================================
Testing file: ../config/1.16.0.560/ProbeConfig.acml
ACML Validation Result: FAILED
Exception: Failed to parse line [5][  SERVLET: true]
Caused by: Tab detected in the following line.  Please replace '\t' with spaces: [  \tSERVLET: true]
===========================================================================