티스토리 뷰

Scouter 에서 기본적으로 tomcat DBCP 는 모니터링이 가능하지만 spring 의 hikari 는 모니터링이 되지 않는다. Scouter Paper 에서 이를 꼭 모니터링 하고 싶어서 여기저기 열심히 찾아 다녔지만 해결 방법을 찾지 못 했다. Scouter 의 release 기록을 보면서 hikari 가 추가된 버전이 있는 지도 확인해 보았지만 역시나 찾지 못 했다. (사용 중인 Scouter 버전 2.0.1)

이제 이 부분을 보이게 하고 싶어서 스카우터의 Datasource 를 등록하는 부분의 소스를 찾아 보았다.
https://github.com/scouter-project/scouter

 

scouter-project/scouter

Scouter is an open source APM (Application Performance Management) tool. - scouter-project/scouter

github.com

이곳으로 이동해서 /scouter.agent.java/src/main/java/scouter/agent/counter/task/TomcatJMXPerf.java 이 경로의 소스를 확인해 보면 이 클래스의 getMBeanList() 메소드를 보면 Datasource 를 세팅하고 있고 type 이 DataSource 인 mbean 에서 값을 꺼내오는 것을 확인할 수 있다.

이 부분의 소스를 보고 직접 mbean 을 만들어서 등록했다.

public interface DataSourceMonitoringMBean {
    int getnumActive();

    int getnumIdle();

    int getmaxActive();

    int getmaxTotal();
}
public class DataSourceMonitoring implements DataSourceMonitoringMBean {
    private HikariDataSource dataSource;

    DataSourceMonitoring(HikariDataSource dataSource) {
        this.dataSource = dataSource;
    }

    @Override
    public int getnumActive() {
        return dataSource.getHikariPoolMXBean().getActiveConnections();
    }

    @Override
    public int getnumIdle() {
        return dataSource.getHikariPoolMXBean().getIdleConnections();
    }

    @Override
    public int getmaxActive() {
        return dataSource.getHikariConfigMXBean().getMaximumPoolSize();
    }

    @Override
    public int getmaxTotal() {
        return dataSource.getHikariConfigMXBean().getMaximumPoolSize();
    }
}
@Configuration
@MapperScan(basePackages = "com.test")
@AllArgsConstructor
public class DataSourceConfig {
    private HikariDataSource dataSource;

    @PostConstruct
    public void init() throws Exception {
        MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
        ObjectName objectName = new ObjectName("com.test:type=DataSource,name=hikari-pool,context=/");

        DataSourceMonitoring dataSourceMonitoring = new DataSourceMonitoring(dataSource);

        mBeanServer.registerMBean(dataSourceMonitoring, objectName);
    }
}

maxActive 와 maxTotal 은 같은 역할을 해서 그냥 같은 값으로 세팅해 주었다. (주석에 tomcat 버전을 위한 것이라고 되어있기 때문에)

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함