본문 바로가기

Programing/OpenSource

Grafana로 모니터링 하기...

제목은 Grafana로 모니터링 하기였지만 로컬에서 docker로 하나씩 올려보니 사전 지식이 어느정도 있어야 이해가 되었다.


아래와 같은 flow가 이루어진다.

Spring boot -> JMX (JMS Trans를 이용) -> Graphite -> Grafana


1) Spring boot -> JMX : Jmxtrans를 사용하기 위한 MBean 설정 글 참고

2) Graphite -> Grafana : 그라파이트(Grahpite) + 그라파나(Grafana) 모니터링 시스템 구축 with Docker 참고

 Graphite에 대한 기본 이해는 Graphite Reference FAQ를 참고한다.


JMS Trans의 구현체가 여러가지 있는데 embedded-jmxtrans 로 데모를 해보았다.

<!-- https://mvnrepository.com/artifact/org.jmxtrans.embedded/embedded-jmxtrans -->
<dependency>
<groupId>org.jmxtrans.embedded</groupId>
<artifactId>embedded-jmxtrans</artifactId>
<version>1.2.1</version>
</dependency>

이상한건 해당 라이브러리가 graphite로 쏘는 org.jmxtrans.embedded.output.GraphiteWriter에서 내부적으로 apache.commons.pool2을 쓰고 있는데 해당 의존이 optional로 되어 있어서 의존성을 안끌고 오는 현상이 있었다.

<dependency>
<!-- used by GraphitePickleWriter and GraphiteWriter-->
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.3</version>
<optional>true</optional>
</dependency>

그래서 아래와 같이 나의 pom.xml에 추가. 더 재미있던 건 버전 2.0은 setJmxNameBase 메서드가 없어서 런타임 에러가 발생한다.

<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-pool2 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.6.0</version>
</dependency>

자세한 것은 아래 데모 참고.

https://github.com/namhokim/spring-boot-demo/commit/94906c6683a0757705e711fe3f086661d3dc8c5d