Azure Monitor(一)Application Insights

一,引言

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

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

 

 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,經過它能夠監控網站的可用性、性能和使用狀況。快速診斷肯定並診斷應用程序中的錯誤,而無需等待用戶報告這些錯誤以及提供用戶數據的分析,用戶,會話,事件等,app

二,正文

 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 服務處理數據並將數據聚合到一個表單中,方便查詢和可視化。

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

github:https://github.com/yunqian44/Azure.Monitor.git

做者:Allen 

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

相關文章
相關標籤/搜索