遥测
Visual Studio Code 收集遥测数据,用于帮助我们了解如何改进产品。例如,这些使用情况数据有助于调试诸如启动缓慢等问题,并确定新功能的优先级。我们还使用这些数据向一部分用户推出新功能,然后再将其普遍提供。
虽然我们感谢这些数据提供的见解,但我们也知道并非所有人都愿意发送使用情况数据,您可以按照禁用遥测报告中的说明禁用遥测。您也可以阅读我们的隐私声明以了解更多信息。
遥测数据类型
VS Code 和本页面在遥测方面引用了三种不同的数据类型。
崩溃报告 - 当 VS Code 崩溃时,崩溃报告会收集诊断信息并将其发送给 Microsoft,以帮助了解崩溃发生的原因以及将来需要进行哪些更改来防止崩溃。
错误遥测 - 错误遥测收集有关不会导致应用程序崩溃但意外的错误的信息。
使用情况数据 - 使用情况数据收集有关 VS Code 中功能的使用方式和性能的信息,这有助于我们优先改进产品。
禁用遥测报告
通过 telemetry.telemetryLevel 用户设置,您可以用一个设置来控制我们发送的不同类型的遥测数据。下表列出了telemetry.telemetryLevel 每个值发送的不同类型的数据。
| 崩溃报告 | 错误遥测 | 使用情况数据 | |
|---|---|---|---|
| 全部 | ✓ | ✓ | ✓ |
| error | ✓ | ✓ | - |
| 崩溃 | ✓ | - | - |
| off | - | - | - |
例如,如果您不想向 Microsoft 发送任何遥测数据,可以将 telemetry.telemetryLevel 用户设置更改为 off。这将停止 VS Code 发送所有遥测事件。请注意,在禁用该设置之前,可能已经收集并发送了遥测信息。

如果您使用 JSON 编辑器进行设置,请添加以下行
"telemetry.telemetryLevel": "off"
要参与 A/B 实验并提前访问新功能,您必须通过将 telemetry.telemetryLevel 设置为 all 来启用使用情况数据。
功能可用性和遥测
VS Code 使用 A/B 实验系统向一部分用户推出新功能,然后再将其普遍提供。这有助于我们在将新功能普遍推出之前,验证它在各种用户群中是否按预期工作。通过参与实验,您可以帮助我们提高 VS Code 的质量,并通过早期反馈帮助塑造产品的未来。
为了启用此实验系统,VS Code 会使用使用情况遥测数据来确定哪些用户应该接收新功能以及验证功能的使用情况。如果您通过将 telemetry.telemetryLevel 设置为 error、crash 或 off 来禁用使用情况数据遥测,我们将无法评估功能的使用情况,因此您将无法进行实验。结果是,新功能对您的发布可能会推迟,直到该功能普遍可用。
扩展和遥测
VS Code 允许您通过安装 Microsoft 和第三方扩展来为产品添加功能。这些扩展可能会收集自己的使用情况数据,并且不受 telemetry.telemetryLevel 设置的控制。请查阅特定扩展的文档,了解其遥测报告以及是否可以禁用。
扩展作者可以参考“面向扩展作者”部分,了解在其扩展中实现遥测最佳实践的指导。
遥测事件的输出通道
要查看 VS Code 在发送遥测事件时的情况,请从命令面板 () 中运行 Developer: Show Telemetry 命令。此命令会启用遥测事件的跟踪,并在输出面板 (⇧⌘U (Windows Ctrl+Shift+U, Linux Ctrl+K Ctrl+H)) 中打开 Telemetry 输出通道。随着遥测事件的发送,输出通道会显示事件详细信息。

在跟踪遥测事件时,这些事件还会记录到本地文件 telemetry.log 中,您可以使用 Developer: Open Log... 命令并从下拉菜单中选择 Telemetry 来查看它。

要禁用跟踪遥测事件,请重新加载 VS Code 窗口 (Developer: Reload Window 命令)。
查看所有遥测事件
如果您想查看 VS Code 可能发送的所有遥测事件,可以在 CLI 中使用 --telemetry 标志。这将生成一个 JSON 报告,然后您可以在 VS Code 中查看。这些报告是按构建生成的,并且不包含扩展遥测,除非扩展作者在其根构建目录中添加了 telemetry.json 文件。
例如,运行 code --telemetry > telemetry.json && code telemetry.json 将在当前工作目录中创建一个 telemetry.json 文件,然后 VS Code 将打开它。由于遥测报告的长度,您不能像这样通过管道传输输出:code --telemetry | code -。
下面的部分详细说明了用于对遥测进行分类的事件元数据,描述了其目的,并指出了任何特殊处理。
事件分类
classification 字段描述了数据类型。
SystemMetaData- VS Code 生成的非个人身份标识值。CallstackOrException- 程序执行失败引起的错误。这些内容包含已清除用户路径的堆栈跟踪。PublicNonPersonalData- 用户生成的数据,可公开访问,例如已发布的扩展 ID。EndUserPseudonymizedInformation- 用于标识唯一用户而不暴露其身份的哈希值。例如,一个哈希的 MAC 地址。
事件目的
purpose 字段描述了收集数据的原因。
PerformanceAndHealth- 确保 VS Code 产品和服务的健康和快速运行。FeatureInsight- 了解功能使用情况以及在哪里继续投入开发。BusinessInsight- 做出与 VS Code、Microsoft 和 GitHub 业务相关的决策。
事件终结点
endpoint 字段描述了数据发送到哪个数据处理程序。这通常适用于需要额外清理和安全措施以保护用户隐私的特殊数据。
GoogleAnalyticsId- 在我们的网站上用于 Google Analytics 和跟踪页面浏览量。这些数据比我们的常规数据处理方式更敏感。MacAddressHash- 用于标识 VS Code 用户。此哈希值在客户端哈希一次,然后在管道端再次哈希,以确保无法识别特定用户。在 VS Code for the Web 上,为此情况生成一个 UUID。none- 数据不需要任何特殊处理。
GDPR 和 VS Code
除了支持《通用数据保护条例》(GDPR) 外,VS Code 团队还非常重视隐私。这既是 Microsoft 作为一家公司的情况,也是 VS Code 团队内部的特定情况。
为了确保 GDPR 合规性,我们对 VS Code 进行了多项更新,其中包括:
- 在产品中为所有现有和新用户放置通知,使选择退出遥测收集更容易。
- 审查和分类我们发送的遥测数据(已记录在我们的 OSS 代码库中)。
- 确保我们为收集的任何数据(例如崩溃转储)制定了有效的数据保留策略。
总之,我们努力做了正确的事情,为所有用户服务,因为这些做法适用于所有地区,而不仅仅是欧洲。
我们预计人们会问到的一个问题是查看我们收集的数据。但是,我们没有可靠的方法来做到这一点,因为 VS Code 没有可以唯一标识用户的“登录”体验。我们会发送信息来帮助我们近似单个用户以进行诊断(这基于桌面上的网络适配器 NIC 的哈希值和 Web 上的随机分配的 UUID),但这不能保证是唯一的。例如,虚拟机 (VM) 经常轮换 NIC ID 或从池中分配。这种技术足以帮助我们解决问题,但不足以让我们“提供您的数据”。
随着我们对 GDPR 和用户期望的了解不断深入,我们预计我们的方法也会不断发展。我们非常感谢用户发送给我们的数据,因为它非常有价值,也因为这些数据让 VS Code 成为对每个人都更好的产品。同样,如果您担心隐私,我们提供禁用发送遥测的功能,如禁用遥测报告中所述。
您可以在 Visual Studio Family Data Subject Requests for the GDPR 中找到有关 Visual Studio 系列如何处理 GDPR 的更多信息。
管理在线服务
除了崩溃报告和遥测之外,VS Code 还使用在线服务用于各种其他目的,例如下载产品更新、查找、安装和更新扩展、设置同步或在设置编辑器中提供自然语言搜索。您可以选择开启/关闭使用这些服务的相关功能。
请注意,关闭这些功能并不会将 VS Code 置于离线模式。例如,如果您在扩展视图中搜索扩展,VS Code 仍然会搜索在线 VS Code Marketplace。这些设置可确保 VS Code 在未经您请求的情况下不会与在线服务进行通信。
从文件 > 首选项 > 设置,然后键入标签 @tag:usesOnlineServices。这将显示控制在线服务使用情况的所有设置,您可以单独开启或关闭它们。

注意:VS Code 扩展也可能使用在线服务,并且可能不提供配置这些在线服务使用情况的设置,或者它们可能不会注册其设置以便在搜索
@tag:usesOnlineServices时显示。请查阅特定扩展的文档,了解其在线服务的使用情况。
VS Code 使用到的非 Microsoft 在线服务
内置的VS Code 的 npm 支持扩展会向 https://registry.npmjs.org 和 https://registry.bower.io 发送请求。
内置的TypeScript 和 JavaScript 语言功能扩展会查询 https://registry.npmjs.org 上的 @types 域。
当您使用 Developer: Toggle Developer Tools 或 Developer: Open Webview Developer Tools 时,VS Code 可能会与 Google 服务器通信,以获取启动开发者工具所需的数据。
扩展建议
VS Code 根据您的文件类型、工作区和环境提供扩展推荐。文件类型推荐是预先计算的或动态的。工作区和环境推荐始终是预先计算的。
如果您想知道某个扩展为何被推荐,请打开该扩展的详细信息页面。您可以在页面标题中找到推荐原因。

预先计算的推荐
VS Code 收集有关哪些扩展用于哪些文件类型和哪些工作区/文件夹的遥测数据。通过计算每个文件夹的 Git 远程的哈希值来识别特定文件夹。
我们使用这些信息来预先计算匿名推荐。预先计算的推荐是说明在何种条件下应推荐某个扩展的指令。例如,当我们发现两个扩展 A 和 B 之间存在有趣的关联时,一个指令可能是:如果用户安装了扩展 A 但未安装扩展 B,则推荐扩展 B。
一些预先计算的推荐会随产品一起提供,而额外的预先计算的推荐则会在运行时从 Microsoft 在线服务获取。VS Code 会独立评估和执行预先计算的推荐,而无需将任何用户信息发送到任何在线服务。
动态推荐
当您打开 VS Code 没有预先计算推荐的文件类型时,它会向扩展市场查询声明支持该文件类型的扩展。如果查询返回您未安装的扩展,VS Code 将提供通知。
面向扩展作者
请阅读扩展指南遥测文档。
相关资源
- 集中管理遥测日志级别 - 了解如何为您的组织设置遥测日志级别。
- Visual Studio Code 常见问题解答 - 查阅常见问题解答以了解更多信息。
- 用户和工作区设置 - 阅读有关自定义 VS Code 的可用选项。