你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

从 Application Insights 导出遥测数据

想要将遥测数据保留超过标准保留期限? 或者要以某种专业方式处理这些数据? 连续导出适用于此目的。 可以使用 JSON 格式将 Application Insights 门户中显示的事件导出到 Microsoft Azure 中的存储。 可以从该存储中下载这些数据,并编写所需的代码来处理这些数据。

重要

在设置连续导出之前,请考虑一些备选方法:

连续导出将数据复制到存储后(数据可在其中保存任意长的时间),在正常保留期内,这些数据仍可在 Application Insights 中可用。

支持的区域

以下区域支持连续导出:

  • Southeast Asia
  • 加拿大中部
  • 印度中部
  • 北欧
  • 英国南部
  • 澳大利亚东部
  • Japan East
  • 韩国中部
  • 法国中部
  • 东亚
  • 美国西部
  • 美国中部
  • 美国东部 2
  • 美国中南部
  • 美国西部 2
  • 南非北部
  • 美国中北部
  • Brazil South
  • 瑞士北部
  • Australia Southeast
  • 英国西部
  • 德国中西部
  • 瑞士西部
  • 澳大利亚中部 2
  • 阿联酋中部
  • 巴西东南部
  • 澳大利亚中部
  • 阿拉伯联合酋长国北部
  • 挪威东部
  • 日本西部

注意

如果导出是在 2021 年 2 月 23 日之前配置的,连续导出将继续适用于美国东部和欧洲西部的应用程序。 无论应用程序何时创建,都不能在美国东部或欧洲西部的任何应用程序上配置新的连续导出规则。

连续导出高级存储配置

连续导出不支持以下 Azure 存储功能/配置:

创建连续导出

注意

应用程序每天导出的数据不能超过 3TB。 如果每天导出的数据超过 3TB,则导出将被禁用。 若要无限制地导出,请使用基于诊断设置的导出

  1. 在应用左侧配置下的 Application Insights 资源中,打开“连续导出”,并选择“添加”:

  2. 选择要导出的遥测数据类型。

  3. 创建或选择要用于存储数据的 Azure 存储帐户。 有关存储定价选项的详细信息,请访问官方定价页面

    选择“添加”、“导出目标”、“存储帐户”,并创建新存储或选择现有存储。

    警告

    默认情况下,存储位置将设置为与 Application Insights 资源相同的地理区域。 如果存储在不同的区域中,则可能会产生传输费用。

  4. 在存储中创建或选择一个容器。

注意

创建导出后,新引入的数据将开始流向 Azure Blob 存储。 连续导出只传输在启用连续导出后创建/引入的新遥测数据。 启用连续导出之前存在的任何数据都不会被导出,且不支持使用连续导出以追溯性方式导出先前创建的数据。

数据出现在存储中之前可能有大约一小时的延迟。

在第一次导出完成后,你将在 Azure Blob 存储容器中找到以下结构:(此结构因你收集的数据而异。)

名称 说明
可用性 报告可用性 Web 测试
事件 TrackEvent() 生成的自定义事件。
异常 报告服务器和浏览器中发生的异常
消息 TrackTrace日志记录适配器发送。
指标 由指标 API 调用生成。
PerformanceCounters Application Insights 收集到的性能计数器。
请求 TrackRequest 发送。 标准模块使用请求来报告在服务器上测量的服务器响应时间。

编辑连续导出

选择“连续导出”,然后选择要编辑的存储帐户。

停止连续导出

若要停止导出,请选择“禁用”。 再次选择“启用”时,将使用新数据重新启动导出。 无法获取在禁用导出时传入门户的数据。

要永久停止导出,请将其删除。 这样做不会将数据从存储中删除。

无法添加或更改导出?

  • 若要添加或更改导出,你需要具有“所有者”、“参与者”或“Application Insights 参与者”访问权限。 了解角色

获取哪些事件?

导出的数据是我们从你的应用程序接收的原始遥测数据,其中添加了来自客户端 IP 地址的位置数据。

采样丢弃的数据不会包含在导出的数据中。

不包含其他计算的指标。 例如,不会导出平均 CPU 使用率,但会导出用来计算平均值的原始遥测数据。

该数据还包含已设置的任何可用性 Web 测试的结果。

注意

采样。 如果应用程序发送大量数据,采样功能可能会运行,并只发送一小部分生成的遥测数据。 了解有关采样的详细信息。

检查数据

可以直接在门户中检查存储。 选择最左侧菜单中的“主页”,在顶部显示“Azure 服务”处选择“存储帐户”,选择存储帐户名称,在“概述”页的服务下选择“Blob”,最后选择容器名称。

若要在 Visual Studio 中检查 Azure 存储,请依次打开“视图”、“Cloud Explorer”。 (如果没有此菜单命令,则需要安装 Azure SDK:打开“新建项目”对话框,展开 Visual C#/云/并选择“用于 .NET 的 Microsoft Azure SDK”。)

打开 Blob 存储后,会看到包含一组 Blob 文件的容器。 每个文件的 URI 派生自 Application Insights 的资源名称、其检测密钥、遥测类型/日期/时间。 (资源名称为全小写形式,检测密钥不包含连字符。)

使用适当的工具检查 Blob 存储

注意

对检测密钥引入的支持将于 2025 年 3 月 31 日结束。 检测密钥引入功能将会继续工作,但我们将不再为该功能提供更新或支持。 转换为连接字符串,以利用新功能

日期和时间采用 UTC,表示在存储中存放遥测数据的时间 - 而不是生成遥测数据的时间。 因此,如果编写代码来下载数据,数据的日期和时间可能会线性移动。

路径格式如下:

$"{applicationName}_{instrumentationKey}/{type}/{blobDeliveryTimeUtc:yyyy-MM-dd}/{ blobDeliveryTimeUtc:HH}/{blobId}_{blobCreationTimeUtc:yyyyMMdd_HHmmss}.blob"

其中

  • blobCreationTimeUtc 是在内部暂存存储中创建 Blob 的时间
  • blobDeliveryTimeUtc 是将 Blob 复制到导出目标存储的时间

数据格式

  • 每个 Blob 是一个文本文件,其中包含多个以“\n”分隔的行。 它包含大约半分钟时间内处理的遥测数据。

  • 每行代表遥测数据点,例如请求或页面视图。

  • 每行是未设置格式的 JSON 文档。 如果要查看行,请在 Visual Studio 中打开 blob,然后选择“编辑”>“高级”>“设置文件格式” :

    使用适当的工具查看遥测数据

持续时间以刻度为单位,10000 刻度 = 1 毫秒。 例如,这些值显示从浏览器发送请求用了 1 毫秒时间,接收它用了 3 毫秒,在浏览器中处理页面用了 1.8 秒:

"sendRequest": {"value": 10000.0},
"receiveRequest": {"value": 30000.0},
"clientProcess": {"value": 17970000.0}

属性类型和值的详细数据模型参考。

处理数据

如果数据规模不大,可以编写一些代码来提取数据,在电子表格中阅读这些数据,或执行其他操作。 例如:

private IEnumerable<T> DeserializeMany<T>(string folderName)
{
   var files = Directory.EnumerateFiles(folderName, "*.blob", SearchOption.AllDirectories);
   foreach (var file in files)
   {
      using (var fileReader = File.OpenText(file))
      {
         string fileContent = fileReader.ReadToEnd();
         IEnumerable<string> entities = fileContent.Split('\n').Where(s => !string.IsNullOrWhiteSpace(s));
         foreach (var entity in entities)
         {
            yield return JsonConvert.DeserializeObject<T>(entity);
         }
      }
   }
}

如需更详细的代码示例,请参阅使用辅助角色

删除旧数据

你需要负责管理存储容量,以及在必要时删除旧数据。

如果重新生成存储密钥...

如果更改存储密钥,连续导出将停止运行。 Azure 帐户中会显示通知。

打开“连续导出”选项卡并编辑导出。 编辑“导出目标”,只保留选定的同一存储。 选择“确定”以确认。

连续导出将重新开始。

导出示例

如果数据规模较大,可以考虑 HDInsight - 云中的 Hadoop 群集。 HDInsight 提供各种用于管理和分析大数据的技术。 可以使用它来处理从 Application Insights 导出的数据。

问题解答

  • 我想要一次性下载某个图表。

    没问题,可以这样做。 在选项卡的顶部,选择“导出数据”。

  • 我设置了导出,但存储中没有数据。

    自设置导出之后,Application Insights 是否从应用程序收到了任何遥测数据? 只会收到新数据。

  • 尝试设置导出时出现拒绝访问错误

    如果帐户由组织拥有,则你必须是所有者或参与者组的成员。

  • 是否可以直接导出到我自己的本地存储?

    很抱歉,不可以。 我们的导出引擎目前仅适用于 Azure 存储。

  • 放置在存储中的数据量是否有任何限制?

    不是。 我们将持续推送数据,直到删除了导出。 如果达到 Blob 存储的外在限制,我们将停止推送,但那个限制极大。 可以自行控制使用的存储量。

  • 存储中应会出现多少个 Blob?

    • 对于选择要导出的每种数据类型,将每隔分钟创建一个新 Blob(如果有可用的数据)。
    • 此外,对于高流量的应用程序,将分配额外的分区单元。 在此情况下,每个单元会每分钟创建一个 Blob。
  • 我为存储重新生成了密钥或更改了容器的名称,但现在导出不能正常进行。

    请编辑导出并打开导出目标选项卡。像以前一样保留选择相同的存储,并选择“确定”以确认。 导出将重新开始。 如果更改是在最近几天内做出的,则不会丢失数据。

  • 是否可以暂停导出?

    是的。 选择“禁用”。

代码示例

基于诊断设置的导出

首选诊断设置导出,因为它提供额外功能。

  • 具有虚拟网络、防火墙和专用链接的 Azure 存储帐户
  • 导出到事件中心

诊断设置导出在以下方面与连续导出存在更多的不同:

  • 更新的架构。
  • 遥测数据在到达时发送,而不是以批量上传的方式发送。

重要

由于对目标(例如存储帐户)的调用增加,可能会产生额外的费用。

若要迁移到诊断设置导出,请执行以下操作:

  1. 禁用当前连续导出。
  2. 将应用程序迁移到基于工作区
  3. 启用诊断设置导出。 从 Application Insights 资源中选择“诊断设置”>“添加诊断设置”。

注意

如果要在 Log Analytics 工作区中存储诊断日志,需要考虑两点以避免 Application Insights 中出现重复数据:

  • 该目标不能与 Application Insights 资源所基于的 Log Analytics 工作区相同。
  • Application Insights 用户不能同时访问两个工作区。 这可以通过以下步骤来实现:将 Log Analytics 访问控制模式设置为“需要工作区权限”并通过 Azure 基于角色的访问控制(Azure RBAC) 确保用户只能访问 Application Insights 资源所基于的 Log Analytics 工作区。

这些步骤是必要的,因为 Application Insights 跨 Application Insight 资源(包括 Log Analytics 工作区)来访问遥测数据,以提供完整的端到端事务操作和准确的应用程序映射。 由于诊断日志使用相同的表名,因此如果用户有权访问包含相同数据的多个资源,则可能会显示重复的遥测数据。