대빵's Blog

Scouter APM 에서 HikariCP 모니터링 하기 본문

개발관련

Scouter APM 에서 HikariCP 모니터링 하기

bigzero 2020. 1. 9. 11:39

Spring 의 기본 Connection Pool 이 HikariCP 로 변경되면서 Scouter APM 에서 datasource 사용량이 모니터링이 되지 않는다.

구글링 해보니 아래 링크와 같은 내용을 발견하여 해당 내용을 보고 살짝 수정하여 HikariCP를 Scouter APM 에서 모니터링 가능토록 등록하였다.

참고링크

https://jamcode.tistory.com/80?fbclid=IwAR3i6voXhWUpyjqHGwmxXCUJwBSa4eknm10dg_dNNYRe8h1-MCM7n3vUfvQ

 

Scouter 에 Spring hikari pool 연결

Scouter 에서 기본적으로 tomcat DBCP 는 모니터링이 가능하지만 spring 의 hikari 는 모니터링이 되지 않는다. Scouter Paper 에서 이를 꼭 모니터링 하고 싶어서 여기저기 열심히 찾아 다녔지만 해결 방법을 찾..

jamcode.tistory.com

 

구현이후 소스

 

public interface DataSourceMonitoringMBean {

	int getnumActive(); 
	int getnumIdle(); 
	int getmaxTotal();

}
@Component
@Slf4j
public class DataSourceMonitoring implements DataSourceMonitoringMBean {
	
	// DataSource가 여러개인 경우 원하는 DataSource 가져오기
	@Autowired @Qualifier(DbConfig.DS_DATASOURCE) HikariDataSource dataSource;
	
	@Override
	public int getnumActive() {
		// PoolMXBean 이 초기화 되지 않으면 null 에러 발생 방지
		return dataSource.getHikariPoolMXBean() != null ? dataSource.getHikariPoolMXBean().getActiveConnections() : 0;
	}

	@Override
	public int getnumIdle() {
		return dataSource.getHikariPoolMXBean() != null ? dataSource.getHikariPoolMXBean().getIdleConnections() : 0;
	}

	@Override
	public int getmaxTotal() {
		return dataSource.getHikariConfigMXBean().getMaximumPoolSize();
	}
	
	@PostConstruct
	public void init() {
		try {
        	// type 이 DataSource 이어야 한다. name 은 아무거나 원하는 것 셋팅
			ManagementFactory.getPlatformMBeanServer().registerMBean(this, new ObjectName("com.xxx:type=DataSource,name=ds1"));
		} catch (Exception e) {
			log.error("MBean Register Error", e);
		} 
	}	
	
}