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

注意

基本计划和标准计划于 2025 年 3 月 17 日进入退休期。 有关详细信息,请参阅 Azure Spring Apps 停用公告

本文适用于:✅ 基本/标准

本文介绍如何分析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,请参阅 Get started with Azure Monitor 中的 Log Analytics

配置诊断设置

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

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

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

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

  5. 选择“保存”。

注意

在日志或指标发出后,到其出现在您的存储帐户、事件中心或 Log Analytics 中之间,可能会有长达 15 分钟的延迟。 如果删除或移动Azure Spring Apps实例,则操作不会级联到 诊断设置 资源。 诊断设置必须在针对其父实例Azure Spring Apps实例的操作之前手动删除资源。 否则,如果使用与已删除实例相同的资源 ID 预配新的Azure Spring Apps实例,或者将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门户中,在左侧导航面板或搜索框中查找 Storage 帐户
  2. 选择添加诊断设置时选择的存储帐户。
  3. 若要打开“Blob 容器”窗格,请选择“Blob”
  4. 若要查看应用程序日志,请搜索名为 insights-logs-applicationconsole 的容器。
  5. 若要查看应用程序指标,请搜索名为 insights-metrics-pt1m 的容器。

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

使用事件中心

  1. 在Azure门户中,在左侧导航面板或搜索框中查找 Event Hubs

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

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

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

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

若要详细了解如何将诊断信息发送到 Event Hubs,请参阅使用 Event Hubs 在快速路径中流式传输 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服务实例的 Overview 页,然后在导航窗格中选择 Apps

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

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

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

    此操作将导航到具有预定义查询的 Log Analytics 窗格。

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

常见问题 (FAQ)

如何将多行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日志库使用相同的策略。

后续步骤