Предотвращение отправки журналов конечных точек проверки здоровья 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,
)
Вернуться на верх