你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

实时流式传输 Azure Spring Apps 应用程序控制台日志

注意

Azure Spring Apps 是 Azure Spring Cloud 服务的新名称。 虽然该服务有新名称,但一些地方仍会使用旧名称,我们仍在更新屏幕截图、视频和图形等资产。

本文适用于:✔️ Java ✔️ C#

本文适用于:✔️ 基本版/标准版 ✔️ 企业版

本文介绍如何在 Azure CLI 中启用日志流式处理,以获取实时应用程序控制台日志,从而进行故障排除。 还可以使用诊断设置来分析 Azure Spring Apps 中的诊断数据。 有关详细信息,请参阅使用诊断设置分析日志和指标。 有关流式处理日志的详细信息,请参阅实时流式传输 Azure Spring Apps 作业日志实时流式传输 Azure Spring Apps 托管组件日志

先决条件

使用 Azure CLI 生成结尾日志

本部分提供了使用 Azure CLI 生成结尾日志的示例。 为了避免重复指定资源组和服务实例名称,请使用以下命令设置默认资源组名称和群集名称:

az config set defaults.group=<service-group-name>
az config set defaults.spring=<service-instance-name>

以下示例中省略了资源组和服务名。

查看具有单个实例的应用的结尾日志

如果名为 auth-service 的应用只有一个实例,则可以使用以下命令查看该应用实例的日志:

az spring app logs --name <application-name>

该命令会返回类似于以下示例的日志,其中 auth-service 是应用程序名称。

...
2020-01-15 01:54:40.481  INFO [auth-service,,,] 1 --- [main] o.apache.catalina.core.StandardService  : Starting service [Tomcat]
2020-01-15 01:54:40.482  INFO [auth-service,,,] 1 --- [main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.22]
2020-01-15 01:54:40.760  INFO [auth-service,,,] 1 --- [main] o.a.c.c.C.[Tomcat].[localhost].[/uaa]  : Initializing Spring embedded WebApplicationContext
2020-01-15 01:54:40.760  INFO [auth-service,,,] 1 --- [main] o.s.web.context.ContextLoader  : Root WebApplicationContext: initialization completed in 7203 ms

...

查看具有多个实例的应用的结尾日志

如果名为 auth-service 的应用具有多个实例,则可以使用 -i/--instance 选项查看实例日志。

首先,运行以下命令以获取应用实例名称:

az spring app show --name auth-service --query properties.activeDeployment.properties.instances --output table

该命令生成类似于以下输出的结果:

Name                                         Status    DiscoveryStatus
-------------------------------------------  --------  -----------------
auth-service-default-12-75cc4577fc-pw7hb  Running   UP
auth-service-default-12-75cc4577fc-8nt4m  Running   UP
auth-service-default-12-75cc4577fc-n25mh  Running   UP

然后,可以使用 -i/--instance 选项来流式传输应用实例日志,如下所示:

az spring app logs --name auth-service --instance auth-service-default-12-75cc4577fc-pw7hb

还可以从 Azure 门户获取应用实例的详细信息。 在 Azure Spring Apps 服务的左侧导航窗格中选择“应用”之后,选择“应用实例”。

连续流式传输新日志

默认情况下,az spring app logs 仅打印流式传输到应用控制台的现有日志,然后退出。 如果要流式处理新日志,请如以下示例所示添加 -f/--follow 参数:

az spring app logs --name auth-service --follow

使用 --follow 参数来跟踪即时日志时,Azure Spring Apps 日志流式处理服务每分钟向客户端发送一次检测信号日志,除非应用程序不断写入日志。 检测信号日志消息使用以下格式:2020-01-15 04:27:13.473: No log from server

使用以下命令检查所有受支持的日志记录选项:

az spring app logs --help

设置 JSON 结构化日志的格式

注意

若要设置 JSON 结构化日志的格式,需要 spring 扩展 2.4.0 版本或更高版本。

结构化应用程序日志以 JSON 格式显示,可能难以读取。 可以使用 --format-json 参数将 JSON 格式的日志格式化为更可读的格式。 有关详细信息,请参阅 Azure Spring Apps 的结构化应用程序日志

以下示例显示了如何使用 --format-json 参数:

# Raw JSON log
$ az spring app logs --name auth-service
{"timestamp":"2021-05-26T03:35:27.533Z","logger":"com.netflix.discovery.DiscoveryClient","level":"INFO","thread":"main","mdc":{},"message":"Disable delta property : false"}
{"timestamp":"2021-05-26T03:35:27.533Z","logger":"com.netflix.discovery.DiscoveryClient","level":"INFO","thread":"main","mdc":{},"message":"Single vip registry refresh property : null"}

# Formatted JSON log
$ az spring app logs --name auth-service --format-json
2021-05-26T03:35:27.533Z  INFO [           main] com.netflix.discovery.DiscoveryClient   : Disable delta property : false
2021-05-26T03:35:27.533Z  INFO [           main] com.netflix.discovery.DiscoveryClient   : Single vip registry refresh property : null

--format-json 参数还接受使用格式字符串语法的可选自定义格式。 有关详细信息,请参阅格式字符串语法

以下示例显示了如何使用格式字符串语法:

# Custom format
$ az spring app logs --name auth-service --format-json="{message}{n}"
Disable delta property : false
Single vip registry refresh property : null

使用的默认格式为:

{timestamp} {level:>5} [{thread:>15.15}] {logger{39}:<40.40}: {message}{n}{stackTrace}

在虚拟网络注入实例中流式传输 Azure Spring Apps 应用日志

对于部署在自定义虚拟网络中的 Azure Spring Apps 实例,可以默认从专用网络访问日志流式处理。 有关详细信息,请参阅在虚拟网络中部署 Azure Spring Apps

通过 Azure Spring Apps,还可使用 Azure 门户或 Azure CLI 从公共网络访问实时应用日志。

注意

如果在公用网络上启用日志流式处理终结点,会将公共入站 IP 添加到虚拟网络。 如果你担心这一点,请务必谨慎使用。

使用以下步骤在公用网络上启用日志流式处理终结点:

  1. 选择虚拟网络中部署的 Azure Spring Apps 服务实例,然后在导航菜单中选择“网络”。

  2. 选择“Vnet 注入”选项卡。

  3. 将“公共网络上的数据平面资源”的状态切换为“启用”,以在公共网络上启用日志流式处理终结点。 此过程需要花费几分钟时间。

    Azure 门户中显示“网络”页的屏幕截图,其中选择了“Vnet 注入”选项卡,并突出显示了“故障排除”部分。

启用日志流公共终结点后,可以从公用网络访问应用日志,就像访问普通实例一样。

保护流向日志流式处理公共终结点的流量

日志流式处理使用与在 Azure Spring Apps 中设置过渡环境中所述的测试终结点相同的密钥,对与部署的连接进行身份验证。 因此,只有对测试密钥具有读取访问权限的用户才能访问日志流式处理。

为了在向应用程序公开公共终结点时确保应用程序的安全性,请通过使用网络安全组筛选流向你的服务的网络流量来保护终结点。 有关详细信息,请参阅教程:在 Azure 门户中使用网络安全组筛选网络流量。 网络安全组包含安全规则,这些规则可允许或拒绝多种 Azure 资源的入站和出站网络流量。 可以为每项规则指定源和目标、端口以及协议。

注意

如果在启用日志流公共终结点后,无法通过 Internet 访问虚拟网络注入实例中的应用日志,请检查网络安全组,查看是否允许此类入站流量。

下表显示了我们推荐的基本规则示例。 可将 nslookup 等命令与 <service-name>.private.azuremicroservices.io 终结点结合使用来获取服务的目标 IP 地址。

优先级 名称 端口 协议 目标 操作
100 规则名称 80 TCP Internet 服务 IP 地址 Allow
110 规则名称 443 TCP Internet 服务 IP 地址 Allow

后续步骤