問題描述
基於.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,這樣就可以針對性的設定收集日誌的引數。
由此我們可以得出: Executing和Executed兩個記錄在function層面對應的category和log level分別是Function.Function1 與Information
解決方式
根據以上的分析,只要在host.json中限制Loglevel和Category就可以實現過濾不需要的日誌。
- 通過修改Function.Funciton1為Warning的資訊,則過濾掉了waring級別以下的日誌(如本文開頭提及的information)。
- 通過設定Function.Function1.User為Information資訊,則可以保證通過程式碼記錄的inforamtion級別及以上的日誌可以傳送到Application Insights。
查詢Application Insights中生成的日誌記錄,可以看到是沒有Function.Function1的information的日誌的
附上在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