教程:开始使用用于在 Azure 上运行的 Java 应用的 Logz.io 进行监视和日志记录

本教程介绍如何配置经典 Java 应用程序,以便将日志发送到 Logz.io 服务进行引入和分析。 Logz.io 提供基于 Elasticsearch/Logstash/Kibana (ELK) 和 Grafana 的完整监视解决方案。

本教程假设你使用 Log4J 或 Logback。 这些库是两个最广泛用于在 Java 中进行日志记录的库,因此本教程应该适用于在 Azure 上运行的大多数应用程序。 如果你已使用 Elastic Stack 监视 Java 应用程序,则可在本教程中了解如何通过重新配置将 Logz.io 终结点设为目标。

本教程介绍以下操作:

  • 将日志从现有 Java 应用程序发送到 Logz.io。
  • 将诊断日志和指标从 Azure 服务发送到 Logz.io。

先决条件

将 Java 应用程序日志发送到 Logz.io

首先,我们将学习如何使用令牌来配置 Java 应用程序,使其能够访问 Logz.io 帐户。

获取 Logz.io 访问令牌

若要获取令牌,请登录到 Logz.io 帐户,选择左下角的齿轮图标,然后选择设置管理令牌,然后选择“数据传送令牌”选项卡。复制显示的默认访问令牌以及侦听器 URL,以便>稍后可以使用它们。

安装并配置用于 Log4J 或 Logback 的 Logz.io 库

Logz.io Java 库在 Maven Central 上提供,因此可将其作为依赖项添加到应用配置中。 请在 Maven Central 上检查版本号,并在以下配置设置中使用最新版本。

如果使用 Maven,请将以下依赖项添加到 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>

如果使用 Gradle,请将以下依赖项添加到生成脚本:

Log4J:

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

Logback:

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

接下来,更新 Log4J 或 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>

<your-logz-io-token> 占位符替换为你的访问令牌,并将 <your-logz-io-listener-host> 占位符替换为区域的侦听器主机(例如,listener.logz.io)。 有关查找帐户区域的详细信息,请参阅 帐户区域

logzioType 元素是指 Elasticsearch 中的一个逻辑字段,用于将不同的文档互相分隔开。 必须正确配置此参数,以便充分利用 Logz.io。

Logz.io“类型”是日志格式(例如:Apache、NGinx 和 MySQL),而不是源(例如:server1、server2 和 server3)。 在本教程中,我们将该类型称为 java,因为我们将配置 Java 应用程序,并且期望这些应用程序都会有相同的格式。

至于高级用法,我们可以将 Java 应用程序分组为不同的类型,这些类型都有自己的特定日志格式(可以通过 Log4J 和 Logback 进行配置)。 例如,可以有“spring-boot-monolith”类型和“spring-boot-microservice”类型。

在 Logz.io 上测试配置和日志分析

配置 Logz.io 库以后,应用程序就会直接将日志发送到其中。 若要测试一切正常,请转到 Logz.io 控制台,选择 “日志 > 实时”结尾 选项卡,然后选择“ 运行”。 应看到类似于以下内容的消息,表明连接正常:

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

接下来,启动应用程序或用其生成一些日志。 日志应该直接显示在屏幕上。 例如,下面是 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)

由于日志由 Logz.io 处理,因此可以利用该平台的所有服务。

将 Azure 服务数据发送到 Logz.io

接下来介绍如何将日志和指标从 Azure 资源发送到 Logz.io。

部署模板

第一步是部署 Logz.io - Azure 集成模板。 集成基于现成的 Azure 部署模板,该模板可设置管道的所有必需构建基块。 该模板创建一个事件中心命名空间、一个事件中心、两个存储 blob,以及所有必需的正确权限和连接。 通过自动部署设置的资源可以收集单个 Azure 区域的数据并将该数据传送到 Logz.io。

请找到在存储库的自述文件的第一步中显示的“部署到 Azure”按钮。

选择“部署到 Azure”时,Azure 门户中的“自定义部署”页就会显示,其中有一个预先填充字段的列表。

可以让大部分字段保留原样,但务必输入以下设置:

  • 资源组:选择现有资源组或创建新的资源组
  • Logzio 日志/指标主机:输入 Logz.io 侦听器的 URL。 如果不确定该 URL 是什么,请检查登录 URL。 如果它是 app.logz.io,请使用 listener.logz.io(默认设置)。 如果它是 app-eu.logz.io,请使用 listener-eu.logz.io。
  • Logzio 日志/指标令牌:输入要将 Azure 日志或指标传送到其中的 Logz.io 帐户的令牌。 可以在 Logz.io UI 中的帐户页上找到该令牌。

同意页面底部的条款,然后选择“购买”。 然后,Azure 就会部署该模板,可能需要一到两分钟。 最终会在门户顶部看到“部署成功”消息。

可以通过访问定义的资源组来查看部署的资源。

若要了解如何配置 logzio-azure-serverless 以将数据备份到 Azure Blob 存储,请参阅 Ship Azure activity logs(传送 Azure 活动日志)。

将 Azure 日志和指标流式传输到 Logz.io

由于已部署集成模板,因此需配置 Azure,以便将诊断数据流式传输到刚部署的事件中心。 当数据进入事件中心以后,函数应用随后会将该数据转发到 Logz.io。

  1. 在搜索栏中键入“诊断”,然后选择“诊断设置”

  2. 从资源列表中选择一项资源,然后选择“添加诊断设置”,打开该资源的“诊断设置”面板

    Diagnostics settings panel

  3. 为诊断设置提供一个名称

  4. 选择“流式传输到事件中心”,然后选择“配置”,以便打开“选择事件中心”面板。

  5. 选择事件中心:

    • 选择事件中心命名空间:选择以 Logzio 开头的命名空间(例如 LogzioNS6nvkqdcci10p
    • 选择事件中心名称:对于日志,请选择“insights-operational-logs”;对于指标,请选择“insights-operational-metrics”
    • 选择事件中心策略名称:选择“LogzioSharedAccessKey”
  6. 选择“确定”,返回到“诊断设置”面板。

  7. 在“日志”部分,选择要流式传输的数据,然后选择“保存”。

所选数据现在会流式传输到事件中心。

可视化数据

接下来,为数据留出一些时间从你的系统传送到 Logz.io,然后打开 Kibana。 应该会看到数据(类型为 eventhub)填充仪表板。 有关如何创建仪表板的详细信息,请参阅 Kibana - 创建仪表板

可以在该仪表板的“发现”选项卡中查询特定数据,或者创建 Kibana 对象,以便在“可视化”选项卡中将数据可视化。

清理资源

使用完本教程中创建的 Azure 资源后,可以用以下命令将其删除:

az group delete --name <resource group>

后续步骤

本教程介绍了如何配置 Java 应用程序和 Azure 服务,以便将日志和指标发送到 Logz.io。

接下来会详细介绍如何使用事件中心来监视应用程序: