【Azure Application Insights】在Azure Function中啟用Application Insights後,如何配置不輸出某些日誌到AI 的Trace中

路邊兩盞燈發表於2020-12-31

問題描述

基於.NET Core的Function App如果配置了Application Insights之後,每有一個函式被執行,則在Application Insights中的Logs中的trace裡都可以查詢到函式的執行啟動,執行結束的資訊。類似如下的日誌,

函式執行開始 Executing Function1(Reason=This function was programmatically called via the host APIs., Id=fa9er0b5c612447ert2051af5543etyb)
函式執行結束 Executed Function1(Succeeded, Id=fa9er0b5c612447ert2051af5543etyb, Duration=1ms)

 

由於這類日誌產生的條目過多且沒有包含業務日誌,所以在不影響其他業務或異常日誌的情況下,是否可以不收集此類資訊呢?

問題原因

Application Insights收集日誌資訊是根據在Azure Function中的host.json配置而決定的。如以下內容:

{
  "logging": {
    "fileLoggingMode": "always",
    "logLevel": {
      "default": "Information",
      "Host.Results": "Error",
      "Function": "Error",
      "Host.Aggregator": "Trace"
    }
  }
}
  • 對於 Host.Results 或 Function 的日誌,僅記錄 Error 或更高階別的事件。
  • 對於 Host.Aggregator 的日誌,記錄所有生成的指標 (Trace)。
  • 對於所有其他日誌(包括使用者日誌),僅記錄 Information 級別及更高階別的事件。

而對於日誌級別的分類,則可以參考下表:

為每個日誌分配日誌級別。 該值是表示相對重要性的整數:

配置日誌級別
LogLevel程式碼說明
跟蹤(Trace) 0 包含最詳細訊息的日誌。 這些訊息可能包含敏感應用程式資料。 這些訊息預設情況下處於禁用狀態,並且絕不應在生產環境中啟用。
除錯(Debug) 1 在開發過程中用於互動式調查的日誌。 這些日誌應主要包含對除錯有用的資訊,並且沒有長期價值。
資訊(Information) 2 跟蹤應用程式的常規流的日誌。 這些日誌應具有長期價值。
警告(Warning) 3 突出顯示應用程式流中的異常或意外事件,但不會導致應用程式執行停止的日誌。
錯誤(Error) 4 當前執行流因失敗而停止時突出顯示的日誌。 這些錯誤應指示當前活動中的故障,而不是應用程式範圍內的故障。
嚴重(Critical) 5 描述不可恢復的應用程式/系統崩潰或需要立即引起注意的災難性故障的日誌。
無(None) 6 禁用指定類別的日誌記錄。

所以根據以上的基礎資訊,在Application Insights的Trace表中,我們檢視到函式執行日誌的Category和LogLevel,這樣就可以針對性的設定收集日誌的引數。

【Azure Application Insights】在Azure Function中啟用Application Insights後,如何配置不輸出某些日誌到AI 的Trace中

 

由此我們可以得出: Executing和Executed兩個記錄在function層面對應的category和log level分別是Function.Function1 與Information

解決方式

根據以上的分析,只要在host.json中限制Loglevel和Category就可以實現過濾不需要的日誌。

  1. 通過修改Function.Funciton1為Warning的資訊,則過濾掉了waring級別以下的日誌(如本文開頭提及的information)。
  2. 通過設定Function.Function1.User為Information資訊,則可以保證通過程式碼記錄的inforamtion級別及以上的日誌可以傳送到Application Insights。

 

 【Azure Application Insights】在Azure Function中啟用Application Insights後,如何配置不輸出某些日誌到AI 的Trace中

查詢Application Insights中生成的日誌記錄,可以看到是沒有Function.Function1的information的日誌的

【Azure Application Insights】在Azure Function中啟用Application Insights後,如何配置不輸出某些日誌到AI 的Trace中

 

 

附上在Application Insights的Traces表中查詢到以上記錄的語句

traces
| where timestamp > ago(30m)
| extend category = customDimensions.Category
| extend logLevel = customDimensions.LogLevel
| project timestamp, category, logLevel, message
| order by timestamp desc

 

參考資料

如何為 Azure Functions 配置監視https://docs.azure.cn/zh-cn/azure-functions/configure-monitoring?tabs=v2

相關文章