Přejít k obsahu Přejít k hlavnímu menu

SUPERKODERS

Sentry event filter

Chcete předejít překročení limitu API požadavků v Sentry a mít lepší kontrolu nad tím, co se odesílá?

Vojta Brtník 6. února 2025 2 min. čtení

Sentry event filter

Setkali jste se někdy s tím, že vám došel limit na API požadavky v Sentry? Chcete tomu předejít a mít lepší kontrolu nad tím, co se odesílá? Pomocí callbacku before_send si do Sentry přidejte možnost filtrovat odchozí události a mějte ji pak více pod kontrolou.

V konfiguraci sentry by to mohlo vypadat třeba takto:

\Sentry\init([
    'dsn' => 'https://examplePublicKey@o0.ingest.sentry.io/0',
    'before_send' => $this->beforeSendFilter->filter(...),
]);

Vlastní BeforeSendFilter bude sledovat počet odeslaných chyb v historii se stejným otiskem. Pokud překročím stanovený limit, chybu budu ignorovat, protože v sentry o ní již vím. Při vydání nové verze aplikace, je vhodné stav počítadel smazat.

private function getEventFingerprint(\Sentry\Event $event, ?\Sentry\EventHint $hint): string
{
    $parts = [];
    if ($hint !== null && $hint->exception !== null) {
        $parts[] = $hint->exception->getFile();
        $parts[] = $hint->exception->getLine();
    } else {
        $parts[] = $event->getMessage();
    }

    return md5(serialize($parts));
}

private function isOverLimit(string $eventFingerprint): bool
{
    ...
}

private function increaseCounter(string $eventFingerprint): void
{
    ...
}

public function filter(\Sentry\Event $event): ?\Sentry\Event
{
    $eventFingerprint = $this->getEventFingerprint($event);
    if ($this->isOverLimit($eventFingerprint)) {
        return null;
    }
    $this->increaseCounter($eventFingerprint);

    return $event;
}

Tento přístup pomůže minimalizovat zbytečné API požadavky, snížit náklady a zachovat přehlednější reportování chyb v Sentry.

Chceš se bavit s námi?

Hledáme do týmu další zapálené vývojáře.
Mrkněte na kariéru a napište Michalovi.

Michal Matuška | CTO +420 737 770 642

Michal Matuška