数据清理
编辑数据清理编辑
有时需要清理发送到 Elastic APM 的数据,例如删除敏感数据。
要使用 Elastic APM 模块执行此操作,您需要创建一个处理器。处理器是一个函数,它接受一个 client
实例以及一个事件(错误、事务、跨度或指标集),并返回修改后的事件。
要完全丢弃事件,您的处理器应返回 False
(或任何其他“假值”)而不是事件。
如果任何处理器在处理事件时引发异常,事件也将被丢弃。在这种情况下,将发出一个级别为 WARNING
的日志消息。
这是一个从错误中删除异常堆栈跟踪的处理器的示例
from elasticapm.conf.constants import ERROR from elasticapm.processors import for_events @for_events(ERROR) def my_processor(client, event): if 'exception' in event and 'stacktrace' in event['exception']: event['exception'].pop('stacktrace') return event
您可以使用 @for_events
装饰器来限制处理器应调用的事件类型。可能的选项是 ERROR
、TRANSACTION
、SPAN
和 METRICSET
,所有这些都在 elasticapm.conf.constants
中定义。
要使用此处理器,请更新您的 ELASTIC_APM
设置,如下所示
ELASTIC_APM = { 'SERVICE_NAME': '<SERVICE-NAME>', 'SECRET_TOKEN': '<SECRET-TOKEN>', 'PROCESSORS': ( 'path.to.my_processor', 'elasticapm.processors.sanitize_stacktrace_locals', 'elasticapm.processors.sanitize_http_request_cookies', 'elasticapm.processors.sanitize_http_headers', 'elasticapm.processors.sanitize_http_wsgi_env', 'elasticapm.processors.sanitize_http_request_body', ), }
我们建议使用上述处理器列表,这些处理器在事件对象的各个位置清理密码和机密。
默认的处理器集根据 elasticapm.conf.constants
中定义的一组默认值清理字段。此集可以使用 SANITIZE_FIELD_NAMES
配置选项进行配置。例如,如果您的应用程序生成一个名为 My-Sensitive-Field
的敏感字段,则可以使用默认处理器自动清理此字段。您可以像这样指定在默认处理器中清理哪些字段
ELASTIC_APM = { 'SERVICE_NAME': '<SERVICE-NAME>', 'SECRET_TOKEN': '<SECRET-TOKEN>', 'SANITIZE_FIELD_NAMES': ( "password", "passwd", "pwd", "secret", "*key", "*token*", "*session*", "*credit*", "*card*", "*auth*", "set-cookie", ), }
我们建议使用上述字段列表来清理事件对象的各个部分,以及您指定的字段。
在选择要清理的字段名称时,您可以指定与某些通配符匹配的值。例如,将 base
作为要清理的字段名称传递,也将清理所有名称与正则表达式模式 \*base*
匹配的字段。