教程:对 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 开发工具包版本 11 或更高
- Azure 市场中的 Logz.io 帐户
- 使用 Log4J 或 Logback 的现有 Java 应用程序
将 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 存储,请参阅 寄送 Azure 活动日志。
将 Azure 日志和指标流式传输到 Logz.io
部署集成模板后,需要将 Azure 配置为将诊断数据流式传输到刚刚部署的事件中心。 当数据进入事件中心时,函数应用会将该数据转发到 Logz.io。
在搜索栏中,键入 诊断,然后选择 诊断设置。
从资源列表中选择资源,然后选择 添加诊断设置 以打开该资源的 诊断设置 面板。
为诊断设置指定名称。
选择 流到事件中心,然后选择 配置 以打开 选择事件中心 面板。
选定您的事件中心:
- 选择事件中心命名空间:选择 以 logzio 开头的命名空间(例如
LogzioNS6nvkqdcci10p
)。 - 选择事件中心名称:对于日志,请选择 insights-operational-logs,对于指标,请选择 insights-operational-metrics。
- 选择事件中心策略名称:选择 LogzioSharedAccessKey。
- 选择事件中心命名空间:选择 以 logzio 开头的命名空间(例如
选择 “确定”,返回到 诊断设置 面板。
在“日志”部分中,选择要传输的数据,然后选择保存。
所选数据现在流式传输到事件中心。
可视化数据
接下来,留一些时间让数据从系统迁移到 Logz.io,然后打开 Kibana。 您应该会看到数据(类型为 eventhub
)显示在您的仪表板上。 有关如何创建仪表板的详细信息,请参阅 Kibana - 创建仪表板。
在此处,可以在 “发现”选项卡中查询特定数据,或创建 Kibana 对象,以便在“可视化”选项卡中可视化数据。
清理资源
完成本教程中创建的 Azure 资源后,可以使用以下命令将其删除:
az group delete --name <resource group>
后续步骤
本教程介绍了如何将 Java 应用程序和 Azure 服务配置为将日志和指标发送到 Logz.io。
接下来,详细了解如何使用事件中心监视应用程序: