์ด ํฌ์คํธ๋ ์ดํ๋ฆฌ์ผ์ด์ ๋งคํธ๋ฆญ ํด์ธ micometer์ Elastic Search, Kibana๋ฅผ ์ด์ฉํ ๋์๋ณด๋ ๊ตฌ์ถ์ ๋ํ ์๊ฐ๋ฅผ ํ๋ ค๊ณ ํฉ๋๋ค.
micrometer๋ Spring 5๋ถํฐ ๋ฉํธ๋ฆญ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ํฌํจ๋ ํ๋ ์์ํฌ์
๋๋ค. Think SLF4J, but for metrics
๋ผ๋ ์ค๋ช
๊ณผ ๊ฐ์ด slf4j์ ๊ฐ์ด ๋ฐด๋ ์ค๋ฆฝ์ API๋ฅผ ์ ๊ณตํด์ ์ค์ ๋งคํธ๋ฆญ ์ง๊ณ๋ฅผ ์ํ ๋๊ตฌ์ ๊ด๊ณ ์์ด ์ฝ๋๋ฅผ ์์ฑ ํ ์ ์์ต๋๋ค.
์๋์ ๊ฐ์ API๋ฅผ ํตํด ๋ฐด๋ ์ค๋ฆฝ์ ์ธ Metrics ์ง๊ณ ์ฝ๋๋ฅผ ์์ฑ ํ ์ ์๋๋ก ๋์์ค๋๋ค.
public interface MeterBinder {
void bindTo(@NonNull MeterRegistry registry);
}
๊ธฐ๋ณธ์ ์ผ๋ก Jvm, JDBC, db, disk, logback, webflux, tomcat, web mvc๋ฑ์ ํฌํจํ๊ณ ์์ผ๋ฉฐ resillience4j, armeria๋ฑ๊ณผ ๊ฐ์ด spring ์ํ๊ณ์์ ๋ง์ด ์ฌ์ฉ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฒฝ์ฐ์๋ MeterBinder๋ฅผ ํฌํจํ๊ณ ์์ผ๋ฉฐ ์๋๋ผ๋ ์์ฝ๊ฒ ์์ฑํ ์ ์์ด ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ๋ชจ๋ํฐ๋งํ ์ ์์ต๋๋ค.
์ต๊ทผ ํด๋ผ์ฐ๋ํ๊ฒฝ ๋ชจ๋ํฐ๋ง์์ ๋ง์ด ์ฌ์ฉ๋๊ณ ์๋ prometheus์ grafana์ ์กฐํฉ์ด ์๊ณ ๋ง์ ์ฅ์ ์ ๊ฐ์ง๊ณ ์์ง๋ง ํ์ ๊ท๋ชจ๊ฐ ํฌ์ง ์๊ณ ํ๋ด์์ ์ถ๊ฐ์ ์ธ ์ธํ๋ผ๋ฅผ ๊ด๋ฆฌํ๋๋ ๋ค์ด๊ฐ๋ ๋ถ๋ด๊ฐ์ผ๋ก ๊ธฐ์กด์ ํ๋ด์์ ์ด์์ค์ด๋ ElasticSearch๋ฅผ ์ฌ์ฉํ์์ต๋๋ค.
dependencies {
// web
compile group: 'org.springframework.boot', name: 'spring-boot-starter-web'
// actuator
compile group: 'org.springframework.boot', name: 'spring-boot-starter-actuator'
runtimeOnly group: 'io.micrometer', name: 'micrometer-registry-elastic', version: "$micrometerVersion"
}
์ ์ฝ๋์ ๊ฐ์ด micrometer-registry-elastic
์์กด์ฑ์ ์ถ๊ฐํด์ค๋๋ค.
management:
metrics:
export:
elastic:
enabled: true
index: metrics
host: http://{elastic-search-host}
application.yml ํ์ผ์ elastic export๋ฅผ enabled true๋ก ์ค์ ํ๊ณ ์ธ๋ฑ์ค์ ํธ์คํธ๋ฅผ ์ค์ ํด์ค๋๋ค.
์ค์ ๊น์ง ๋๋ง์ณค๋ค๋ฉด kibana์์ ๋ค์๊ณผ ๊ฐ์ด ๋ฌธ์๊ฐ ์์ฑ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
๋๋ต์ ์ผ๋ก ๋ชจ๋ ์ค์ ์ ๋๋ง์ณค์ง๋ง ์ฌ๋ฌ๊ฐ์ง ์ดํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉํ๋ ํ๊ฒฝ์์๋ ๊ฐ๊ฐ์ ์ธ์คํด์ค๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํ ํ๊ทธ๊ฐ ํ์ํฉ๋๋ค.
management.metrics.tags.{tagName}
์ค์ ์ ํตํด์ ๊ฐ metric์ ์ถ๊ฐ์ ์ธ ํ๊ทธ๋ฅผ ์ค์ ํ ์ ์๋๋ฐ ์ธ์คํด์ค ๊ตฌ๋ถ์ ์ํ host
์ ์ดํ๋ฆฌ์ผ์ด์
๊ตฌ๋ถ์ ์ํ application
ํ๊ทธ๋ฅผ ์ถ๊ฐํ์์ต๋๋ค.
์ค์ ์ ํ๋ ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๊ฒ ์ง๋ง ์ ํฌ๋ aws ec2์์ docker ๋ฐฐํฌ๋ฅผ ์ฌ์ฉํ๊ธฐ๋๋ฌธ์ -Dmanagement.metrics.tags.host=${EC2_AGENT_ID} -Dmanagement.metrics.tags.application=${APPLICATION_NAME}
์ ๊ฐ์ด ์ธ๋ถ ์ค์ ์ ์ฌ์ฉํ์์ต๋๋ค.
๋ค์ํ ํ ํ๋ฆฟ์ด ์กด์ฌํ๋ grafana์ ๋ฌ๋ฆฌ spring boot์ micrometer ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ์ํ kibana ๋์๋ณด๋ ๋ฐ์ดํฐ๋ ๊ทนํ ์ ์์ต๋๋ค. ๊ทธ์ค์์ ๊ฐ์ฅ ๋ณด๊ธฐ์ข๊ฒ ๊ตฌ์ฑ๋ https://github.com/acroquest/micrometer-kibana-dashboard ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋์๋ณด๋๋ฅผ ๊ตฌ์ถํ์์ต๋๋ค.
kibana๊ฐ ์ธํ
๋์ด์๋ค๋ฉด ํด๋น ๋ ํฌ์งํ ๋ฆฌ์ kibana_setup.sh
๋ฅผ ์ด์ฉํ์ฌ ์์ฝ๊ฒ ๊ธฐ๋ณธ์ ์ธ ๋์๋ณด๋๋ฅผ ๊ตฌ์ถ ํ ์ ์์ต๋๋ค.