Tutorial: Introdução ao monitoramento e registro em log usando o Logz.io para aplicativos Java em execução no Azure

Este tutorial mostra como configurar uma aplicação Java clássica para enviar registos para o serviço Logz.io para ingestão e análise. O Logz.io oferece uma solução de monitorização completa baseada em Elasticsearch/Logstash/Kibana (ELK) e Grafana.

O tutorial parte do princípio de que está a utilizar o Log4J ou o Logback. Estas são as duas bibliotecas mais utilizadas para criar registos em Java, pelo que o tutorial deve funcionar para a maioria das aplicações executadas no Azure. Se já estiver a utilizar o Elastic Stack para monitorizar a sua aplicação Java, o tutorial mostra como reconfigurar para que o destino seja o ponto final do Logz.io.

Neste tutorial, irá aprender a:

  • Enviar registos de uma aplicação Java já existente para o Logz.io.
  • Enviar registos de diagnóstico e métricas de serviços do Azure para o Logz.io.

Pré-requisitos

Enviar registos da aplicação Java para o Logz.io

Primeiro, aprenderá a configurar a sua aplicação Java com um token que lhe dá acesso à sua conta Logz.io.

Obter o token de acesso Logz.io

Para obter o seu token, inicie sessão na sua conta Logz.io, selecione o ícone de engrenagem no canto inferior esquerdo e, em seguida, selecione Definições Gerir tokens e selecione o separador Tokens de envio de dados. Copie o token de acesso padrão exibido, bem como a URL do ouvinte para que você possa usá-los mais > tarde.

Instalar e configurar a biblioteca do Logz.io para Log4J ou Logback

A biblioteca de Java do Logz.io está disponível no Maven Central, pelo que a pode adicionar como dependência à configuração da aplicação. Verifique o número da versão no Maven Central e utilize a versão mais recente nas seguintes definições de configuração.

Se estiver a utilizar o Maven, adicione a seguinte dependência ao ficheiro pom.xml:

Log4J:

<dependency>
    <groupId>io.logz.log4j2</groupId>
    <artifactId>logzio-log4j2-appender</artifactId>
    <version>2.0.0</version>
</dependency>

Logback:

<dependency>
    <groupId>io.logz.logback</groupId>
    <artifactId>logzio-logback-appender</artifactId>
    <version>2.0.0</version>
</dependency>

Se estiver a utilizar o Gradle, adicione a seguinte dependência ao script de compilação:

Log4J:

implementation 'io.logz.log4j:logzio-log4j-appender:2.0.0'

Logback:

implementation 'io.logz.logback:logzio-logback-appender:2.0.0'

Em seguida, atualize o ficheiro de configuração do Log4J ou do Logback:

Log4J:

<Appenders>
    <LogzioAppender name="Logzio">
        <logzioToken><your-logz-io-token></logzioToken>
        <logzioType>java</logzioType>
        <logzioUrl>https://<your-logz-io-listener-host>:8071</logzioUrl>
    </LogzioAppender>
</Appenders>

<Loggers>
    <Root level="info">
        <AppenderRef ref="Logzio"/>
    </Root>
</Loggers>

Logback:

<configuration>
    <!-- Use shutdownHook so that we can close gracefully and finish the log drain -->
    <shutdownHook class="ch.qos.logback.core.hook.DelayingShutdownHook"/>
    <appender name="LogzioLogbackAppender" class="io.logz.logback.LogzioLogbackAppender">
        <token><your-logz-io-token></token>
        <logzioUrl>https://<your-logz-io-listener-host>:8071</logzioUrl>
        <logzioType>java</logzioType>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
    </appender>

    <root level="debug">
        <appender-ref ref="LogzioLogbackAppender"/>
    </root>
</configuration>

Substitua o marcador de posição <your-logz-io-token> pelo token de acesso e o marcador de posição <your-logz-io-listener-host> pelo anfitrião do serviço de escuta da sua região (por exemplo, listener.logz.io). Para obter mais informações sobre como determinar a região da sua conta, veja Região da conta.

O elemento logzioType refere-se a um campo lógico em Elasticsearch que é utilizado para separar diferentes documentos uns dos outros. É essencial configurar este parâmetro corretamente para tirar o máximo partido do Logz.io.

Um Logz.io "Tipo" é o seu formato de log (por exemplo: Apache, NGinx, MySQL) e não a sua fonte (por exemplo: server1, server2, server3). Neste tutorial, vamos chamar o tipo java porque estamos a configurar aplicações Java e esperamos que estas tenham todos o mesmo formato.

Para uma utilização avançada, pode agrupar as suas aplicações Java em diferentes tipos, que têm o seu próprio formato de registo específico (configurável com Log4J e Logback). Por exemplo, pode ter um tipo "spring-boot-monolith" e um tipo "spring-boot-microservice".

Testar a configuração e a análise de registos no Logz.io

Depois de configurada a biblioteca do Logz.io, a sua aplicação deverá estar a enviar registos diretamente para aquela. Para testar se tudo funciona corretamente, vá para o console Logz.io, selecione a guia Logs > Live tail e selecione executar. Deverá ver uma mensagem semelhante à seguinte, que diz que a ligação está a funcionar:

Requesting Live Tail access...
Access granted. Opening connection...
Connected. Tailing...

Em seguida, inicie a aplicação ou utilize-a de modo a que produza alguns registos. Os registos devem aparecer diretamente no ecrã. Por exemplo, aqui estão as primeiras mensagens de arranque de uma aplicação Spring Boot:

2019-09-19 12:54:40.685Z Starting JavaApp on javaapp-default-9-5cfcb8797f-dfp46 with PID 1 (/workspace/BOOT-INF/classes started by cnb in /workspace)
2019-09-19 12:54:40.686Z The following profiles are active: prod
2019-09-19 12:54:42.052Z Bootstrapping Spring Data repositories in DEFAULT mode.
2019-09-19 12:54:42.169Z Finished Spring Data repository scanning in 103ms. Found 6 repository interfaces.
2019-09-19 12:54:43.426Z Bean 'spring.task.execution-org.springframework.boot.autoconfigure.task.TaskExecutionProperties' of type [org.springframework.boot.autoconfigure.task.TaskExecutionProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)

Agora que os seus registos são processados pelo Logz.io, pode beneficiar de todos os serviços da plataforma.

Enviar dados de serviços do Azure para o Logz.io

Em seguida, vai aprender a enviar registos e métricas dos seus recursos do Azure para o Logz.io.

Implementar o modelo

O primeiro passo é implementar o modelo de integração Logz.io - Azure. A integração baseia-se num modelo de implementação do Azure pronto a utilizar que configura todos os blocos de construção necessários do pipeline. O modelo cria um espaço de nome do Hub de Eventos, um Hub de Eventos, dois blobs de armazenamento e todas as permissões e ligações corretas necessárias. Os recursos configurados pela implementação automatizada podem recolher dados de uma região do Azure individual e enviá-los para o Logz.io.

Procure o botão Deploy to Azure (Implementar no Azure), que é apresentado no primeiro passo do ficheiro readme do repositório.

Quando seleciona Deploy to Azure, é mostrada a página Custom Deployment (Implementação Personalizada) no portal do Azure com uma lista de campos pré-preenchidos.

Pode deixar a maioria dos campos como estão, mas introduza as seguintes definições:

  • Grupo de recursos: selecione um grupo existente ou crie um novo.
  • Logzio Logs/Metrics Host: insira a URL do ouvinte Logz.io. Se não souber ao certo qual é o URL, veja o URL do seu início de sessão. Se for app.logz.io, utilize listener.logz.io (que é a predefinição). Se for app-eu.logz.io, utilize listener-eu.logz.io.
  • Logzio Logs/Metrics Token: insira o token da conta Logz.io para a qual você deseja enviar logs ou métricas do Azure. Este token está disponível na página da conta na IU do Logz.io.

Aceite os termos na parte inferior da página e selecione Purchase (Comprar). O Azure implementará então o modelo, o que pode demorar alguns minutos. Acabará por ver a mensagem "Deployment succeeded" ("Implementação bem-sucedida") na parte superior do portal.

Pode visitar o grupo de recursos definido para rever os recursos implementados.

Para saber como configurar logzio-azure-serverless para criar cópias de segurança de dados para o Armazenamento de Blobs do Azure, veja Ship Azure activity logs (Enviar registos de atividade do Azure).

Transmitir registos e métricas do Azure para o Logz.io

Agora que implementou o modelo de integração, tem de configurar o Azure para transmitir os dados de diagnóstico para o Hub de Eventos que acabou de implementar. Quando os dados chegarem ao Hub, a aplicação de funções encaminhá-los-á para o Logz.io.

  1. Na barra de pesquisa, escreva “Diagnostic” (“Diagnóstico”) e selecione Diagnostic settings (Definições de diagnóstico).

  2. Escolha um recurso na lista de recursos e selecione Add diagnostic setting (Adicionar definição de diagnóstico) para abrir o painel Diagnostic settings desse recurso.

    Diagnostics settings panel

  3. Dê um Nome às definições de diagnóstico.

  4. Selecione Stream to an event hub (Transmitir para um hub de eventos) e Configure (Configurar) para abrir o painel Select Event Hub (Selecionar Hub de Eventos).

  5. Escolha o seu Hub de Eventos:

    • Selecionar namespace do hub de eventos: escolha o namespace que começa com Logzio (LogzioNS6nvkqdcci10p, por exemplo).
    • Selecione o nome do hub de eventos: Para logs, escolha insights-operational-logs e, para métricas, escolha insights-operational-metrics.
    • Selecione o nome da política do hub de eventos: escolha LogzioSharedAccessKey.
  6. Selecione OK para regressar ao painel Diagnostics settings.

  7. Na secção Log (Registo), selecione os dados que quer transmitir e selecione Save (Guardar).

Os dados selecionados serão transmitidos agora para o Hub de Eventos.

Visualizar os seus dados

De seguida, aguarde alguns momentos para que os dados cheguem do sistema ao Logz.io e, depois, abra o Kibana. Deverá ver os seus dashboards serem preenchidos com dados (com o tipo eventhub). Para obter mais informações sobre como criar painéis, consulte Kibana - Criar painel.

A partir daí, pode consultar dados específicos no separador Discover (Descobrir) ou criar objetos do Kibana para visualizar os seus dados no separador Visualize (Visualizar).

Clean up resources (Limpar recursos)

Quando já não precisar dos recursos do Azure criados neste tutorial, pode utilizar o comando abaixo para os eliminar:

az group delete --name <resource group>

Próximos passos

Neste tutorial, aprendeu a configurar a sua aplicação Java e os serviços Azure para enviar registos e métricas para o Logz.io.

Em seguida, saiba mais sobre como utilizar o Hub de Eventos para monitorizar a sua aplicação: