모니터링

springboot에 scouter로 모니터링하기

blogger903 2024. 6. 16. 22:20
728x90

이번 포스트는 로컬환경에서 scouter를 통해 intellij로 스프링부트 애플리케이션을 실행해서 scouter로 모니터링해보겠습니다

 

환경

- Apple M2 Pro

- macOS Sonoma

- docker

  - Docker version 24.0.6, build ed223bc

 

scouter는 오픈소스 APM입니다

APM은 애플리케이션 성능 모니터링 또는 애플리케이션 성능 관리를 의미합니다

 

github repo

 

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으로 통신이 가능합니다