Monitorando com a API de Estatísticas

A API de Estatísticas é a interface direta para a árvore de estatísticas interna. As estatísticas são desativadas por padrão, mas podem ser ativadas configurando uma interface StatsSpec. Uma interface StatsSpec define como o WebSphere eXtreme Scale deve monitorar estatísticas.

Sobre Esta Tarefa

É possível usar a API StatsAccessor local para consultar dados e acessar estatísticas em qualquer instância do ObjectGrid que esteja no mesmo Java Virtual Machine (JVM) que o código de execução. Para obter mais informações sobre as interfaces específicas, consulte a documentação da API. Conclua as seguintes etapas para ativar o monitoramento da árvore de estatísticas internas.

Procedimento

  1. Recupere o objeto StatsAccessor. A interface StatsAccessor segue o padrão do singleton. Assim, além dos problemas relacionados ao carregador de classes, uma instância do StatsAccessor deverá existir para cada JVM. Esta classe atua como a interface principal para todas as operações locais de estatísticas. O seguinte código é um exemplo de como recuperar a classe do acessador. Chame essa operação antes de qualquer outra chamada ObjectGrid.
    public class LocalClient {
    
       public static void main(String[] args) {
    
          // retrieve a handle to the StatsAccessor
          StatsAccessor accessor = StatsAccessorFactory.getStatsAccessor();
    
       }
    
    }
  2. Configure a interface StatsSpec da grade de dados. Configure esse JVM para coletar todas as estatísticas apenas no nível do ObjectGrid. É necessário garantir que um aplicativo ative todas as estatísticas que podem ser necessárias antes de iniciar quaisquer transações. O exemplo a seguir configura a interface StatsSpec utilizando um campo constante estático e utilizando uma spec String. Usar um campo de constante estático é mais simples porque o campo já definiu a especificação. Entretanto, ao utilizar uma spec String, é possível ativar qualquer combinação de estatísticas que são necessárias.
    public static void main(String[] args) {
    
          // retrieve a handle to the StatsAccessor
          StatsAccessor accessor = StatsAccessorFactory.getStatsAccessor();
    
          // Set the spec via the static field
          StatsSpec spec = new StatsSpec(StatsSpec.OG_ALL);
          accessor.setStatsSpec(spec);
    
          // Configurar o spec através do spec String
          StatsSpec spec = new StatsSpec("og.all=enabled");
          accessor.setStatsSpec(spec);
    
    }
  3. Envie as transações para a grade para forçar a coleta dos dados para monitoramento. Para coletar dados úteis para as estatísticas, é necessário enviar as transações para a grade de dados. O seguinte extrato de código insere um registro no MapA, que é um ObjectGridA. Como as estatísticas estão no nível do ObjectGrid, qualquer mapa dentro do ObjectGrid produz os mesmos resultados.
    public static void main(String[] args) {
    
          // retrieve a handle to the StatsAccessor
          StatsAccessor accessor = StatsAccessorFactory.getStatsAccessor();
    
          // Set the spec via the static field
          StatsSpec spec = new StatsSpec(StatsSpec.OG_ALL);
          accessor.setStatsSpec(spec);
    
          ObjectGridManager manager = 
    				ObjectGridmanagerFactory.getObjectGridManager();
          ObjectGrid grid = manager.getObjectGrid("ObjectGridA");
          Session session = grid.getSession();
          Map map = session.getMap("MapA");
    
          // Drive insert
          session.begin();
          map.insert("SomeKey", "SomeValue");
          session.commit();
    }
  4. Consulte um StatsFact utilizando a API do StatsAccessor. Cada caminho de estatísticas é associado com uma interface StatsFact. A interface StatsFact é um marcador genérico que é utilizado para organizar e conter um objeto StatsModule. Antes de poder acessar o módulo de estatísticas real, o objeto StatsFact deve ser recuperado.
    public static void main(String[] args)
    {
    
          // retrieve a handle to the StatsAccessor
          StatsAccessor accessor = StatsAccessorFactory.getStatsAccessor();
    
          // Set the spec via the static field
          StatsSpec spec = new StatsSpec(StatsSpec.OG_ALL);
          accessor.setStatsSpec(spec);
    
          ObjectGridManager manager = 
    				ObjectGridManagerFactory.getObjectGridManager();
          ObjectGrid grid = manager.getObjectGrid("ObjectGridA");
          Session session = grid.getSession();
          Map map = session.getMap("MapA");
    
          // Drive insert
          session.begin();
          map.insert("SomeKey", "SomeValue");
          session.commit();
    
          // Retrieve StatsFact
    
          StatsFact fact = accessor.getStatsFact(new String[] {"EmployeeGrid"}, 
    				StatsModule.MODULE_TYPE_OBJECT_GRID);
    
    }
  5. Interaja com o objeto StatsModule. O objeto StatsModule está contido na interface StatsFact. É possível obter uma referência para o módulo utilizando a interface StatsFact. Como a interface StatsFact é uma interface genérica, é necessário converter o módulo retornado para o tipo StatsModule esperado. Como esta tarefa coleta estatísticas do eXtreme Scale, o objeto StatsModule retornado é convertido para um tipo OGStatsModule. Após o módulo ser convertido, é possível acessar todas as estatísticas disponíveis.
    public static void main(String[] args) {
    
          // retrieve a handle to the StatsAccessor
          StatsAccessor accessor = StatsAccessorFactory.getStatsAccessor();
    
          // Set the spec via the static field
          StatsSpec spec = new StatsSpec(StatsSpec.OG_ALL);
          accessor.setStatsSpec(spec);
    
          ObjectGridManager manager = 
    				ObjectGridmanagerFactory.getObjectGridManager();
          ObjectGrid grid = manager.getObjectGrid("ObjectGridA");
          Session session = grid.getSession();
          Map map = session.getMap("MapA");
    
          // Drive insert
          session.begin();
          map.insert("SomeKey", "SomeValue");
          session.commit();
    
          // Retrieve StatsFact
          StatsFact fact = accessor.getStatsFact(new String[] {"EmployeeGrid"}, 
    				StatsModule.MODULE_TYPE_OBJECT_GRID);
    
          // Retrieve module and time
          OGStatsModule module = (OGStatsModule)fact.getStatsModule();
          ActiveTimeStatistic timeStat = 
    				module.getTransactionTime("Default", true);
          double time = timeStat.getMeanTime(); 
    
    }