教程:对 Azure 上运行的 Java 应用使用 Logz.io 进行监视和日志记录入门

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

本教程假定你使用的是 Log4J 或 Logback。 这些库是用于在 Java 中登录的最广泛的两个库,因此本教程应该适用于在 Azure 上运行的大多数应用程序。 如果你已经在使用 Elastic 堆栈监控你的 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),而不是日志源(例如:server1server2server3)。 在本教程中,我们将调用类型 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 存储,请参阅 寄送 Azure 活动日志

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

部署集成模板后,需要将 Azure 配置为将诊断数据流式传输到刚刚部署的事件中心。 当数据进入事件中心时,函数应用会将该数据转发到 Logz.io。

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

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

    诊断设置面板

  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。

接下来,详细了解如何使用事件中心监视应用程序: