1. 程式人生 > >Azure Monitor(一)Application Insights

Azure Monitor(一)Application Insights

一,引言

  Azure Monitor 是 Azure 中的一項完整堆疊監視服務,是一種收集和分析遙測資料的服務。它提供了一組完整的功能來監視 Azure 資源以及其他雲中和本地的資源。Azure Monitor  該服務有助於實現雲應用程式以及本地資源和應用程式的最大效能和可用性。 它顯示了應用程式的執行方式,並可識別應用程式存在的任何問題。

       Azure Monitor 會收集兩種基本型別的資料 - 指標和日誌。 指標表明資源的執行方式,以及使用的其他資源。 日誌包含顯示資源建立/修改時間的記錄。

 

 Azure Monitor 從一系列元件中自動收集資料。 例如:

  1,應用程式資料:與自定義應用程式程式碼相關的資料。
  2,作業系統資料:來自託管應用程式的 Windows 或 Linux 虛擬機器的資料。
  3,Azure 資源資料:與 Azure 資源(如 Web 應用或負載均衡器)的操作相關的資料。
  4,Azure 訂閱資料:與訂閱相關的資料。 它包括有關 Azure 執行狀況和可用性的資料。
  5,Azure 租戶資料:有關 Azure 組織級別服務的資料,例如 Azure Active Directory。
由於 Azure Monitor 是自動系統,因此在建立 Azure 資源(如虛擬機器和 Web 應用)後,它會立即從這些源中收集資料。 可通過以下方式擴充套件 Azure Monitor 收集的資料:

  1,啟用診斷:對於某些資源(如 Azure SQL 資料庫),僅在啟用診斷日誌記錄後才會收到有關資源的完整資訊。 可使用 Azure 門戶、Azure CLI 或 PowerShell 來啟用診斷。
  2,新增代理:對於虛擬機器,可安裝 Log Analytics 代理,並將其配置為將資料傳送到 Log Analytics 工作區。 此代理會增加發送到 Azure Monitor 的資訊量。
開發人員可能還想要從自定義程式碼(例如 Web 應用、Azure 函式或移動應用)將資料傳送到 Azure Monitor。 他們通過呼叫資料收集器 API 來發送資料。 你可通過 HTTP 與此 REST 介面通訊。 此介面與各種開發框架(如 .NET Framework、Node.js 和 Python)相容。 開發人員可選擇自己最喜歡的語言和框架在 Azure Monitor 中記錄資料。

日誌

日誌包含對資源所做更改的相關時間戳資訊。 記錄的資訊型別因日誌源而異。 日誌資料會整理成記錄,每種記錄型別具有不同的屬性集。 日誌可以包含數字值(如 Azure Monitor 指標),但大多數日誌包含文字資料,而不是數字值。
最常見的日誌專案型別會記錄事件。 事件可能偶爾發生,而不是按固定的間隔或根據某種計劃發生。 事件由應用程式和服務建立,這些應用程式和服務為事件提供上下文。 可將指標資料儲存在日誌中,以便將其與其他監視資料合併起來用於分析。
在 Log Analytics 工作區中記錄來自 Azure Monitor 的資料。 Azure 提供分析引擎和豐富的查詢語言。 日誌顯示了上下文的任何問題,有助於確定根本原因。

指標

指標是數字值,用於描述系統某些方面在某個時間點的情況。 Azure Monitor 可以近乎實時地捕獲指標。 這些指標按固定時間間隔收集,在因其頻繁取樣而發出警報時很有用。 可使用多種演算法,將指標與其他指標進行比較,並觀察隨時間變化的趨勢。
指標儲存在時序資料庫中。 分析時間戳資料時,使用此資料儲存最為有效。 指標適用於警報和快速檢測問題。 可通過指標瞭解有關係統效能的資訊。 如果需要,可以將它們與日誌進行合併,確定問題的根本原因。

   Azure Monitor 現在包括 Log Analytics 和 Application Insights,其提供的高階工具適用於收集和分析遙測資料,以便最大程度地提高雲和本地的資源和應用程式的效能和可用性。 它可以幫助你瞭解應用程式的效能,並主動識別影響應用程式及其所依賴資源的問題。那麼今天就先了解 Application Insights,通過它可以監控網站的可用性、效能和使用情況。快速診斷確定並診斷應用程式中的錯誤,而無需等待使用者報告這些錯誤以及提供使用者資料的分析,使用者,會話,事件等,

二,正文

 1,什麼是 Application Insights?

  Application Insights 是 Azure Monitor 的一項功能。 使用它可以監視實時應用程式。 它將自動檢測效能異常,並且包含了強大的分析工具來幫助診斷問題,瞭解使用者在應用中實際執行了哪些操作。 它旨在幫助持續提高效能與可用性。 它適用於本地雲、混合雲或任何公有云中託管的各種平臺(包括 .NET、Node.js、Java 和 Python)上的應用。 它與 DevOps 程序整合,並且具有與不同開發工具的連線點。 可以通過與 Visual Studio App Center 整合來監視和分析移動應用的遙測資料。

 2,為NET.Core Web專案新增Application Insights

新增 NET Core Web 專案

 管理 NuGet 包=》Microsoft.ApplicationInsights.AspNetCore

 註冊Application Insights 遙測收集服務

services.AddApplicationInsightsTelemetry();

azure portal 新建 Applaction Insights 服務

點選 “Create” 按鈕

 

選擇已有的資源組/建立新的資源組,填寫 Application Insights 的服務名稱 “Azure.Monitor.Application_Insights” (我這裡是之前已經建立服務名稱為 “Azure.Monitor.Application_Insights” ,這裡忽略圖中名稱後面沒有 s)

 

 複製圖中圈起來的檢測金鑰:Instrumentation Key

 配置 appsetting 配置檔案中的 InstrumentationKey 的值

{
      "ApplicationInsights": {
        "InstrumentationKey": "putinstrumentationkeyhere"
      },
      "Logging": {
        "LogLevel": {
          "Default": "Warning"
        }
      }
    }

3,執行 Web 應用程式,檢視遙測資料

選擇 Monitoring=》Logs

 

 

 訊息實時上報差不多需要3-5分鐘,差不多3分鐘後,我們再次點選 “Run”,我們只看到 “Warning”,“Error”,“Critical”,我們沒有得到 “Information” 和 “Debug” (後面會講到)

 同時,如下圖所示,我們還可以寫一些查詢語句,比如根據時間戳降序排列

 

 我們還可以編寫where 條件,例如 查詢 message=="Warning 1"的警告資訊

 

 Monitoring Logs的這個功能還是很強大的,它可以瀏覽我們的日誌資訊,同時展開當前日誌,可以展示更多的資訊,比如 “operation_ParentId”,可以用來關聯來自同一個Http請求的所有的訊息的ID

 圈起來的兩組資料,是我相隔2分鐘後的請求日誌結果,我們可以看到它們對ID都有相同的操作。因為是對於我們在一分鐘內看到的是同一個Http請求。

 檢視手動拋的異常 Exception

 我們可以看出異常的時間,異常資訊,異常發生的位置,異常的型別,操作等等

 記錄的異常行號為37行,可以對比一下手動丟擲異常的行數

 同時,application insights還提供了一個視覺化的地方,Investigate=》Failures,從這裡可以看到

  1,正常,異常的請求。

  2,請求對應的響應碼。

  3,各個介面/頁面的異常情況。

  4,異常型別的分佈。

  5,依賴性資訊

 其實,我們可以從程式碼中可以看到,我們自己手動拋了一個異常,異常雖然用try catch 進行包裹,但是對於應用程式來說,這個異常還沒有進行正確的處理掉,比如返回資訊,返回狀態碼等等。

 切換到 Exceptions,可以看到這個異常的資訊了

 同時,我們可以得到一些額外的堆疊資訊,甚至可以看到異常的程式碼行,控制器方法,類等資訊

 

 回到上一個話題,Application Insights 預設情況下只監控 “Warnning”,“Error”,“Critical” 型別的資訊,我們可以通過appsetting 配置檔案設定Application Insights的監視級別

"ApplicationInsights": {
      "LogLevel": {
        "Default": "Debug",
        "Miccrosoft": "Error"
      }
    },

全部程式碼 牽扯隱私的部分,這裡使用 “0”進行替代

{
  "Logging": {
    "ApplicationInsights": {
      "LogLevel": {
        "Default": "Debug",
        "Miccrosoft": "Error"
      }
    },
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*",
  "ApplicationInsights": {
    "InstrumentationKey": "000000-0000-0000-0000-00000000000000"
  }
}

 繼續在Application Insights的logs檢視監測資料

 bingo,修改監測預設配置成功!

三,總結

  Application Insights 可以用來監控網站的可用性、效能和使用情況。快速診斷確定並診斷應用程式中的錯誤,而無需等待使用者報告這些錯誤。提供使用者資料的分析,使用者,會話,事件等Application Insights 提供伺服器端監視和客戶端/瀏覽器監視功能,它預設資料保留90天,同時還有支援實時流資料上報(延時低至1秒,不保留資料),增加自定義埋點(自定義的指標)等

  Application Insights 服務處理資料並將資料聚合到一個表單中,方便查詢和視覺化。

--------------我是分割線-----------------

作者:Allen 

版權:轉載請在文章明顯位置註明作者及出處。如發現錯誤,歡迎批評指正。