Backend/Spring

Spring boot 비즈니스 메트릭 수집하기

Ry- 2025. 11. 26. 22:36

현재 진행하고 있는 프로젝트에서 모니터링 데이터를 추출해서 그라파나에서 시각화를 해야하는 됩니다.

 

이때 스프링 부트의 비즈니스 매트릭 예를 들어, 총 사용자 수 , 활성화된 사용자, 게시판의 개수 등  비즈니스 서비스 관련된 데이터를 뽑아내는 과정에서 발생한 트러블 슈팅을 기록하겠습니다.

 

 

@Bean
    public Gauge usersTotalGauge(MeterRegistry meterRegistry, UserRepository userRepository) {
        return Gauge.builder("user_service_users_total", userRepository, ur -> (double) ur.count())
                .description("Total number of users.")
                .register(meterRegistry);
    }

    @Bean
    public Gauge workspacesTotalGauge(MeterRegistry meterRegistry, WorkspaceRepository workspaceRepository) {
        return Gauge.builder("user_service_workspaces_total", workspaceRepository, wr -> (double) wr.count())
                .description("Total number of workspaces.")
                .register(meterRegistry);
    }
    @Bean
    public Gauge activeDbConnections(MeterRegistry meterRegistry, DataSource dataSource) {
        return Gauge.builder("user_service_db_connections_active", dataSource, ds -> {
            try {
                // HikariCP 전용
                if (ds instanceof com.zaxxer.hikari.HikariDataSource hikari) {
                    return hikari.getHikariPoolMXBean().getActiveConnections();
                }
            } catch (Exception e) {
                return 0;
            }
            return 0;
        }).description("Number of active DB connections").register(meterRegistry);
    }
    @Bean
    public DatabaseMetrics databaseMetrics(MeterRegistry meterRegistry) {
        return new DatabaseMetrics(meterRegistry);
    }

 

저는 config/metrics에 메트릭을 수집 할 수 있게 작성을 하여 그라파나에서 수집하려는 상황입니다.

하지만 해당 메트릭들을 수집하는걸 확인하지 못했습니다. 

그 이유가 왜 그런지 검색과 AI를 돌려보니

 

스프링 부트 속도를 높이기 위해 작성했던 설정이 Bean의 생성 유무를 늦게 낮춰 메트릭이 수집될 상황에 없던 내용이 였습니다.

// application.yml
spring:
  main:
    lazy-initialization: true

해당 옵션을 유지하면서 Bean 생성 범위를 설정해주기 위해 @Lazy를 사용하여 해당 문제를 해결하게 되었습니다.

https://effortguy.tistory.com/266

 

[Spring] Bean Lazy Initialization 사용법

이번 포스팅에선 Spring의 Lazy initialization에 대해 알아보겠다. 먼저 Spring이 lazy initialization 설명한 글을 번역해보겠다. Lazy Initialization in Spring Boot 2.2 Lazy란 무엇을 의미하나요? Spring Framework는 11년

effortguy.tistory.com