제목은 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
'Programing > OpenSource' 카테고리의 다른 글
[Git] gradlew.bat 이 계속 바뀐다... (0) | 2018.11.20 |
---|---|
Spring One 2018, Seoul (0) | 2018.11.09 |
TICK Stack (Telegraf, InfluxDB, Chronograf, Kapacitor) (0) | 2018.11.06 |
코드 스타일 목록 (0) | 2018.10.30 |
MapStruct - DTO, VO 간 변환 유틸리티 (0) | 2018.10.24 |