内置数据过滤器
在 Elastic Cloud Hosted 中,APM Server 接收来自 Elastic APM Agent 的数据并将其转换为 Elasticsearch 文档。而在 Elastic Cloud Serverless 中,实际上并没有运行 APM Server,而是由托管摄取服务 (managed intake service) 接收并转换数据。
内置数据过滤器允许您筛选或关闭以下类型数据的提取
| 数据类型 | 常见敏感数据 |
|---|---|
| HTTP 标头 | 密码、信用卡号、授权信息等。 |
| HTTP 主体 | 密码、信用卡号等。 |
| 个人数据 | 客户端 IP 地址和用户代理。 |
| 真实用户监控数据 | 访问的 URL、点击事件、用户浏览器错误、使用的资源等。 |
| 数据库语句 | 敏感的用户或业务信息 |
默认情况下,APM 代理会捕获 HTTP 请求和响应标头(包括 Cookie)。大多数 Elastic APM 代理都提供对 HTTP 标头字段进行净化(sanitize)的功能,包括 Cookie 和 application/x-www-form-urlencoded 数据(POST 表单字段)。查询字符串和捕获的请求主体(例如 application/json 数据)不会被净化。
默认的净化字段列表试图针对密码、信用卡号、授权等数据的常见字段名称,但可以根据您的数据进行自定义。这些敏感数据永远不会离开被插桩的服务。
此设置支持 中心化配置,这意味着无需重新部署服务即可更新净化字段列表
- Go:
ELASTIC_APM_SANITIZE_FIELD_NAMES - Java:
sanitize_field_names - .NET:
sanitizeFieldNames - Node.js:
sanitizeFieldNames - Python:
sanitize_field_names - Ruby:
sanitize_field_names
或者,您也可以完全禁用 HTTP 标头的捕获。此设置同样支持 中心化配置
- Go:
ELASTIC_APM_CAPTURE_HEADERS - Java:
capture_headers - .NET:
CaptureHeaders - Node.js:
captureHeaders - Python:
capture_headers - Ruby:
capture_headers
默认情况下不记录 HTTP 请求的主体。请求主体通常包含密码或信用卡号等敏感数据,因此在启用此功能时请小心操作。
此设置支持 中心化配置,这意味着无需重新部署服务即可更新净化字段列表
- Go:
ELASTIC_APM_CAPTURE_BODY - Java:
capture_body - .NET:
CaptureBody - Node.js:
captureBody - Python:
capture_body - Ruby:
capture_body
默认情况下,APM Server 或托管的提取服务会捕获与追踪事件相关的一些个人数据
client.ip:客户端的 IP 地址。通常派生自传入请求的 HTTP 标头。client.ip还与geoip处理器结合使用,以向追踪事件分配地理信息。要了解有关如何派生client.ip的更多信息,请参阅 派生传入请求的client.ip地址。user_agent:用户代理数据,包括客户端操作系统、设备名称、供应商和版本。
将 Capture personal data 设置为 false 可以关闭此类数据的捕获。
此设置仅防止 APM Server 或托管的提取服务捕获已经提取的个人数据。它不会阻止此类数据出现在适用的提取日志中。有关在提取时编辑数据的说明,请参阅 APM 代理过滤器。
保护用户数据非常重要。因此,可以通过 RUM 代理中的 disableInstrumentations 配置变量禁用单个 RUM 插桩。禁用的插桩不会产生任何跨度或事务。
| 禁用 | 配置值 |
|---|---|
| HTTP 请求 | fetch 和 xmlhttprequest |
| 页面加载指标(包括静态资源) | page-load |
| 浏览器上的 JavaScript 错误 | error |
| 用户点击事件,包括访问的 URL、鼠标点击和导航事件 | eventtarget |
| 单页应用路由更改 | history |
对于 SQL 数据库,APM 代理不会捕获预处理语句的参数。请注意,Elastic APM 目前不会尝试剥离常规语句的参数。不使用预处理语句会使您的代码容易受到 SQL 注入攻击,因此请务必使用预处理语句。
对于非 SQL 数据存储(例如 Elasticsearch 或 MongoDB),Elastic APM 会捕获查询的完整语句。对于插入或更新操作,不会存储完整的文档。要过滤或混淆非 SQL 数据库语句中的数据,或者完全移除该语句,可以设置提取节点管道。
某些代理提供额外的过滤和混淆选项
代理配置选项
- (Node.js) 移除由服务端进程引发的错误:使用 captureExceptions 进行禁用。
- (Java) 从事务中移除进程参数:默认通过
include_process_args禁用。