Partilhar via


Registo de logs com o Elastic Stack

Sugestão

Este conteúdo é um excerto do eBook Architecting Cloud Native .NET Applications for Azure, disponível no .NET Docs ou como um PDF transferível gratuito que pode ser lido offline.

miniatura da capa dos aplicativos .NET nativos da nuvem para eBook do Azure.

Existem muitas boas ferramentas de registro centralizado e elas variam em custo, desde ferramentas gratuitas de código aberto até opções mais caras. Em muitos casos, as ferramentas gratuitas são tão boas ou melhores do que as ofertas pagas. Uma dessas ferramentas é uma combinação de três componentes de código aberto: Elasticsearch, Logstash e Kibana.

Coletivamente, essas ferramentas são conhecidas como Elastic Stack ou ELK stack.

Pilha elástica

O Elastic Stack é uma opção poderosa para coletar informações de um cluster do Kubernetes. O Kubernetes suporta o envio de logs para um endpoint do Elasticsearch e, na maioria das vezes, tudo o que você precisa para começar é definir as variáveis de ambiente, conforme mostrado na Figura 7-5:

KUBE_LOGGING_DESTINATION=elasticsearch
KUBE_ENABLE_NODE_LOGGING=true

Figura 7-5. Variáveis de configuração para Kubernetes

Esta etapa instalará o Elasticsearch no cluster e direcionará todos os logs do cluster para ele.

Um exemplo de um painel do Kibana mostrando os resultados de uma consulta em logs ingeridos do Kubernetes Figura 7-6. Um exemplo de um painel do Kibana mostrando os resultados de uma consulta em logs que são ingeridos do Kubernetes

Para obter mais informações sobre configuração, consulte Configurar registro em log (Kibana).

Quais são as vantagens do Elastic Stack?

O Elastic Stack fornece registro centralizado de baixo custo, escalável e amigável à nuvem. A sua interface de utilizador simplifica a análise de dados para que possa dedicar o seu tempo a extraí-los insights dos seus dados, em vez de batalhar contra uma interface complicada. Ele suporta uma ampla variedade de entradas, portanto, à medida que seu aplicativo distribuído abrange mais e diferentes tipos de serviços, você pode esperar continuar a ser capaz de alimentar dados de log e métricas no sistema. O Elastic Stack também suporta pesquisas rápidas, mesmo em grandes conjuntos de dados, tornando possível, mesmo para aplicativos grandes, registrar dados detalhados e ainda ser capaz de ter visibilidade sobre eles de forma eficiente.

Logstash

O primeiro componente é o Logstash. Esta ferramenta é usada para reunir informações de log de uma grande variedade de fontes diferentes. Por exemplo, o Logstash pode ler logs do disco e também receber mensagens de bibliotecas de registro como o Serilog. O Logstash pode realizar filtragem básica e expansão dos logs à medida que eles chegam. Por exemplo, se seus logs contiverem endereços IP, o Logstash pode ser configurado para fazer uma pesquisa geográfica e obter um país/região ou até mesmo uma cidade de origem para essa mensagem.

Serilog é uma biblioteca de log para linguagens .NET, que permite o registro parametrizado. Em vez de gerar uma mensagem de log textual que incorpora campos, os parâmetros são mantidos separados. Esta biblioteca permite uma filtragem e pesquisa mais inteligentes. Um exemplo de configuração Serilog para gravação no Logstash aparece na Figura 7-7.

var log = new LoggerConfiguration()
         .WriteTo.Http("http://localhost:8080")
         .CreateLogger();

Figura 7-7. Configuração do Serilog para gravar informações de log diretamente no logstash através de HTTP

O Logstash usaria uma configuração como a mostrada na Figura 7-8.

input {
    http {
        #default host 0.0.0.0:8080
        codec => json
    }
}

output {
    elasticsearch {
        hosts => "elasticsearch:9200"
        index=>"sales-%{+xxxx.ww}"
    }
}

Figura 7-8. Uma configuração do Logstash para consumir logs do Serilog

Para cenários em que a manipulação extensiva de logs não é necessária, há uma alternativa ao Logstash conhecida como Beats. Beats é uma família de ferramentas que pode reunir uma grande variedade de dados, desde logs até dados de rede e informações de disponibilidade. Muitos aplicativos usarão Logstash e Beats.

Uma vez que os logs tenham sido reunidos pelo Logstash, ele precisa de algum lugar para colocá-los. Embora o Logstash suporte muitas saídas diferentes, uma das mais interessantes é o Elasticsearch.

Pesquisa elástica

O Elasticsearch é um poderoso mecanismo de pesquisa que pode indexar logs à medida que eles chegam. Ele torna rápida a execução de consultas nos logs. O Elasticsearch pode lidar com grandes quantidades de logs e, em casos extremos, pode ser expandido em muitos nós.

As mensagens de log que foram criadas para conter parâmetros ou que tiveram parâmetros divididos deles por meio do processamento do Logstash podem ser consultadas diretamente à medida que o Elasticsearch preserva essas informações.

Uma consulta que pesquisa as 10 principais páginas visitadas pelo jill@example.com, aparece na Figura 7-9.

"query": {
    "match": {
      "user": "jill@example.com"
    }
  },
  "aggregations": {
    "top_10_pages": {
      "terms": {
        "field": "page",
        "size": 10
      }
    }
  }

Figura 7-9. Uma consulta do Elasticsearch para encontrar as 10 principais páginas visitadas por um usuário

Visualizando informações com painéis da web do Kibana

Componente final da pilha é Kibana. Esta ferramenta é usada para fornecer visualizações interativas em um painel da web. Os painéis podem ser criados até mesmo por usuários que não são técnicos. A maioria dos dados residentes no índice Elasticsearch pode ser incluída nos painéis do Kibana. Os usuários individuais podem ter diferentes desejos de painel e o Kibana permite essa personalização permitindo painéis específicos do usuário.

Instalando o Elastic Stack no Azure

A Elastic Stack pode ser instalada no Azure de várias maneiras. Como sempre, é possível provisionar máquinas virtuais e instalar o Elastic Stack nelas diretamente. Esta opção é preferida por alguns usuários experientes, pois oferece o mais alto grau de personalização. A implantação na infraestrutura como serviço introduz uma sobrecarga de gerenciamento significativa, forçando aqueles que seguem esse caminho a se apropriarem de todas as tarefas associadas à infraestrutura como um serviço, como proteger as máquinas e mantê-up-toatualizadas com patches.

Uma opção com menos sobrecarga é usar um dos muitos contêineres do Docker nos quais o Elastic Stack já foi configurado. Esses contêineres podem ser inseridos em um cluster Kubernetes existente e executados junto com o código da aplicação. O contêiner sebp/elk é um contêiner Elastic Stack bem documentado e testado.

Outra opção é uma oferta ELK-as-a-service recentemente anunciada.

Referências