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

实时流式传输 Azure Spring Apps 作业日志(预览)

注意

基本、标准和企业计划将从 2025 年 3 月中旬开始弃用,停用期为 3 年。 建议转换到 Azure 容器应用。 有关详细信息,请参阅 Azure Spring Apps 停用公告

标准消耗和专用计划将于 2024 年 9 月 30 日开始弃用,并在六个月后完全关闭。 建议转换到 Azure 容器应用。 有关详细信息,请参阅将 Azure Spring Apps 标准消耗和专用计划迁移到 Azure 容器应用

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

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

先决条件

  • 具有 Azure Spring Apps 扩展的 Azure CLI 版本 1.24.0 或更高版本。 可以使用以下命令安装扩展:az extension add --name spring

分配 Azure 角色

若要流式传输作业的日志,必须分配有相关的 Azure 角色。 下表列出了所需的角色以及为该角色授予权限以进行的操作:

所需角色 Operations
Azure Spring Apps 作业日志读取者角色 Microsoft.AppPlatform/Spring/jobs/executions/logstream/action
Microsoft.AppPlatform/Spring/jobs/executions/listInstances/action

按照以下步骤使用 Azure 门户分配 Azure 角色:

  1. 打开 Azure 门户

  2. 打开你的 Azure Spring Apps 服务实例。

  3. 在导航窗格中,选择“访问控制(IAM)”。

  4. 在“访问控制(IAM)”页上选择“添加”,然后选择“添加角色分配”。

    Azure 门户中显示“访问控制 (IAM)”页的屏幕截图,其中突出显示了“添加角色分配”选项。

  5. 在“添加角色分配”页上的“名称”列表中,搜索并选择目标角色,然后选择“下一步”

    Azure 门户的屏幕截图,其中显示了“添加角色分配”页,并突出显示了“Azure Spring Apps 作业日志读取者角色”名称。

  6. 选择“成员”,然后搜索并选择你的用户名

  7. 选择“查看 + 分配”。

查看跟踪日志

本部分提供了使用 Azure CLI 生成跟踪日志的示例。

查看特定实例的跟踪日志

每次触发一个作业时,都会创建一个新的作业执行。 此外,根据作业的并行度设置,多个副本或实例并行执行。

使用以下命令列出作业执行中的所有实例:

az spring job execution instance list \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --job <job-name> \
    --execution <job-execution-name>

可以从输出中获取作业执行的所有实例名称。

若要查看特定实例的跟踪日志,请使用带 -i/--instance 参数的 az spring job logs 命令,如以下示例中所示:

az spring job logs \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --name <job-name> \
    --execution <job-execution-name> \
    --instance <instance-name>

在一个命令中查看所有实例的跟踪日志

若要查看所有实例的跟踪日志,请使用 --all-instances 参数,如以下示例中所示。 实例名称是每个日志行的前缀。 如果有多个实例,则为每个实例批量打印日志。 这样,一个实例的日志就不会与另一个实例的日志交错。

az spring job logs \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --name <job-name> \
    --execution <job-execution-name> \
    --all-instances

连续流式传输新日志

默认情况下,az spring job logs 仅打印流式传输到控制台的现有日志,然后退出。 如果要流式传输新日志,请添加 -f/--follow 参数。

使用 -f/--follow 选项跟踪即时日志时,Azure Spring Apps 日志流式处理服务会每隔一分钟向客户端发送一次检测信号日志,除非该作业不断写入日志。 检测信号日志消息使用以下格式:2023-12-18 09:12:17.745: No log from server

流式传输特定实例的日志

请使用以下命令获取特定实例的实例名称并流式传输其日志:

az spring job execution instance list \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --job <job-name> \
    --execution <job-execution-name>

az spring job logs \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --name <job-name> \
    --execution <job-execution-name> \
    --instance <instance-name> \
    --follow

流式传输所有实例的日志

使用以下命令流式传输所有实例的日志:

az spring job logs \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-instance-name> \
    --name <job-name> \
    --execution <job-execution-name> \
    --all-instances \
    --follow

在作业执行中流式传输多个实例的日志时,一个实例的日志与其他实例的日志交错。

在虚拟网络注入实例中流式传输日志

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

借助 Azure Spring Apps,还可从公用网络访问实时作业日志。

注意

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

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

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

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

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

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

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

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

作业的日志流式处理使用 Azure RBAC 对作业的连接进行身份验证。 因此,只有具有适当角色的用户才能访问日志。

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

注意

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

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

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

后续步骤