Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Filter out health check transactions #3317

Open
TomRoelofsWhyellow opened this issue Apr 19, 2024 · 6 comments
Open

Filter out health check transactions #3317

TomRoelofsWhyellow opened this issue Apr 19, 2024 · 6 comments
Labels
Feature New feature or request Product: Performance

Comments

@TomRoelofsWhyellow
Copy link

Package

Sentry.AspNetCore

.NET Flavor

.NET

.NET Version

6.0.0

OS

Any (not platform specific)

SDK Version

4.4.0

Self-Hosted Sentry Version

No response

Steps to Reproduce

  1. Enable inbound filter for filtering out health check transactions
  2. Create a health check endpoint (e.g. /healthcheck/database)
  3. Assure that the health check is unhealthy
  4. Perform a health check call to the endpoint

Expected Result

According to the docs (https://docs.sentry.io/product/data-management-settings/filtering/#transactions-coming-from-health-check), the health check transaction should be filtered out.

Number of other things I've tried:

  1. Add SetBeforeSendTransaction and SetBeforeSend. Tried to filter on Transaction Name/Tags.

options.SetBeforeSendTransaction((sentryTransaction, _) => { return sentryTransaction.Name.Contains("healthcheck") ? null : sentryTransaction; });

  1. Add TracesSampler

options.TracesSampler = samplingContext => { return samplingContext.TransactionContext.Name.Contains("healthcheck") ? 0 : 1; };

When I check the logs, it says the events/transactions are dropped, but I'm still receiving them in Sentry.
image

Actual Result

The health check is not filtered out.

@bitsandfoxes
Copy link
Contributor

So it looks like our docs are ahead of our implementation! I don't find anything related to heathcheck in our SDK. We're going to put that on our To-Do.

@TomRoelofsWhyellow
Copy link
Author

Are there any options to filter them out? This is depleting my performance units within a few days, because I have multiple health endpoints.

@bitsandfoxes
Copy link
Contributor

You should definitely be able to filter those. The automatically created transaction's name should be in the format {method} {route} e.g. GET /pets/{id}. Can you confirm this?
Returning null drops the event.
The only way I see your filter not work would be if the SDK fails to extract the route from the route template.

@TomRoelofsWhyellow
Copy link
Author

Yes, the format is indeed {method} {route}. I debugged the BeforeSend/BeforeSendTransaction/TracesSampler filters and the routes do get extracted correctly.

I've noticed that even after dropping a transaction, still some tracing information is sent to Sentry. Does this count towards my performance units limit?

@bitsandfoxes
Copy link
Contributor

With the transaction dropped we update the client report. You can see that here:

processedTransaction = BeforeSendTransaction(processedTransaction, hint);
if (processedTransaction is null) // Rejected transaction
{
_options.ClientReportRecorder.RecordDiscardedEvent(DiscardReason.BeforeSend, DataCategory.Transaction);
_options.LogInfo("Transaction dropped by BeforeSendTransaction callback.");
return;
}

This does not count towards your quota.

@TomRoelofsWhyellow
Copy link
Author

Okay, I'll check if the filters are working once I have performance units again.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Feature New feature or request Product: Performance
Projects
Status: No status
Status: No status
Development

No branches or pull requests

2 participants