Application data security

When setting up Elastic APM, it’s essential to review all captured data carefully to ensure it doesn’t contain sensitive information like passwords, credit card numbers, or health data. In addition, you may wish to filter out other identifiable information, like IP addresses, user agent information, or form field data.

Depending on the type of data, we offer several different ways to filter, manipulate, or obfuscate sensitive information during or before ingestion:

In addition to utilizing filters, you should regularly review the sensitive fields table to ensure sensitive data is not being ingested. If it is, it’s possible to remove or redact it. See Delete sensitive data for more information.

Built-in data filters ¶

Built-in data filters allow you to filter or turn off ingestion of the following types of data:

Data type Common sensitive data
HTTP headers Passwords, credit card numbers, authorization, etc.
HTTP bodies Passwords, credit card numbers, etc.
Personal data Client IP address and user agent.
Real user monitoring data URLs visited, click events, user browser errors, resources used, etc.
Database statements Sensitive user or business information

Custom filters ¶

Custom filters allow you to filter or redact other types of APM data on ingestion:

Ingest pipelines Applied at ingestion time.All agents and fields are supported. Data leaves the instrumented service.There are no performance overhead implications on the instrumented service.
APM agent filters Not supported by all agents.Data is sanitized before leaving the instrumented service.Potential overhead implications on the instrumented service

Sensitive fields ¶

You should review the following fields regularly to ensure sensitive data is not being captured:

Field Description Remedy
client.ip The client IP address, as forwarded by proxy. Personal data
http.request.body.original The body of the monitored HTTP request. HTTP bodies
http.request.headers The canonical headers of the monitored HTTP request. HTTP headers
http.request.socket.remote_address The address of the last proxy or end-user (if no proxy). Custom filters
http.response.headers The canonical headers of the monitored HTTP response. HTTP headers
process.args Process arguments. Database statements
span.db.statement Database statement. Database statements
stacktrace.vars A flat mapping of local variables captured in the stack frame Custom filters
url.query The query string of the request, e.g. ?pass=hunter2. Custom filters
user.* Logged-in user information. Custom filters
user_agent.* Device and version making the network request. Personal data