Como usar o OpenTSDB para monitorar dados de série temporal

Neste tutorial, descrevemos como coletar, registrar e monitorar dados de série temporal no Google Cloud Platform (GCP) usando o OpenTSDB em execução no Google Kubernetes Engine (GKE) e no Cloud Bigtable.

Os dados de série temporal são um recurso altamente valioso que pode ser usado para vários aplicativos, incluindo tendências, monitoramento e machine learning. É possível gerar esses dados da infraestrutura do servidor, do código do aplicativo e de outras fontes. O OpenTSDB coleta e retém grandes quantidades de dados de série temporal com um alto grau de granularidade.

Neste tutorial, detalhamos como criar uma camada de coleção de dados escalonável usando o GKE e trabalhar com os dados coletados usando o Cloud Bigtable. No diagrama a seguir, está ilustrada a arquitetura geral da solução:

Diagrama de arquitetura de alto nível da solução deste tutorial para usar o TSDB no GCP.

Objetivos

  • Criar uma instância do Cloud Bigtable.
  • Criar um cluster no GKE.
  • Implantar o OpenTSDB no cluster do GKE.
  • Enviar métricas de série temporal para o OpenTSDB.
  • Visualizar métricas usando o OpenTSDB e o Grafana.

Custos

Neste tutorial, usamos componentes faturáveis do GCP, inclusive estes:

  • Compute Engine
  • GKE
  • Cloud Bigtable
  • Cloud Storage

Use a Calculadora de preços para gerar uma estimativa de custo com base no uso previsto.

Novos usuários do GCP podem se qualificar para uma avaliação gratuita.

Antes de começar

  1. Faça login na sua Conta do Google.

    Se você ainda não tiver uma, inscreva-se.

  2. Selecione ou crie um projeto do Google Cloud Platform.

    Acessar a página Gerenciar recursos

  3. Verifique se o faturamento foi ativado no projeto do Google Cloud Platform.

    Saiba como ativar o faturamento

  4. Ativar Cloud Bigtable, Cloud Bigtable Admin, Compute Engine, and Google Kubernetes Engine APIs.

    Ativar as APIs

Anote o código do projeto para usar em uma etapa posterior.

Preparar o ambiente

Neste tutorial, você usará o Cloud Shell para inserir comandos. O Cloud Shell dá acesso à linha de comando no Console do GCP e inclui o SDK do Cloud, além de outras ferramentas necessárias para o desenvolvimento no GCP. O Cloud Shell é exibido como uma janela na parte inferior do Console do GCP. A inicialização leva alguns minutos, mas a janela é exibida imediatamente.

  1. Ative o Cloud Shell.

    ATIVAR o Cloud Shell

  2. Defina a zona padrão do Compute Engine como a zona em que o cluster do Cloud Bigtable será criado, por exemplo, us-central1-f.

    gcloud config set compute/zone us-central1-f
    
  3. Clone o repositório git que contém o código de exemplo.

    git clone https://github.com/GoogleCloudPlatform/opentsdb-bigtable.git
    
  4. Navegue até o diretório do código de amostra.

    cd opentsdb-bigtable
    

Criar uma instância do Cloud Bigtable

Neste tutorial, usamos o Cloud Bigtable para armazenar os dados da série temporal coletados. Para que isso funcione, crie uma instância do Cloud Bigtable.

O Cloud Bigtable é um armazenamento de colunas largas/chaves que funciona especialmente para dados de série temporal, conforme explicado no Projeto de esquema do Cloud Bigtable para dados de série temporal. Compatível com a API HBase, ele facilita o uso de softwares projetados para trabalhar com o Apache HBase, como o OpenTSDB. Para conhecer o esquema HBase usado pelo OpenTSDB, veja a documentação do OpenTSDB (em inglês).

O principal componente do OpenTSDB é o cliente AsyncHBase, que permite gravar em massa para HBase de maneira totalmente assíncrona, sem bloqueios e thread-safe. Quando você usa o OpenTSDB com Cloud Bigtable, o AsyncHBase é implementado como o cliente AsyncBigtable.

Uma característica fundamental do Cloud Bigtable é a capacidade de executar com facilidade o escalonamento, a fim de atender às suas necessidades. Neste tutorial, um cluster de desenvolvimento de nó único é usado porque é suficiente para a tarefa, além de ser econômico. Inicie seus projetos em um cluster de desenvolvimento e mude para um cluster de produção maior quando estiver pronto para trabalhar com dados de produção. A documentação do Cloud Bigtable inclui uma discussão detalhada sobre desempenho e dimensionamento para ajudar você a escolher um tamanho de cluster para o trabalho.

Siga estas etapas para criar sua instância do Cloud Bigtable:

  1. Acesse a página Criar instância no Console do GCP.

    ACESSAR A PÁGINA "CRIAR INSTÂNCIA"

  2. Digite um nome para sua instância na caixa Nome da instância. Use OpenTSDB instance ou outro nome de sua preferência. O Código da instância e o Código do cluster são definidos automaticamente pela página após inserir o nome da instância.

  3. Configure Tipo de Instância como Desenvolvimento.

  4. Em Zona, selecione us-central1-f ou a zona em que você vai executar o OpenTSDB.

  5. Clique em Criar para criar a instância.

Anote os valores do Código da instância e Zona. Eles serão usados em uma etapa posterior.

Criar um cluster do GKE

O GKE contém um ambiente gerenciado do Kubernetes. Depois de criar um cluster do GKE, é possível implantar os pods do Kubernetes nele. Neste tutorial, usamos o GKE e os pods do Kubernetes para executar o OpenTSDB.

O armazenamento do OpenTSDB fica separado da camada de aplicação, o que permite a implantação simultânea em diversas instâncias. Durante a execução em paralelo, uma grande quantidade de dados de série temporal é processada pelo OpenTSDB. O empacotamento dele em um contêiner do Docker facilita a implantação em escala usando o GKE.

Execute o comando abaixo para criar um cluster do Kubernetes. Esta operação leva alguns minutos para ser concluída:

gcloud container clusters create opentsdb-cluster --scopes \
"https://www.googleapis.com/auth/bigtable.admin",\
"https://www.googleapis.com/auth/bigtable.data"

A adição de ambos os escopos extras ao cluster do GKE permite a interação entre o contêiner do OpenTSDB e o Cloud Bigtable. É possível receber imagens do Google Container Registry sem adicionar um escopo para o Cloud Storage, já que o cluster lê do Cloud Storage por padrão. Escopos adicionais podem ser necessários em outras implantações.

No restante deste tutorial, usamos um contêiner predefinido, gcr.io/cloud-solutions-images/opentsdb-bigtable:v1, localizado no Container Registry. Os scripts Dockerfile e ENTRYPOINT usados para criar o contêiner estão localizados na pasta build do repositório do tutorial.

Criar um ConfigMap com detalhes de configuração

O Kubernetes inclui um mecanismo chamado ConfigMap para separar os detalhes da configuração da imagem do contêiner, o que torna os aplicativos mais portáteis. A configuração para OpenTSDB é especificada em opentsdb.conf. Um ConfigMap que contém opentsdb.conf está incluído no código de amostra. É preciso editá-lo para refletir os detalhes da sua instância.

Criar o ConfigMap

Edite a configuração do OpenTSDB para usar o nome do projeto, o identificador da instância e a zona utilizada na criação da instância.

  1. Para abrir o editor de código integrado ao Cloud Shell, clique no ícone de lápis na barra de ferramentas, na parte superior da janela do Cloud Shell.

  2. Selecione opentsdb-config.yaml em opentsdb/configmaps para abri-lo no editor.

  3. Substitua o texto do marcador pelo nome do projeto, identificador de instância e zona definidos anteriormente no tutorial.

  4. No prompt do Cloud Shell, crie um ConfigMap a partir do opentsdb-config.yaml atualizado:

    kubectl create -f configmaps/opentsdb-config.yaml
    

Como criar tabelas OpenTSDB no Cloud Bigtable

Antes de ler ou gravar dados com o OpenTSDB, é preciso criar as tabelas necessárias no Cloud Bigtable para armazenar esses dados. Siga estas etapas para criar um job do Kubernetes que crie essas tabelas.

  1. Inicie o job:

    kubectl create -f jobs/opentsdb-init.yaml
    
  2. Este job leva até um minuto ou mais para ser concluído. Para verificar se ele foi concluído com sucesso, execute este comando periodicamente:

    kubectl describe jobs
    

    A saída indica que um job foi concluído no cabeçalho Pods Statuses.

  3. Receba os registros dos jobs de criação da tabela executando os seguintes comandos:

    pods=$(kubectl get pods  --show-all --selector=job-name=opentsdb-init \
    --output=jsonpath={.items..metadata.name})
    
    kubectl logs $pods
    

Ao receber os registros, examine a parte inferior da saída, que indica cada tabela criada. Este job executa diversos comandos de criação de tabela, cada um deles com o formulário create 'TABLE_NAME'. Procure uma linha do formulário 0 row(s) in 0.0000 seconds, em que a duração real do comando esteja listada em vez de 0.0000.

Sua saída precisa incluir uma seção com aparência semelhante a esta:

create 'tsdb-uid',
  {NAME => 'id', COMPRESSION => 'NONE', BLOOMFILTER => 'ROW'},
  {NAME => 'name', COMPRESSION => 'NONE', BLOOMFILTER => 'ROW'}
0 row(s) in 1.3680 seconds

Hbase::Table - tsdb-uid

create 'tsdb',
  {NAME => 't', VERSIONS => 1, COMPRESSION => 'NONE', BLOOMFILTER => 'ROW'}
0 row(s) in 0.6570 seconds

Hbase::Table - tsdb

create 'tsdb-tree',
  {NAME => 't', VERSIONS => 1, COMPRESSION => 'NONE', BLOOMFILTER => 'ROW'}
0 row(s) in 0.2670 seconds

Hbase::Table - tsdb-tree

create 'tsdb-meta',
  {NAME => 'name', COMPRESSION => 'NONE', BLOOMFILTER => 'ROW'}
0 row(s) in 0.5850 seconds

Hbase::Table - tsdb-meta

Basta executar esse job uma vez. Ele retorna uma mensagem de erro caso já existam as tabelas. Continue o tutorial usando as tabelas atuais, se houver.

Modelo de dados

As tabelas que você criou armazenarão pontos de dados do OpenTSDB. Em uma etapa posterior, grave os dados de série temporal nessas tabelas. Os pontos de dados de série temporal são organizados e armazenados da seguinte forma:

Campo Obrigatório Descrição Exemplo
metric Obrigatório Item a ser avaliado - a chave padrão sys.cpu.user
timestamp Obrigatório Tempo de época da avaliação 1497561091
value Obrigatório Valor de avaliação 89,3
Tags Adicione pelo menos uma tag Qualifica a avaliação para fins de consulta

hostname=www

cpu=0

env=prod

Como implantar o OpenTSDB

No restante deste tutorial, você recebe instruções para fazer com que o cenário de amostra funcione. O diagrama a seguir mostra a arquitetura a ser utilizada:

Diagrama da arquitetura usada neste tutorial para gravar, ler e visualizar dados de série temporal.

Este tutorial usa duas implantações do Kubernetes. Uma envia métricas para o OpenTSDB e a outra lê a partir dela. O uso de duas implantações evita que as leituras e gravações longas bloqueiem uma à outra. O mesmo contêiner é usado pelos pods em cada implantação. O OpenTSDB contém um daemon, denominado tsd, que é executado em cada contêiner.

Um único processo tsd processa uma grande capacidade de eventos a cada segundo. Para distribuir a carga, cada implantação neste tutorial cria 3 réplicas de pods de leitura e gravação.

Criar uma implantação para métricas de gravação

As informações de configuração para implantar o gravador estão em opentsdb-write.yaml na pasta deployments do repositório do tutorial. Use o comando abaixo para criá-lo:

kubectl create -f deployments/opentsdb-write.yaml

Criar uma implantação para métricas de leitura

As informações de configuração para implantar o leitor estão em opentsdb-read.yaml na pasta deployments do repositório do tutorial. Use o comando abaixo para criá-lo:

kubectl create -f deployments/opentsdb-read.yaml

Na implantação de produção, é possível aumentar o número de pods tsd em execução manualmente ou usando o dimensionamento automático no Kubernetes. Da mesma forma, é possível aumentar o número de instâncias no cluster do GKE manualmente ou usando o Autodimensionador de cluster.

Criar serviços do OpenTSDB

Para fornecer conectividade de rede consistente às implantações, crie dois serviços do Kubernetes. Um serviço grava métricas no OpenTSDB e o outro faz a leitura delas.

Criar o serviço para gravar métricas

As informações de configuração para o serviço de gravação de métricas estão contidas em opentsdb-write.yaml na pasta services do repositório do tutorial. Use o comando a seguir para criar o serviço:

kubectl create -f services/opentsdb-write.yaml

Esse serviço é criado no cluster do GKE e está acessível a outros serviços em execução no cluster. Na próxima seção, você gravará métricas neste serviço.

Criar o serviço para ler métricas

As informações de configuração para o serviço de leitura de métricas estão contidas em opentsdb-read.yaml na pasta services do repositório do tutorial. Use o comando a seguir para criar o serviço:

kubectl create -f services/opentsdb-read.yaml

Como gravar dados de série temporal no OpenTSDB

Há diversos mecanismos para gravar dados no OpenTSDB. Após definir os pontos de extremidade do serviço, direcione os processos para começar a gravar dados neles. Este tutorial usa o Heapster para mostrar os dados de gravação. Na implantação do Heapster, dados sobre o GKE são coletados, e métricas do cluster do GKE em que você estiver executando o OpenTSDB são publicadas.

Use o comando a seguir para implantar o Heapster no cluster:

kubectl create -f deployments/heapster.yaml

Como examinar dados de série temporal com o OpenTSDB

Consulte as métricas de série temporal usando o ponto de extremidade do serviço opentsdb-read implantado anteriormente no tutorial. É possível usar os dados de diversas maneiras. Uma opção comum é visualizar. O OpenTSDB inclui uma interface básica para visualizar as métricas coletadas. Neste tutorial, você aprende a usar o Grafana, uma alternativa conhecida para visualização de métricas que inclui funcionalidades adicionais.

Configurar o Grafana

A execução do Grafana no cluster requer um processo semelhante ao usado para configurar o OpenTSDB. Além de criar um ConfigMap e uma implantação, você precisa configurar o encaminhamento de portas para poder acessar o Grafana enquanto ele estiver em execução no seu cluster do GKE.

Use as etapas abaixo para configurar o Grafana:

  1. Crie o ConfigMap do Grafana usando as informações de configuração no grafana.yaml na pasta configmaps do repositório do tutorial.

    kubectl create -f configmaps/grafana.yaml
    
  2. Crie a implantação do Grafana com as informações de configuração no grafana.yaml na pasta deployments do repositório do tutorial.

    kubectl create -f deployments/grafana.yaml
    
  3. Receba o nome do pod do Grafana no cluster e use-o para configurar o encaminhamento da porta.

    grafana=$(kubectl get pods --show-all --selector=app=grafana \
      --output=jsonpath={.items..metadata.name})
    
    kubectl port-forward $grafana 8080:3000
    
  4. Verifique se o encaminhamento foi bem-sucedido. A saída deve corresponder ao seguinte:

    Forwarding from 127.0.0.1:8080 -> 3000
    Forwarding from [::1]:8080 -> 3000
    

Conectar-se à interface da Web do Grafana

No Cloud Shell, clique em Visualizar na Web e selecione Visualizar na porta 8080.

Uma nova guia do navegador é aberta e conectada à interface da Web do Grafana. Depois de alguns instantes, o navegador exibe gráficos semelhantes a este:

Exemplo de visualização Grafana

Esta implantação do Grafana foi personalizada para este tutorial. Os arquivos configmaps/grafana.yaml e deployments/grafana.yaml configuram o Grafana para que ele se conecte ao serviço opentsdb-read, permitem autenticação anônima e exibem algumas métricas básicas do cluster. Com a implantação do Grafana na produção, são implementados mecanismos de autenticação apropriados e são utilizados gráficos de série temporal mais avançados.

Como fazer limpeza

Para evitar que os recursos usados neste tutorial sejam cobrados na conta do Google Cloud Platform:

  1. Exclua o cluster do GKE para encerrar todos os artefatos previamente criados com o comando kubectl create:

    gcloud container clusters delete opentsdb-cluster

    Para excluir o cluster do GKE, confirme digitando Y ou pressionando Enter.

  2. Para excluir o cluster do Cloud Bigtable, clique em Produtos e serviços no Console do Google Cloud Platform. Clique em Bigtable, selecione o cluster criado anteriormente e clique em Excluir.

Próximas etapas

  • Para saber como melhorar o desempenho de utilização do OpenTSDB, consulte o Design do esquema do Cloud Bigtable para dados de série temporal.

  • No vídeo Bigtable in action (em inglês), do Google Cloud Next 17, é feita a descrição da promoção de campo e a apresentação de outras considerações de desempenho.

  • Na documentação de escopos do cluster para clusters do GKE, descrevemos os escopos padrão, como o Cloud Storage, e os que podem ser adicionados para outros serviços do Google.

  • Teste outros recursos do Google Cloud Platform. Veja nossos tutoriais.

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…