通过诊断设置分析日志和指标

注意

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

标准消耗和专用计划将于 2024 年 9 月 30 日开始弃用,并在六个月后完全关闭。 建议转换到 Azure 容器应用。

本文介绍如何在 Azure Spring Apps 中分析诊断数据。

使用 Azure Spring Apps 的诊断功能,可以通过以下任何服务分析日志和指标:

  • 使用 Azure Log Analytics。 将日志导出到 Log Analytics 时存在延迟。
  • 将日志保存到存储帐户进行审核或手动检查。 可以指定保留时间(天)。
  • 将日志流式传输到事件中心,供第三方服务或自定义分析解决方案引入。

选择要监视的日志类别和指标类别。

提示

如果只想流式传输日志,可以使用 Azure CLI 命令 az spring app logs

日志

日志 说明
ApplicationConsole 所有客户应用程序的控制台日志。
SystemLogs 可用的 LogType 值是 ConfigServer(仅限基本/标准)、ServiceRegistry(所有计划)
IngressLogs 客户的所有应用程序的入口日志(仅访问日志)。
BuildLogs 每个生成阶段的所有客户应用程序的生成日志

注意

为了保护应用程序免于潜在的凭据泄漏,所有包含凭据或其他敏感信息的日志内容都使用***屏蔽。 例如,使用以下模式的任何日志内容都作为敏感信息进行处理,并屏蔽相应的值:

  • dbpasspasswordkeysecretsigsignature,后跟:=。 这些模式通常出现在 URL 参数和有效负载转储中。 例如,https://somestorage.blob.core.chinacloudapi.cn?sv=2021-08-06&st=2024-04-30T10%3A01%3A19Z&se=2024-04-30T11%3A01%3A19Z&sr=b&sp=r&sig=xxxxxxxxxxxxxx 变为 https://somestorage.blob.core.chinacloudapi.cn?sv=2021-08-06&st=2024-04-30T10%3A01%3A19Z&se=2024-04-30T11%3A01%3A19Z&sr=b&sp=r&sig=***
  • 类似于 JWT 令牌的编码字符串,格式为:eyJxxxxxx.eyJxxxxxx

如果在日志中找到掩码值,请务必更新应用程序代码以消除凭据泄漏。

指标

有关指标的完整列表,请参阅 Azure Spring Apps 指标用户指标选项部分。

若要开始,请启用其中一项服务来接收数据。 若要了解如何配置 Log Analytics,请参阅开始在 Azure Monitor 中使用 Log Analytics

配置诊断设置

  1. 在 Azure 门户中,请转到 Azure Spring Apps 实例。

  2. 选择“诊断设置”选项,然后选择“添加诊断设置” 。

  3. 输入设置的名称,然后选择要将日志发送到的位置。 可以选择以下选项的任意组合:

    • 存档到存储帐户
    • 流式传输到事件中心
    • 发送到 Log Analytics
    • 发送到合作伙伴解决方案
  4. 选择要监视的日志类别和指标类别,并指定保留时间(天)。 保留时间仅适用于存储帐户。

  5. 选择“保存”。

注意

发出日志或指标后,可能需要最多 15 分钟它们才会显示在存储帐户、事件中心或 Log Analytics 中。 如果删除或移动了 Azure Spring Apps 实例,则该操作将不会级联到“诊断设置”资源。 必须先手动删除“诊断设置”资源,然后才能对其父级(即 Azure Spring Apps 实例)进行操作。 否则,如果为新的 Azure Spring Apps 实例预配了与已删除实例相同的资源 ID,或者将 Azure Spring Apps 实例移回,则先前的诊断设置资源将继续对其进行扩展。

查看日志和指标

有多种方法可以查看日志和指标,如以下标题中所述。

使用“日志”窗格

  1. 在 Azure 门户中,请转到 Azure Spring Apps 实例。

  2. 要打开“日志搜索”窗格,请选择“日志” 。

  3. 在“表”搜索框中,使用以下查询之一

    • 若要查看日志,请输入查询,如以下示例所示:

      AppPlatformLogsforSpring
      | limit 50
      
    • 若要查看指标,请输入查询,如以下示例所示:

      AzureMetrics
      | limit 50
      
  4. 若要查看搜索结果,请选择“运行”。

使用 Log Analytics

  1. 在 Azure 门户的左窗格中选择“Log Analytics”。

  2. 选择添加诊断设置时选择的 Log Analytics 工作区。

  3. 要打开“日志搜索”窗格,请选择“日志” 。

  4. 在“表”搜索框中,使用以下查询之一

    • 若要查看日志,请输入查询,如以下示例所示:

      AppPlatformLogsforSpring
      | limit 50
      
    • 若要查看指标,请输入查询,如以下示例所示:

    AzureMetrics
    | limit 50
    
  5. 若要查看搜索结果,请选择“运行”。

  6. 可以通过设置筛选条件来搜索特定应用程序或实例的日志,如以下示例所示:

    AppPlatformLogsforSpring
    | where ServiceName == "YourServiceName" and AppName == "YourAppName" and InstanceName == "YourInstanceName"
    | limit 50
    

    注意

    == 区分大小写,但 =~ 不区分大小写。

若要详细了解 Log Analytics 中使用的查询语言,请参阅 Azure Monitor 日志查询。 要从一个集中的客户端查询所有 Log Analytics 日志,请查看 Azure 数据资源管理器

使用存储帐户

  1. 在 Azure 门户中,在左侧导航面板或搜索框中查找“存储帐户”。
  2. 选择添加诊断设置时选择的存储帐户。
  3. 若要打开“Blob 容器”窗格,请选择“Blob” 。
  4. 若要查看应用程序日志,请搜索名为 insights-logs-applicationconsole 的容器。
  5. 若要查看应用程序指标,请搜索名为 insights-metrics-pt1m 的容器。

若要了解有关将诊断信息发送到存储帐户的详细信息,请参阅在 Azure 存储中存储和查看诊断数据

使用事件中心

  1. 在 Azure 门户中,在左侧导航面板或搜索框中查找“事件中心”。

  2. 搜索并选择添加诊断设置时选择的事件中心。

  3. 若要打开“事件中心列表”窗格,请选择“事件中心” 。

  4. 若要查看应用程序日志,请搜索名为 insights-logs-applicationconsole 的事件中心。

  5. 若要查看应用程序指标,请搜索名为 insights-metrics-pt1m 的事件中心。

若要了解有关将诊断信息发送到事件中心的详细信息,请参阅使用事件中心流式处理热路径中的 Azure 诊断数据

分析日志

Azure Log Analytics 与 Kusto 引擎一起运行,因此,你可以查询日志以进行分析。 有关使用 Kusto 查询日志的快速简介,请查看 Log Analytics 教程

应用程序日志提供有关应用程序的运行状况、性能等的关键信息和详细日志。 下一节将介绍一些简单的查询,帮助你理解应用程序的当前和过去状态。

显示 Azure Spring Apps 中的应用程序日志

若要查看中 Azure Spring Apps 的应用程序日志列表(按时间排序,首先显示最新日志),请运行以下查询:

AppPlatformLogsforSpring
| project TimeGenerated , ServiceName , AppName , InstanceName , Log
| sort by TimeGenerated desc

显示包含错误或异常的日志条目

若要查看提及错误或异常的未排序日志条目,请运行以下查询:

AppPlatformLogsforSpring
| project TimeGenerated , ServiceName , AppName , InstanceName , Log
| where Log contains "error" or Log contains "exception"

使用此查询查找错误,或修改查询词以查找特定的错误代码或异常。

显示应用程序在过去一小时内报告的错误和异常数

若要创建显示应用程序在过去一小时记录的错误和异常数的饼图,请运行以下查询:

AppPlatformLogsforSpring
| where TimeGenerated > ago(1h)
| where Log contains "error" or Log contains "exception"
| summarize count_per_app = count() by AppName
| sort by count_per_app desc
| render piechart

显示包含特定主机的入口日志条目

若要查看特定主机生成的日志条目,请运行以下查询:

AppPlatformIngressLogs
| where TimeGenerated > ago(1h) and Host == "ingress-asc.test.microservices.azure.cn"
| project TimeGenerated, RemoteIP, Host, Request, Status, BodyBytesSent, RequestTime, ReqId, RequestHeaders
| sort by TimeGenerated

使用此查询可查找此特定主机的入口日志的响应 StatusRequestTime 和其他属性。

显示特定 requestId 的入口日志条目

若要查看特定 requestId 值 <request_ID> 的日志条目,请运行以下查询:

AppPlatformIngressLogs
| where TimeGenerated > ago(1h) and ReqId == "<request_ID>"
| project TimeGenerated, RemoteIP, Host, Request, Status, BodyBytesSent, RequestTime, ReqId, RequestHeaders
| sort by TimeGenerated

显示某个特定应用的生成日志条目

若要在生成过程中查看特定应用的日志条目,请运行以下查询:

AppPlatformBuildLogs
| where TimeGenerated > ago(1h) and PodName contains "<app-name>"
| sort by TimeGenerated

在特定生成阶段显示特定应用的生成日志条目

若要查看某个特定生成阶段中某个特定应用的日志条目,请运行以下查询。 请将 <app-name> 占位符替换为应用程序名称。 将 <build-stage> 占位符替换为以下值之一,它们代表生成过程的各个阶段:preparedetectrestoreanalyzebuildexportcompletion

AppPlatformBuildLogs
| where TimeGenerated > ago(1h) and PodName contains "<app-name>" and ContainerName == "<build-stage>"
| sort by TimeGenerated

详细了解查询应用程序日志

Azure Monitor 通过使用 Log Analytics 为查询应用程序日志提供了广泛的支持。 若要了解有关此服务的详细信息,请参阅 Azure Monitor 中的日志查询入门。 若要详细了解如何生成查询以分析应用程序日志,请参阅 Azure Monitor 中的日志查询概述

Azure 门户中的便捷入口点

使用以下步骤导航到包含预定义查询的“Log Analytics”窗格

  1. 转到 Azure Spring Apps 服务实例的“概述”页面,然后在导航窗格中选择“应用”

  2. 找到目标应用,然后选择上下文菜单。

  3. 在弹出的上下文菜单中,选择“查看日志”

    Azure 门户的屏幕截图,其中显示了“应用”页面,并突出显示了“查看日志”上下文菜单项。

    此操作将导航到包含预定义查询的“Log Analytics”窗格

还有其他可以查看日志的入口点。 还可以找到托管组件(如生成服务和服务注册表)的“查看日志”按钮

常见问题 (FAQ)

如何将多行 Java 堆栈跟踪转换为单行 Java 堆栈跟踪?

有一种变通方法可以将多行堆栈跟踪转换为单行堆栈跟踪。 可以修改 Java 日志输出,重新设置堆栈跟踪消息格式,从而将换行符替换为标记。 如果使用 Java Logback 库,可以通过添加 %replace(%ex){'[\r\n]+', '\\n'}%nopex 来重新设置堆栈跟踪消息格式,如下所示:

<configuration>
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>
                level: %level, message: "%logger{36}: %msg", exceptions: "%replace(%ex){'[\r\n]+', '\\n'}%nopex"%n
            </pattern>
        </encoder>
    </appender>
    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
    </root>
</configuration>

然后,可以在 Log Analytics 中将令牌替换为换行符,如以下示例所示:

AppPlatformLogsforSpring
| extend Log = array_strcat(split(Log, '\\n'), '\n')

可以尝试对其他 Java 日志库使用相同的策略。

后续步骤