数据清理编辑

有时需要清理发送到 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 装饰器来限制处理器应调用的事件类型。可能的选项是 ERRORTRANSACTIONSPANMETRICSET,所有这些都在 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* 匹配的字段。