이번 포스트는 로컬환경에서 scouter를 통해 intellij로 스프링부트 애플리케이션을 실행해서 scouter로 모니터링해보겠습니다
환경
- Apple M2 Pro
- macOS Sonoma
- docker
- Docker version 24.0.6, build ed223bc
scouter는 오픈소스 APM입니다
APM은 애플리케이션 성능 모니터링 또는 애플리케이션 성능 관리를 의미합니다
Scouter 구성은 크게 server, agent, client 구조로 되어있습니다
참고: https://github.com/scouter-project/scouter/blob/master/scouter.document/main/Setup-FAQ_kr.md
scouter/scouter.document/main/Setup-FAQ_kr.md at master · scouter-project/scouter
Scouter is an open source APM (Application Performance Management) tool. - scouter-project/scouter
github.com
server는 apm metric을 전달받습니다
client는 server를 통해 apm metric 정보를 확인할수 있습니다
agent는 APM 대상인 application 및 host apm metric을 server로 전송합니다
server 구동
github repo에서 최신 release에서 asset에서 scouter-all-ooo.tar.gz를 받습니다
server는 JDK 1.8에서 동작확인했습니다
참고: https://github.com/scouter-project/scouter/blob/master/scouter.document/main/Setup.md
scouter/scouter.document/main/Setup.md at master · scouter-project/scouter
Scouter is an open source APM (Application Performance Management) tool. - scouter-project/scouter
github.com
다운받은 후에 압축을 풀어줍니다
해당 디렉토리 기준으로 설명하니 아래 shell 경로를 주의합니다
server 디렉토리로 이동해서
cd ./scouter/server
./startup.sh
./startup.sh
____ _
/ ___| ___ ___ _ _| |_ ___ _ __
\___ \ / __/ \| | | | __/ _ \ '__|
___) | (_| (+) | |_| | || __/ |
|____/ \___\___/ \__,_|\__\___|_|
Open Source S/W Performance Monitoring
Scouter version 2.20.0
System JRE version : 1.8.0_322
22:07:01,013 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
22:07:01,013 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
22:07:01,013 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [jar:file:/Users/nohys/dev/be/spring-study/mildang-be-spring-study/infra/scouter/scouter/server/./lib/scouter-webapp-2.20.0.jar!/logback.xml]
22:07:01,019 |-INFO in ch.qos.logback.core.joran.spi.ConfigurationWatchList@7c0c83de - URL [jar:file:/Users/nohys/dev/be/spring-study/mildang-be-spring-study/infra/scouter/scouter/server/./lib/scouter-webapp-2.20.0.jar!/logback.xml] is not of type file
22:07:01,028 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
22:07:01,028 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
22:07:01,030 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [STDOUT]
22:07:01,032 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
22:07:01,040 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
22:07:01,041 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [FILE_DAILY]
22:07:01,043 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy@97597594 - No compression will be used
22:07:01,043 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy@97597594 - Will use the pattern ./logs/webapp-%d{yyyy_MM_dd}.log for the active file
22:07:01,044 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - The date pattern is 'yyyy_MM_dd' from file name pattern './logs/webapp-%d{yyyy_MM_dd}.log'.
22:07:01,044 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Roll-over at midnight.
22:07:01,046 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Setting initial period to Sun Jun 16 22:07:01 KST 2024
22:07:01,046 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
22:07:01,046 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE_DAILY] - Active log file name: ./logs/webapp-2024_06_16.log
22:07:01,046 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE_DAILY] - File property is set to [null]
22:07:01,047 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
22:07:01,047 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [FILE_SIZE]
22:07:01,047 |-INFO in ch.qos.logback.core.rolling.FixedWindowRollingPolicy@66696c4f - No compression will be used
22:07:01,048 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
22:07:01,048 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE_SIZE] - Active log file name: ./logs/webapp.log
22:07:01,048 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE_SIZE] - File property is set to [./logs/webapp.log]
22:07:01,048 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
22:07:01,048 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [FILE_SIZE_DAILY]
22:07:01,049 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy@1998064277 - No compression will be used
22:07:01,049 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy@1998064277 - Will use the pattern ./logs/webapp-%d{yyyy_MM_dd}-%i.log for the active file
22:07:01,050 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@6f9265db - The date pattern is 'yyyy_MM_dd' from file name pattern './logs/webapp-%d{yyyy_MM_dd}-%i.log'.
22:07:01,050 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@6f9265db - Roll-over at midnight.
22:07:01,050 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@6f9265db - Setting initial period to Sun Jun 16 22:07:01 KST 2024
22:07:01,050 |-WARN in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@6f9265db - SizeAndTimeBasedFNATP is deprecated. Use SizeAndTimeBasedRollingPolicy instead
22:07:01,050 |-WARN in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@6f9265db - For more information see http://logback.qos.ch/manual/appenders.html#SizeAndTimeBasedRollingPolicy
22:07:01,050 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
22:07:01,051 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE_SIZE_DAILY] - Active log file name: ./logs/webapp-2024_06_16-0.log
22:07:01,051 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[FILE_SIZE_DAILY] - File property is set to [null]
22:07:01,051 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to INFO
22:07:01,051 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [STDOUT] to Logger[ROOT]
22:07:01,051 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [FILE_DAILY] to Logger[ROOT]
22:07:01,051 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.
22:07:01,051 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@630b855b - Registering current configuration as safe fallback point
22:07:01.054 [scouter.server.http.HttpServer] INFO org.eclipse.jetty.util.log[192] - Logging initialized @510ms to org.eclipse.jetty.util.log.Slf4jLog
22:07:01.088 [scouter.server.http.HttpServer] INFO org.eclipse.jetty.server.Server[372] - jetty-9.4.6.v20170531
22:07:01.097 [scouter.server.http.HttpServer] INFO o.e.j.server.AbstractNCSARequestLog[230] - Opened /Users/nohys/dev/be/spring-study/mildang-be-spring-study/infra/scouter/scouter/server/logs/http-request-2024_06_16.log
22:07:01.103 [scouter.server.http.HttpServer] INFO org.eclipse.jetty.server.session[364] - DefaultSessionIdManager workerName=node0
22:07:01.103 [scouter.server.http.HttpServer] INFO org.eclipse.jetty.server.session[369] - No SessionScavenger set, using defaults
22:07:01.103 [scouter.server.http.HttpServer] INFO org.eclipse.jetty.server.session[149] - Scavenging every 600000ms
22:07:01.105 [scouter.server.http.HttpServer] INFO o.e.j.server.handler.ContextHandler[788] - Started o.e.j.s.ServletContextHandler@324e6fc3{/,null,AVAILABLE}
22:07:01.111 [scouter.server.http.HttpServer] INFO o.e.jetty.server.AbstractConnector[280] - Started ServerConnector@1c49639c{HTTP/1.1,[http/1.1]}{0.0.0.0:6180}
위와 같이 나오면 server가 정상 실행된것입니다
agent 구동
- host
- java
agent는 두 가지가 있습니다
cd ./scouter/agent.host
./host.sh
./host.sh
____ _
/ ___| ___ ___ _ _| |_ ___ _ __
\___ \ / __/ \| | | | __/ _ \ '__|
___) | (_| (+) | |_| | || __/ |
|____/ \___\___/ \__,_|\__\___|_|
Open Source S/W Performance Monitoring
Scouter version 2.20.0
SLF4J: No SLF4J providers were found.
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See https://www.slf4j.org/codes.html#noProviders for further details.
위와 같이 나오면 host agent가 정상 실행된것입니다
java agent는
intellij에서 springboot를 실행하겠습니다
Edit Configuration ... 선택해줍니다
Modify options 선택해서 VM options 선택해줍니다
아래 옵션을 추가해줍니다
-javaagent:${SCOUTER_DIR}/scouter/agent.java/scouter-agent-java-2.20.0.jar
-Dscouter.config=${SCOUTER_DIR}/scouter/agent.java/conf/scouter.conf
-Dobj_name=demo-springboot-app
JVM을 구동할때 필요한 옵션이기 때문에 VM options에 추가해줘야합니다
obj_name은 클라이언트에서 구분하는 용도입니다
client 구동
scouter 폴더로 이동한후 터미널에서 다음 코드를 실행해줍니다
xattr -cr scouter.client.app
그리고 admin/ admin 입력해서 모니터링 확인할 수 있습니다
포트는 디폴트 포트기 때문에 scouter.conf 를 수정하지 않으셨다면 127.0.0.1:6100으로 통신이 가능합니다