log4j Spring Sentry集成,事件处理器不工作(阻止运行状况检查)

h9a6wy2h  于 2022-11-06  发布在  Spring
关注(0)|答案(2)|浏览(130)

我需要阻止按条件发送一些事件。(运行状况检查)
我使用的是Spring库:

implementation "io.sentry:sentry-spring-boot-starter:5.4.1"
implementation "io.sentry:sentry-logback:5.4.1"

它的工作原理是,sentry有很多事务等,配置是:

sentry:
  dsn: https://....ingest.sentry.io/....
  traces-sample-rate: 1.0

我将使用事件处理器阻止一些具有运行状况检查数据的事件:https://docs.sentry.io/platforms/java/guides/spring-boot/advanced-usage/#registering-custom-event-processor

@Component
public class SentryCallbackExtension implements EventProcessor {

    @Value("${app.sentry.exclude.transactions}")
    private List<String> excludes;

    @Override
    public @Nullable SentryEvent process(@NotNull SentryEvent event, @Nullable Object hint) {
        return StringUtils.containsAnyIgnoreCase(
            event.getTransaction(), excludes.toArray(new String[0])
        ) ? null : event;
    }
}

此块的配置为:

app:
  sentry:
    exclude:
      transactions: "/actuator/health"

但它不起作用。sentry服务中有很多运行状况检查事件。

ryevplcw

ryevplcw1#

我使用了TracesSamplerCallback(https://docs.sentle.io/platforms/java/guides/spring-boot/configuration/filtering/#using-sampling-to-filter-transaction-events),它很有帮助。它可以阻止所有的事件/事务(不仅仅是应用程序的自定义)。

@Component
public class SentryTraceSamplerCallback implements TracesSamplerCallback {

    /**
     * Excludes transaction paths
     */
    @Value("${tn.sentry.exclude.transactions}")
    private List<String> excludes;

    @Override
    @SuppressWarnings("ConstantConditions")
    public @Nullable Double sample(@NotNull SamplingContext context) {
        HttpServletRequest request = (HttpServletRequest) context.getCustomSamplingContext().get("request");
        String url = request.getRequestURI();
        return StringUtils.containsAnyIgnoreCase(url, this.excludes.toArray(String[]::new)) ? 0.0D : 1.0D;
    }
}

daupos2t

daupos2t2#

EventProcessor接口有两个方法:

  • SentryEvent process(SentryEvent event, Object hint)-用于处理事件
  • SentryTransaction process(SentryTransaction transaction, Object hint)-用于处理事务

由于您希望筛选出从对健康终结点的请求中创建的事务,因此需要实现第二个方法,该方法将SentryTransaction作为第一个参数。

相关问题