Application Insights 中的資料收集、保留和儲存
當您在應用程式中安裝 Application Insights SDK 時,它會將應用程式的相關遙測傳送至 雲端。 身為負責任的開發人員,您會想要確切得知所傳送的資料為何、資料的後續情況,以及如何控制資料。 特別是,是否可能傳送敏感資料?資料儲存於何處?其安全性為何?
首先提供簡短的答案:
- 「現成可用」的標準遙測模組不太可能將敏感資料傳送至服務。 遙測會考量負載、效能和使用度量、例外狀況報告和其他診斷資料。 診斷報告中顯示的主要使用者資料是 URL。 但您的應用程式在任何情況下,都不應該將敏感性資料以純文字放在 URL 中。
- 您可以撰寫會傳送更多自訂遙測的程式碼,以利診斷與監視使用情形。 (此擴充性是 Application Insights 的絕佳功能之一) 其可能會不小心撰寫此程式碼,使其包含個人和其他敏感性資料。 如果您的應用程式會使用這類資料,您應對您撰寫的程式碼採用完整的檢閱程序。
- 當您開發及測試應用程式時,可以輕易地檢查由 SDK 傳送的內容。 資料會出現在 IDE 和瀏覽器的偵錯輸出視窗中。
- 建立新的 Application Insights 時,您可以選取位置。 如需 Application Insights 各區域供應情況的詳細資訊,請參閱依區域提供的產品。
- 檢閱收集的資料,因為這可能包括在某些情況下允許而其他情況下不允許的資料。 此情況的好例子是裝置名稱。 來自伺服器的裝置名稱不會影響隱私權,而且很有用。 來自手機或膝上型電腦的裝置名稱可能會影響隱私權,而且不太有用。 主要針對伺服器開發的 SDK 預設會收集裝置名稱。 在一般事件和例外狀況中,可能都必須覆寫此功能。
本文的其餘部分將更完整地討論這幾點。 本文是獨立主題,因此您可以與非直屬小組成員的同事分享。
什麼是 Application Insights?
Application Insights 是 Microsoft 所提供的一項服務,可協助您改善即時應用程式的效能和可用性。 它會在您的應用程式執行時全程加以監視,包括測試期間,以及您加以發佈或部署之後。 Application Insights 會建立圖表和資料表來為您顯示資訊計量。 例如,您可以看到一天中的哪些時間有最多使用者、應用程式的回應性如何,以及其相依的任何外部服務為其提供服務的效能。 如果有失敗或效能問題,您可以搜尋遙測資料來診斷原因。 如果應用程式的可用性和效能有任何變更,此服務會傳送電子郵件給您。
若要取得這項功能,您必須在應用程式中安裝 Application Insights SDK,這會成為其程式碼的一部分。 當您的應用程式執行時,SDK 會監視其作業,並將遙測傳送至 Application Insights Log Analytics 工作區,這是 Microsoft Azure所裝載的雲端服務。 Application Insights 也適用於任何應用程式,而不只是 Azure 中裝載的應用程式。
Application Insights 會儲存並分析遙測。 若要查看分析或搜尋已儲存的遙測,您可以登入您的 Azure 帳戶,並開啟您的 Application Insights 資源。 您也可以與小組的其他成員或指定的 Azure 訂閱者共用資料的存取權。
您可以從 Application Insights 匯出資料,例如,匯出至資料庫或外部工具。 您必須為每項工具提供您從服務取得的特殊金鑰。 如有必要,可以撤銷此金鑰。
Application Insights SDK 適用於各種應用程式類型:
- 裝載於您自己的 Java EE 或 ASP.NET 伺服器或是 Azure 中的 Web 服務
- Web 用戶端,也就是在網頁中執行的程式碼
- 傳統型應用程式和服務
- Windows Phone、iOS 和 Android 等裝置應用程式
它們都會將遙測傳送至相同的服務。
它會收集哪些資料?
來源資料共有三種:
SDK - 可在開發或執行階段與您的應用程式整合。 不同的應用程式類型有不同的 SDK。 此外還有網頁 SDK,會連同頁面載入至使用者的瀏覽器中。
- 每個 SDK 各有多種模組,可使用不同的技術來收集不同類型的遙測。
- 如果您在開發環境中安裝 SDK,則您可以使用其 API,在標準模組以外傳送您自己的遙測。 此自訂遙測可包含您想要傳送的任何資料。
在某些網頁伺服器中,也有與應用程式一起執行,並傳送關於 CPU、記憶體和網路佔用量之遙測的代理程式。 例如,Azure VM、Docker 主機和 Java 應用程式伺服器 都可能有這類代理程式。
可用性概觀 是 Microsoft 執行的程式,會定期將要求傳送至 Web 應用程式。 結果會傳送至 Application Insights。
收集的資料類型為何?
主要類別如下:
-
網頁伺服器遙測:HTTP 要求。 URI、處理要求所花費的時間、回應碼和用戶端 IP 位址。
Session id
. - 網頁:頁面、使用者和工作階段計數。 頁面載入時間。 例外狀況。 Ajax 呼叫。
- 效能計數器:記憶體、CPU、IO 和網路佔用量。
- 用戶端和伺服器內容:OS、地區設定、裝置類型、瀏覽器和螢幕解析度。
-
例外狀況和當機:堆疊傾印、
build id
和 CPU 類型。 - 相依性:對外部服務的呼叫,例如 REST、SQL 和 AJAX。 URI 或連接字串、持續時間、成功,以及命令。
- 可用性測試:測試的持續時間和步驟,以及回應。
- 追蹤記錄和自訂遙測:任何您以程式碼撰寫到記錄或遙測中的項目。
如需詳細資訊,請參閱 Application Insights 所傳送的資料一節。
如何確認收集到什麼?
如果您使用 Visual Studio 開發應用程式,請在偵錯模式 (F5) 中執行應用程式。 遙測會出現在 [輸出] 視窗中。 在這裡,您可以將其複製並格式化為 JSON,以便進行檢查。
在 [診斷] 視窗中還有更容易閱讀的檢視。
針對網頁,請開啟瀏覽器的偵錯視窗。 選取 F12 鍵,然後開啟 [網路] 索引標籤。
是否可以撰寫程式碼來篩選遙測,然後才傳送出去?
您必須撰寫遙測處理器外掛程式。
資料保留多久?
未經處理資料點 (亦即您可以在「分析」中查詢並在「搜尋」中檢查的項目) 最多可保留 730 天。 您可以選取保留持續時間:30、60、90、120、180、270、365、550 或 730 天。 如果您需要將資料保留超過 730 天,您可以使用 診斷設定。
保留超過 90 天的資料會產生額外費用。 如需 Application Insights 定價的詳細資訊,請參閱 Azure 監視器定價頁面。
彙總的資料 (也就是您在計量瀏覽器中看到的計數、平均和其他統計資料) 在 1 分鐘的資料粒度中保存 90 天。
偵錯快照集會儲存 15 天。 此保留原則會就個別的應用程式而設定。 如果您需要增加此值,您可以在 Azure 入口網站中建立支援案例,以提出增加的要求。
誰可以存取資料?
您和您的小組成員 (如果您有組織帳戶) 可以看到資料。
它可以由您和您的小組成員匯出,也可以複製到其他位置,並傳遞給其他人員。
Microsoft 如何處理我的應用程式傳送至 Application Insights 的資訊?
Microsoft 只會使用這項資料,以將服務提供給您。
資料存放在哪裡?
建立新的 Application Insights 時,您可以選取位置。 如需 Application Insights 供應情況的詳細資訊,請參閱依區域提供的產品。
我的資料有多安全?
Application Insights 是一項 Azure 服務。 如需安全性原則的相關說明,請參閱 Azure 安全性、隱私權及法規遵循白皮書。
資料會儲存在 Microsoft Azure 伺服器中。 如果是 Azure 入口網站中的帳戶,帳戶限制如 Azure 安全性、隱私權和法規遵循文件中所述。
Microsoft 人員對您的資料存取會受到限制。 我們只有在獲得您的許可及為了支援您使用 Application Insights 而有必要時,才會存取您的資料。
跨所有客戶應用程式的彙總資料 (例如資料速率和平均追蹤大小) 會用於改善 Application Insights。
其他人的遙測是否會干擾我的 Application Insights 資料?
可能會有人使用檢測金鑰將更多遙測傳送至您的帳戶。 您可以在網頁的程式碼中找到此金鑰。 有足夠的額外資料,您的計量將不會正確地代表您應用程式的效能和使用方式。
如果您與其他專案共用程式碼,請務必移除您的檢測金鑰。
資料是否會加密?
所有資料在資料中心之間移動時會予以待用加密。
將資料從我的應用程式傳輸到 Application Insights 伺服器時是否進行加密?
是。 我們使用 HTTPS,將資料從幾乎所有 SDK (包括網頁伺服器、裝置和 HTTPS 網頁) 傳送至入口網站。
SDK 是否會建立暫存本機儲存體?
是。 如果無法連線到端點,特定遙測通道會將資料保存在本機。 下列段落描述哪些架構和遙測通道會受到影響:
- 使用本機儲存體的遙測通道會在 TEMP 或 APPDATA 目錄中建立暫存檔案,而這些目錄僅限執行應用程式的特定帳戶使用。 當端點暫時無法使用時,或如果您已達到節流限制,就可能發生此狀況。 此問題解決後,遙測通道就會繼續傳送所有新的和保存的資料。
- 此保存的資料不會在本機加密。 如果擔心發生此問題,請檢閱資料並限制私人資料的收集。 如需詳細資訊,請參閱匯出並刪除私人資料。
- 如果客戶基於特定安全需求而必須設定此目錄,可以就個別架構進行設定。 請確定執行應用程式的處理序具有此目錄的寫入權限。 此外,請確定此目錄受到保護,以避免遙測遭到非預期的使用者讀取。
Java
系統會使用 C:\Users\username\AppData\Local\Temp
資料夾來保存資料。 此位置不可從 config 目錄設定,且存取此資料夾的權限僅限定於具有必要認證的特定使用者。 如需詳細資訊,請參閱實作。
.NET
根據預設,ServerTelemetryChannel
會使用目前使用者的本機應用程式資料夾 %localAppData%\Microsoft\ApplicationInsights
或暫存資料夾 %TMP%
。 如需詳細資訊,請參閱實作。
透過組態檔:
<TelemetryChannel Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.ServerTelemetryChannel, Microsoft.AI.ServerTelemetryChannel">
<StorageFolder>D:\NewTestFolder</StorageFolder>
</TelemetryChannel>
透過程式碼:
從設定檔中移除
ServerTelemetryChannel
。將下列程式碼片段新增至您的設定:
ServerTelemetryChannel channel = new ServerTelemetryChannel(); channel.StorageFolder = @"D:\NewTestFolder"; channel.Initialize(TelemetryConfiguration.Active); TelemetryConfiguration.Active.TelemetryChannel = channel;
NetCore
根據預設,ServerTelemetryChannel
會使用目前使用者的本機應用程式資料夾 %localAppData%\Microsoft\ApplicationInsights
或暫存資料夾 %TMP%
。 如需詳細資訊,請參閱實作。
在 Linux 環境中將會停用本機儲存體,除非另行指定儲存體資料夾。
注意
使用 2.15.0-beta3 版和更新版本時,現在會為 Linux、Mac 和 Windows 自動建立本機儲存體。 針對非 Windows 系統,SDK 會根據下列邏輯自動建立本機儲存體資料夾:
-
${TMPDIR}
:如果已設定${TMPDIR}
環境變數,則會使用此位置。 -
/var/tmp
:如果前一個位置不存在,我們會嘗試使用/var/tmp
。 -
/tmp
:如果前兩個位置都不存在,我們會嘗試使用tmp
。 - 如果這些位置都不存在,就不會建立本機儲存體,而仍需要手動設定。
如需完整的實作詳細資料,請參閱 ServerTelemetryChannel 會在非 Windows 環境中出現暫時性錯誤時,將遙測資料儲存在預設資料夾中 (英文)。
下列程式碼片段說明如何在 Startup.cs
類別的 ConfigureServices()
方法中設定 ServerTelemetryChannel.StorageFolder
:
services.AddSingleton(typeof(ITelemetryChannel), new ServerTelemetryChannel () {StorageFolder = "/tmp/myfolder"});
如需詳細資訊,請參閱 AspNetCore 自訂設定。
Node.js
預設會使用 %TEMP%/appInsights-node{INSTRUMENTATION KEY}
來保存資料。 存取此資料夾的權限僅限定於目前的使用者和系統管理員。 如需詳細資訊,請參閱實作。
您可以在 Sender.ts 中變更靜態變數 Sender.TEMPDIR_PREFIX
的執行階段值,以覆寫資料夾前置詞 appInsights-node
。
JavaScript (瀏覽器)
HTML5 工作階段儲存體是用來保存資料。 使用兩個不同的緩衝區:AI_buffer
和 AI_sent_buffer
。 批次處理並等候傳送的遙測會儲存在 AI_buffer
中。 剛傳送的遙測會放在 AI_sent_buffer
中,直到擷取伺服器回應成功接收為止。
成功收到遙測時,會從所有緩衝區中移除遙測。 發生暫時性失敗時 (例如使用者失去網路連線),遙測會維持在 AI_buffer
,直到成功接收或擷取伺服器回應遙測無效 (例如不正確的結構描述或太舊)。
您可以將 enableSessionStorageBuffer
設定為 false
來停用遙測緩衝區。 關閉工作階段儲存體時,會改為使用本機陣列作為永續性儲存體。 由於 JavaScript SDK 會在用戶端裝置上執行,因此使用者可以透過瀏覽器的開發人員工具存取此儲存體位置。
OpenCensus Python
根據預設,OpenCensus Python SDK 會使用目前的使用者資料夾 %username%/.opencensus/.azure/
。 存取此資料夾的權限僅限定於目前的使用者和系統管理員。 如需詳細資訊,請參閱實作。 具有保存資料的資料夾會以產生遙測的 Python 檔案命名。
您可以在您所正在使用匯出工具的建構函式中傳入 storage_path
參數,以變更儲存體檔案的位置。
AzureLogHandler(
connection_string='InstrumentationKey=00000000-0000-0000-0000-000000000000',
storage_path='<your-path-here>',
)
如何使用 TLS 1.2 將資料傳送至 Application Insights?
為了確保傳送至 Application Insights 端點時的資料安全性,我們強烈建議客戶至少使用傳輸層安全性 (TLS) 1.2 來設定他們的應用程式。 我們已發現較舊的 TLS/安全通訊端層 (SSL) 版本容易遭到攻擊。 雖然這些版本目前仍允許回溯相容性,但「不建議」使用。 產業正在快速轉向放棄對這些舊版通訊協定的支援。
PCI 安全標準委員會已設定 2018 年 6 月 30 日作為最後期限,在此之後將停用舊版 TLS/SSL,並升級至更安全的通訊協定。 當 Azure 捨棄舊版的支援後,如果您的應用程式或用戶端無法透過 TLS 1.2 (至少) 進行通訊,您就無法將資料傳送至 Application Insights。 用來測試及驗證您應用程式 TLS 支援的方法,會因為作業系統或平台及應用程式所用的語言或架構而有所差異。
除非有必要,否則我們不建議將應用程式明確地設定為只使用 TLS 1.2。 此設定可能會中斷平台層級的安全性功能,而導致您無法自動偵測是否有更新且更安全的通訊協定 (例如 TLS 1.3),並在推出時加以運用。 我們建議您對應用程式的程式碼執行全面稽核,以檢查特定 TLS/SSL 版本的硬式編碼。
特定平台/語言的指引
平台/語言 | 支援 | 詳細資訊 |
---|---|---|
Azure App Service | 支援,可能需要設定。 | 已在 2018 年 4 月宣告支援。 請參閱公告以了解設定的詳細資訊。 |
Azure 函數應用程式 | 支援,可能需要設定。 | 已在 2018 年 4 月宣告支援。 請參閱公告以了解設定的詳細資訊。 |
.NET | 支援,長期支援 (LTS)。 | 如需詳細的設定資訊,請參閱這些指示。 |
Application Insights 代理程式 | 支援,需要設定。 | Application Insights 代理程式依賴OS Configuration.NET + 組態來支援 TLS 1.2。 |
Node.js | 支援,可能需要對 v10.5.0 進行設定。 | 使用官方 Node.js TLS/SSL 文件以了解任何應用程式專屬的設定。 |
Java | 支援,JDK 6 更新 121 和 JDK 7 中已新增 TLS 1.2 的 JDK 支援。 | JDK 8 會使用預設的 TLS 1.2。 |
Linux | Linux 發行版本通常會依賴 OpenSSL 來取得 TLS 1.2 支援。 | 請檢查 OpenSSL 變更記錄來確認支援的 OpenSSL 版本。 |
Windows 8.0 - 10 | 支援,而且已預設為啟用。 | 請確認您仍在使用預設設定。 |
Windows Server 2012 - 2016 | 支援,而且已預設為啟用。 | 請確認您仍在使用預設設定。 |
Windows 7 SP1 和 Windows Server 2008 R2 SP1 | 支援,但預設為不啟用。 | 請參閱傳輸層安全性 (TLS) 登錄設定頁面,了解詳細的啟用方式。 |
Windows Server 2008 SP2 | TLS 1.2 支援需要更新。 | 請在 Windows Server 2008 SP2 中參閱新增 TLS 1.2 支援的更新。 |
Windows Vista | 不支援。 | N/A |
請檢查您 Linux 發行版本所執行的 OpenSSL 版本
若要檢查您已安裝的 OpenSSL 是哪個版本,請開啟終端機並執行:
openssl version -a
在 Linux 上執行用於測試的 TLS 1.2 交易
若要執行初步測試,以查看您的 Linux 系統是否可透過 TLS 1.2 通訊,請開啟終端並執行:
openssl s_client -connect bing.com:443 -tls1_2
儲存在 Application Insights 中的個人資料
如需此問題的深入討論,請參閱管理 Log Analytics 和 Application Insights 中的個人資料。
我的使用者是否可以關閉 Application Insights?
無法直接進行。 我們不提供您的使用者可以操作來關閉 Application Insights 的參數。
您可以在應用程式中實作這類功能。 所有 SDK 都包括關閉遙測收集的 API 設定。
Application Insights 所傳送的資料
不同的平台會有不同的 SDK,而且有數個可安裝的元件。 如需詳細資訊,請參閱 Application Insights 概觀。 每個元件都會傳送不同的資料。
不同情況下所傳送資料的類別
您的動作 | 收集的資料類別 (請參閱下一個資料表) |
---|---|
將 Application Insights SDK 新增至 .NET Web 專案 | ServerContext 推斷 效能計數器 Requests 例外狀況 工作階段 users |
在 IIS 上安裝 Application Insights 代理程式 | 相依性 ServerContext 推斷 效能計數器 |
將 Application Insights SDK 新增至 Java Web 應用程式 | ServerContext 推斷 要求 工作階段 users |
將 JavaScript SDK 新增至網頁 | ClientContext 推斷 頁面 ClientPerf Ajax |
定義預設屬性 | 屬性 |
呼叫 TrackMetric | 數字值 屬性 |
呼叫 Track* | 事件名稱 屬性 |
呼叫 TrackException |
例外狀況 堆疊傾印 屬性 |
SDK 無法收集資料。 例如: - 無法存取效能計數器 - 遙測初始設定式中發生例外狀況 |
SDK 診斷 |
如需適用於其他平台的 SDK,請參閱其文件。
所收集資料的類別
收集的資料類別 | 包含 (不是詳盡的清單) |
---|---|
屬性 | 任何資料 - 取決於您的程式碼 |
DeviceContext |
Id 、識別碼、IP、地區設定、裝置型號、網路、網路類型、OEM 名稱、螢幕解析度、角色執行個體、角色名稱、裝置類型 |
ClientContext | 作業系統、地區設定、語言、網路、視窗解析度 |
工作階段 | session id |
ServerContext | 電腦名稱、地區設定、作業系統、裝置、使用者工作階段、使用者內容、作業 |
推斷 | IP 位址中的地理位置、時間戳記、OS、瀏覽器 |
計量 | 計量名稱和值 |
事件 | 事件名稱和值 |
PageViews | URL 和頁面名稱或螢幕名稱 |
用戶端效能 | URL/頁面名稱、瀏覽器載入時間 |
Ajax | 從網頁向伺服器發出的 HTTP 呼叫 |
Requests | URL、持續時間、回應碼 |
相依性 | 輸入 (SQL、HTTP、...) 、連接字串或 URI、同步/非同步、持續時間、成功、SQL 語句與 Application Insights Agent () |
例外狀況 | 類型、訊息、呼叫堆疊、來源檔案、行號、thread id |
損毀 |
Process id 、parent process id 、crash thread id ;應用程式修補程式、id 、組建;例外狀況類型、位址、原因;模糊符號和暫存器、二進位開始和結束位址、二進位檔名稱和路徑、CPU 類型 |
追蹤 | 訊息 和嚴重性層級 |
效能計數器 | 處理器時間、可用記憶體、要求率、例外狀況率、處理序私用位元組、IO 率、要求持續期間、要求佇列長度 |
可用性 | Web 測試回應程式碼、每個測試步驟的持續時間、測試名稱、時間戳記、成功、回應時間、測試位置 |
SDK 診斷 | 追蹤訊息或例外狀況 |
您可以編輯 ApplicationInsights.config 來關閉某些資料。
注意
用戶端 IP 會用來推斷地理位置,但預設不會再儲存 IP 資料,而且所有的零會寫入相關聯的欄位。 若要深入了解個人資料處理,請參閱管理 Log Analytics 和 Application Insights 中的個人資料。 如果您需要儲存 IP 位址資料,地理位置和 IP 位址處理會逐步引導您完成選項。
我可以在收集資料之後修改或更新資料嗎?
否。 資料是唯讀的,而且只能透過清除功能刪除。 若要深入了解,請參閱儲存在 Log Analytics 和 Application Insights 中的個人資料指引。
常見問題集
本節提供常見問題的答案。
當伺服器或裝置與 Azure 連線中斷時,Application Insight 遙測會發生什麼事?
我們的所有 SDK,包括 Web SDK,包括 可靠的傳輸 或 強固傳輸。 當伺服器或裝置失去與 Azure 的連線時,遙測就會本機儲存於檔案系統上 \(部分機器翻譯\) (伺服器 SDK) 或 HTML5 工作階段儲存體 (Web SDK) 中。 SDK 會定期重試以傳送此遙測,直到我們的擷取服務將記錄視為「過時」 (48 小時,計量) 30 分鐘。 已卸載過時的遙測。 在某些情況下,例如本機儲存體已滿時,將不會重試。
在遙測中傳送個人資料嗎?
如果您的程式碼傳送這類的資料,您可以傳送個人資料。 如果堆疊追蹤中的變數包含個人資料,也可能發生這種情況。 您的開發小組應該進行風險評估,以確保正確處理個人資料。 深入瞭解 資料保留和隱私權。
查詢地理位置屬性之後,用戶端網址的所有八位一律會設定為 0。
根據預設, Application Insights JavaScript SDK 不會在其自動完成中包含任何個人資料。 不過,SDK (可能會挑選應用程式中所使用的某些個人資料,例如,XHR URL 查詢參數中 window.title
的完整名稱或帳戶識別碼) 。 針對自訂的個人資料遮罩,新增遙測初始化運算式。