使用診斷設定來分析記錄和計量

注意

基本標準和企業方案將從 2025 年 3 月中旬開始淘汰,並停用 3 年。 建議您轉換至 Azure Container Apps。 如需詳細資訊,請參閱 Azure Spring Apps 淘汰公告

標準 耗用量和專用 方案將從 2024 年 9 月 30 日起淘汰,並在六個月後完成關閉。 建議您轉換至 Azure Container Apps。 如需詳細資訊,請參閱 將 Azure Spring Apps 標準取用和專用方案遷移至 Azure Container Apps

本文適用於: ✔️ Java ✔️ C#

本文適用於: ✔️ 基本/標準 ✔️ 企業

本文說明如何在 Azure Spring Apps 中分析診斷資料。

使用 Azure Spring Apps 的診斷功能後,您可以使用下列任何服務來分析記錄和計量:

  • 使用 Azure Log Analytics。 將記錄匯出至 Log Analytics 時會有延遲。
  • 將記錄儲存到儲存體帳戶以利稽核或手動檢查。 您可以指定保留時間 (以天數為單位)。
  • 將記錄串流至事件中樞,以供協力廠商服務或自訂分析解決方案擷取。

選擇您想要監視的記錄類別和計量類別。

提示

如果您只想串流記錄,可以使用 Azure CLI 命令 az spring app logs

記錄

Log 描述
ApplicationConsole 所有客戶應用程式的主控台記錄。
SystemLogs 可用的 LogType 值為 ConfigServer (僅限基本/標準)、ServiceRegistry (所有方案)、ApiPortal (僅限企業方案)、ApplicationConfigurationService (僅限企業方案)、SpringCloudGateway (僅限企業方案),以及 SpringCloudGatewayOperator (僅限企業方案)
IngressLogs 所有客戶應用程式的輸入記錄(僅存取記錄)。
BuildLogs 所有客戶應用程式在每個建置階段的建置記錄

注意

為了保護您的應用程式免於潛在的認證外洩,所有具有認證或其他敏感性資訊的記錄內容都會使用 *** 遮罩。 例如,任何具有下列模式的記錄內容都會以敏感性資訊處理,並遮罩對應的值:

  • dbpasspasswordkeysecretsigsignature,後面接著 :=。 這些模式通常會出現在 URL 參數和承載傾印中。 例如,https://somestorage.blob.core.windows.net?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.windows.net?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 監視器中使用 Log Analytics

設定診斷設定

  1. 在 Azure 入口網站中,移至您的 Azure Spring Apps 執行個體。

  2. 選取 [診斷設定] 選項,然後選取 [新增診斷設定]

  3. 輸入設定的名稱,然後選擇您要傳送記錄的目的地位置。 您可以選取下列選項的任何組合:

    • 封存至儲存體帳戶
    • 串流至事件中樞
    • 傳送至 Log Analytics
    • 傳送至合作夥伴解決方案
  4. 選擇您想要監視的記錄類別和計量類別,然後指定保留期間 (以天為單位)。 保留時間僅適用於儲存體帳戶。

  5. 選取 [儲存]

注意

記錄或計量從發出到出現在儲存體帳戶、事件中樞或 Log Analytics 中,最多可能會有 15 分鐘的差距。 如果刪除或移動 Azure Spring Apps 執行個體,作業將不會串聯至診斷設定資源。 您必須手動刪除診斷設定資源,然後才能針對其父代 (Azure Spring Apps 執行個體) 執行作業。 否則,如果佈建新的 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 監視器記錄查詢。 若要從集中式用戶端查詢所有 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 應用程式的應用程式記錄檔

若要檢查 Azure Spring 應用程式的應用程式記錄檔清單 (依時間排序,最新記錄檔先顯示),請執行下列查詢:

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.azuremicroservices.io"
| 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

在企業方案中顯示 VMware Spring Cloud 閘道記錄

若要檢閱記錄項目以查看企業方案中的 VMware Spring Cloud 閘道記錄,請執行下列查詢:

AppPlatformSystemLogs 
| where LogType == "SpringCloudGateway"
| project TimeGenerated , LogType, Level , ServiceName , Thread , Stack , Log , _ResourceId 
| limit 100

另一個名為 Spring Cloud 閘道運算子的元件會控制 Spring Cloud 閘道和路由的生命週期。 如果您遇到路由未生效的任何問題,請檢查此元件的記錄。 若要檢閱記錄項目以查看企業方案中的 VMware Spring Cloud 閘道運算子,請執行下列查詢:

AppPlatformSystemLogs 
| where LogType == "SpringCloudGatewayOperator"
| project TimeGenerated , LogType, Level , ServiceName , Thread , Stack , Log , _ResourceId 
| limit 100

在企業方案中顯示 Tanzu 記錄的應用程式組態服務

若要檢閱記錄項目以查看企業方案中 Tanzu 記錄的應用程式組態服務,請執行下列查詢:

AppPlatformSystemLogs 
| where LogType == "ApplicationConfigurationService"
| project TimeGenerated , LogType, Level , ServiceName , Thread , Stack , Log , _ResourceId 
| limit 100

顯示企業方案中的 Tanzu 服務登錄記錄

若要檢閱記錄項目以查看企業方案中的 Tanzu 服務登錄記錄,請執行下列查詢:

AppPlatformSystemLogs 
| where LogType == "ServiceRegistry"
| project TimeGenerated , LogType, Level , ServiceName , Thread , Stack , Log , _ResourceId 
| limit 100

在企業方案中顯示 VMware Tanzu 記錄的 API 入口網站

若要檢閱 API 入口網站的記錄項目以查看企業方案中的 VMware Tanzu 記錄,請執行下列查詢:

AppPlatformSystemLogs 
| where LogType == "ApiPortal"
| project TimeGenerated , LogType, Level , ServiceName , Thread , Stack , Log , _ResourceId 
| limit 100

深入了解查詢應用程式記錄

Azure 監視器提供使用 Log Analytics 查詢應用程式記錄的廣泛支援。 若要深入了解此服務,請參閱開始使用 Azure 監視器中的記錄查詢。 如需建置查詢以分析應用程式記錄的詳細資訊,請參閱 Azure 監視器中的記錄查詢概觀

Azure 入口網站中的便利進入點

使用下列步驟瀏覽至具有預先定義查詢的 [Log Analytics] 窗格:

  1. 移至 Azure Spring Apps 服務執行個體 [蓋棺] 頁面,然後在瀏覽窗格中選取 [Apps]

  2. 尋找您的目標應用程式,然後選取操作功能表。

  3. 在彈跳操作功能表中,選取 [檢視記錄]

    Azure 入口網站的螢幕擷取畫面,其中顯示 [應用程式] 頁面,並已醒目提示 [檢視記錄] 操作功能表項目。

    此動作會瀏覽至具有預先定義查詢的 [Log Analytics] 窗格。

還有其他進入點可檢視記錄。 您也可以找到受控元件的 [檢視記錄] 按鈕,例如組建服務和服務登錄。

常見問題集 (FAQ)

如何將多行 Java 堆疊追蹤轉換成單行?

有一個因應措施可將多行堆疊追蹤轉換成單行。 您可以修改 Java 記錄輸出以重新格式化堆疊追蹤訊息,並將新行字元取代為 Token。 如果您使用 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 記錄程式庫使用相同的策略。

下一步