内置数据过滤器
Elastic Stack Serverless
在 Elastic Cloud Hosted 中,APM Server 接收来自 Elastic APM 代理的数据,并将其转换为 Elasticsearch 文档。在 Elastic Cloud Serverless 中,实际上没有 APM Server 运行,而是 托管接收服务 接收和转换数据。
内置数据过滤器允许您过滤或关闭以下类型数据的摄取
数据类型 | 常见的敏感数据 |
---|---|
HTTP 标头 | 密码、信用卡号、授权等。 |
HTTP 正文 | 密码、信用卡号等。 |
个人数据 | 客户端 IP 地址和用户代理。 |
真实用户监测数据 | 访问的 URL、点击事件、用户浏览器错误、使用的资源等。 |
数据库语句 | 敏感的用户或业务信息 |
默认情况下,APM 代理会捕获 HTTP 请求和响应标头(包括 Cookie)。 大多数 Elastic APM 代理都能够清理 HTTP 标头字段,包括 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
:用户代理数据,包括客户端操作系统、设备名称、供应商和版本。
可以通过将捕获个人数据设置为 false
来关闭此数据的捕获。
此设置仅阻止 APM Server 或托管接收服务捕获已摄取的个人数据。 它不会阻止此类数据出现在适用的摄取日志中。 有关在摄取时编辑数据的更多信息,请参阅 APM 代理过滤器。
Serverless
保护用户数据非常重要。 因此,可以在 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
禁用。