Coletar Métricas

O agente Java do APM suporta a coleta de métricas de servidor de aplicativos periodicamente.

Depois que o agente Java do APM for implantado, você poderá coletar os seguintes tipos de métricas:

Métricas Padrão

Métricas padrão são métricas definidas pelo sistema disponíveis por padrão.

Para obter um conjunto completo de métricas padrão, consulte Métricas Disponíveis: oracle_apm_monitoring para Agente Java do APM.

Métricas Personalizadas

Métricas personalizadas são métricas definidas pelo usuário que podem ser criadas além das métricas padrão existentes para atender a requisitos específicos.

Para definir uma métrica personalizada, crie um novo arquivo de configuração chamado MetricCollection.acml no diretório oracle-apm-agent/config/<version>.

O arquivo MetricCollection.acml é um arquivo personalizado no formato ACML (subconjunto de YAML) para configuração de coleta de métrica personalizada.

Tag ACML Tipos de Dados Descrição
<nome do grupo>: string Grupo para separar métricas com diferente start_time de coleta e intervalo.
<nome da métrica>: string Nome da métrica a ser coletada. Um nome de métrica corresponde a apenas um valor. A convenção de nomenclatura é uma string entre letras minúsculas separada por traço.
tipo: string Tipo de métrica. Pode ser medida ou delta.

- medida: valor de runtime atual.

- delta: valor diferente entre o intervalo de coleta.

escalar: string Tipo de valor numérico: Pode ser longo ou duplo.
origem:   Tag que representa o array de entradas de origem da métrica. Cada métrica pode conter uma ou mais entradas de origem. Mesmo que haja mais de uma entrada de origem, cada entrada será verificada na coleta em ordem. Sempre que a entrada puder retornar um valor válido, ela será usada para a entrada de métrica, e o restante das entradas de origem será ignorado.
-   Elemento de array de entrada de origem da métrica.
tipo: string Tipo de origem da métrica. Pode mbean ou mbeans.

Para a configuração valuePath, ela pode mbean ou mbeans.

Para a configuração operationName, ela só pode ser mbean.

mbean_name: string Nome do objeto MBean para o tipo mbean ou mbeans. Para o tipo mbeans, o nome do objeto pode ter o caractere curinga ( * ), mas o caractere curinga não é suportado para mbean.
value_path: string O caminho é separado por uma barra ( / ) para obter o valor do mbean. O caminho do valor deve levar a um valor numérico. Além do caminho raiz que deve ser o nome do atributo do objeto mbean, o caminho dividido pode ser um dos seguintes do valor do caminho anterior:
  • Nome do campo do objeto.
  • Nome do método do objeto que não usa parâmetro.
  • Chave de CompositeData.
  • Chave de TubularData.
  • Índice de array.
  • Chave do Mapa.
  • Índice de Coleta.

Para o tipo de mbeans, o valor de cada objeto mbean é agregado. Da mesma forma, se o caractere curinga ( * ) for usado no caminho para o tipo mbeans, todos os valores recuperados serão agregados.

operation_name string Nome do método de mbean a ser chamado. Observe que o MBean deve ser registrado no Servidor MBean da Plataforma.
parâmetros (Opcional) string Valores dos parâmetros do método separados por vírgulas.

Os parâmetros do método informados e seus valores correspondentes serão capturados como dimensões de métrica. Atualmente, somente o tipo de dados String é suportado para parâmetros de método.

As métricas personalizadas podem ser definidas de duas maneiras usando o atributo value_path ou operationName.
  • Atributo value_path: Permite que a métrica seja extraída do mbean registrado
  • Atributo operationName: Permite que o usuário registre qualquer classe personalizada no servidor mbean e chame o método mbean, especificado pelo operationName.

Exemplo usando o atributo value_path:

MyMetrics:
    jvm-used-heap:
        type: measurement
        scalar: long
        source:
          -
            type: mbean
            mbean_name: java.lang:type=Memory
            value_path: HeapMemoryUsage/used
    jvm-used-heap-after-old-gc:
        type: measurement
        scalar: long
        source:
          -
            type: mbeans
            mbean_name: java.lang:type=GarbageCollector,name=*Old*
            value_path: LastGcInfo/memoryUsageAfterGc/*/value/used
          -
            type: mbeans
            mbean_name: java.lang:type=GarbageCollector,name=*MarkSweep*
            value_path: LastGcInfo/memoryUsageAfterGc/*/value/used

No exemplo acima, as métricas são coletadas no início de cada minuto. Há duas métricas a serem coletadas: jvm-heap-used e jvm-used-heap-after-old-gc.

Para jvm-heap-used, há apenas 1 origem que é mbean. O nome do objeto mbean é java.lang:type=Memory. Este objeto mbean tem um atributo HeapMemoryUsage que tem o tipo de dados CompositeDataSupport. Não é numérico e não pode ser usado como métrica. No entanto, ele representa um mapa de métricas que pode ser recuperado do heap usado; portanto, é necessário o drill-down até o objeto com a chave de mapa usada.

Para jvm-used-heap-after-old-gc, ele tem 2 origens: mbeans, ambas estão no plural com um 's'. A métrica é coletada na ordem por definição e a primeira origem que retorna uma métrica válida é usada. O motivo de ter 2 origens é porque diferentes versões java têm nomes de coletores de lixo distintos. O drill-down value_path também usou um caractere curinga curinga e toda memória usada após os valores gc de todos os espaços de memória são somados como um único valor de métrica. O drill-down dos dados do caminho do valor é LastGcInfo/memoryUsageAfterGc/*/value/used que se refere a: LastGcInfo(CompositeData)/memoryUsageAfterGc(TabularData)/<index>(CompositeData)/value(MemoryUsage)/used(Long).

Exemplo usando o atributo operationName:

MyMetrics:
    CacheStatistics:
       type: measurement
       scalar: double
       skippable: false
       source:
        - type: mbean
          mbean_name:com.cache:type=CacheServiceMXBean
          operation_name: cacheStatistics
          params: SessionCache,JohnDoe
    DatabaseQueryTime:
       type: measurement
       scalar: long
       skippable: false    
       source:
        - type: mbean
          mbean_name: com.db:type=DbManagerMXBean
          operation_name: dbQueryTime

No exemplo acima, as métricas são coletadas no início de cada minuto. Há duas métricas a serem coletadas: CacheStatistics e DatabaseQueryTime. A origem desta configuração de mbean só pode ser mbean.

Para CacheStatistics, o nome do objeto mbean é com.cache:type=CacheServiceMXBean. O método a ser chamado é cacheStatistics. A operação recupera estatísticas de cache para o nome de cache especificado, filtradas por seu usuário específico. SessionCache e JohnDoe são os valores de parâmetro para CacheName e UserName, respectivamente. O usuário pode construir um mapa de atributos úteis, como AssociatedCacheName, CacheHits, CacheMisses, InMemoryHits, OnDiskHits, como dimensões e retorná-lo como parte dos tipos de retorno suportados, conforme descrito a seguir, juntamente com seus valores correspondentes.

Para DatabaseQueryTime, o nome do objeto mbean é com.db:type=DbManagerMXBean. O método a ser chamado é dbQueryTime. Nenhum parâmetro foi configurado para este mbean.

Os tipos de retorno de método suportados são:
  • Mapa<Mapa<String, Objeto>, Long>
  • Mapa<Mapa<String, Objeto>, Duplo>
  • Long
  • Duplo