你当前正在访问 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. 将“公共网络上的数据平面资源”的状态切换为“启用”,以在公共网络上启用日志流式处理终结点。 此过程需要花费几分钟时间。

    Screenshot of the Azure portal that shows the Networking page with the Vnet injection tab selected and the Troubleshooting section highlighted.

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

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

日志流式处理使用与在 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

后续步骤