Предотвращение отправки журналов конечных точек проверки здоровья Django в Sentry
У меня есть приложение Django с конечной точкой проверки состояния здоровья, которое использует это репо.
В url_patterns
я добавил следующую строку:
url(r'^ht/', include('health_check.urls')),
Проблема в том, что проверка здоровья заполняет все лимиты транзакций Sentry.
Как я могу исключить конечную точку проверки здоровья в Sentry?
В ASP.NET Core 3.x вы можете настроить проверку здоровья с помощью маршрутизации конечных точек. Вы должны добавить необходимые службы в Startup.cs, вызвав AddHealthChecks()
, и добавить конечную точку проверки здоровья, используя MapHealthChecks()
.
Дополнительная информация на https://andrewlock.net/using-serilog-aspnetcore-in-asp-net-core-3-excluding-health-check-endpoints-from-serilog-request-logging/
Вы можете легко фильтровать события, отправляемые часовому, с помощью функции before_breadcrumb
в часовом. Эта функция позволяет вам применять любой фильтр, который вы хотите, к логам часового перед отправкой их часовому. если вы вернете None
в функции before_breadcrumb
, она ничего не отправит часовому.
Ваш код будет выглядеть следующим образом:
import sentry_sdk
def before_breadcrumb(crumb, hint):
if 'httplib_request' in hint:
# Check the request URL and return None if it is health check
return crumb
sentry_sdk.init(
# ...
before_breadcrumb=filter_events,
)
Способ справиться с подобными случаями заключается в использовании функции sampling для управления частотой дискретизации в соответствии с URL или другими параметрами.
def traces_sampler(ctx):
if 'wsgi_environ' in ctx:
url = ctx['wsgi_environ'].get('PATH_INFO', '')
if url.startswith('/ht/'):
return 0 # Don't trace any
return 1 # Trace all
sentry_sdk.init(
# ...
traces_sampler=traces_sampler,
)
Вот более полный пример.
def traces_sampler(ctx):
if ctx['parent_sampled'] is not None:
# If this transaction has a parent, we usually want to sample it
# if and only if its parent was sampled.
return ctx['parent_sampled']
op = ctx['transaction_context']['op']
if 'wsgi_environ' in ctx:
# Get the URL for WSGI requests
url = ctx['wsgi_environ'].get('PATH_INFO', '')
elif 'asgi_scope' in ctx:
# Get the URL for ASGI requests
url = ctx['asgi_scope'].get('path', '')
else:
# Other kinds of transactions don't have a URL
url = ''
if op == 'http.server':
# These conditions are only relevant for operation "http.server"
if url.startswith('/ht/'):
return 0 # Don't trace any of these transactions
return 0.1 # Trace 10% of other transactions
sentry_sdk.init(
# ...
traces_sampler=traces_sampler,
)