Scouter APM 소소한 시리즈 #1 - 설치하기

  • Scouter is an APM optimized for developers.
Scouter가 "개발자를 위한 APM"이라는 목적에 맞게 자유도가 높은 반면, 자잘하게 숨겨진 기능이 많은 APM인지라 이 시리즈를 통해 Scouter의 기능을 하나 하나 알아보도록 하겠습니다.

첫번째 내용은 설치하기 입니다.

* Scouter 설치 전 반드시 기억해야할 사항

Scouter는 Agent와 Collector Server 그리고 User용 Client 프로그램으로 구성되며, 이들간의 관계를 잘 아는 것이 중요합니다.
  • 각 서버에 설치된 Scouter의 Agent들이 성능 데이터를 Collector로 전송한다.
  • 사용자는 Client 프로그램을 통해 성능 데이터를 본다.
  • Agent  ⇨⇨⇨  [성능 데이터]  ⇨⇨⇨  Collector(Server)
  • Client  ⇦⇦⇦  [성능 데이터]  ⇦⇦⇦  Collector(Server)

* Scouter를 처음 사용하신다면 먼저 아래 동영상을 통해 개략적인 모습을 보시기 바랍니다. 

 - Scouter APM Overview

Scouter 설치

1. Scouter 다운로드

Scouter 릴리즈 페이지에서 최신버전을 다운로드합니다.
  • Scouter Release Page
  • scouter-all-[version].tar.gz
    • Scouter Collector와 Agent를 포함하는 압축파일입니다.
  • scouter.client.product-[os].tar.gz
    • 각 OS별 Client(Viewer) 프로그램입니다.

2. Scouter Server 설치 및 기동

  • 적절한 위치에 scouter-all-[version].tar.gz 의 압축을 풀어줍니다.
  • Scouter Server를 실행합니다.
    startup.sh 또는 startup.bat 실행
    scouter server start up
  • netstat -an | grep 6100 을 해보면 Scouter Server가 LISTEN 하고 있는것을 알 수 있습니다.
  • netstat
    여기서 알 수 있듯이, Scouter는 기본 포트로 TCP 6100과 UDP 6100 을 사용합니다.

3. Scouter Client 실행

  • scouter.client.product-[os].tar.gz의 압축을 풀고 실행합니다.
  • 맥에서 실행되지 않으면 다음 명령을 실행하여 줍니다.
    • xattr -cr scouter.client.app
    • 맥용 클라이언트는 Java 11 버전 이상이어야 합니다. 
  • 접속할 Scouter Serve의 IP나 도메인을 입력합니다.
  • ID와 Password를 입력합니다.
    기본값 : admin / admin

    scouter client login
  • Collector에 접속되면 좌측 상단의 Object-View에서 Collector 서버 하나가 있는 것을 확인할 수 있습니다.
    이후에 Agent를 실행할때마다 이 Collector 서버 하위에 모니터링 대상이 나타나게 됩니다.
    scouter client object view

4. Host Agent 실행

  • Host Agent 실행 전에 먼저 Collector 접속 설정이 필요합니다.
  • 설정 파일에 Collector의 IP와 Port 정보를 설정합니다.
    - 설정 파일(default) : [scouter-dir]/agent.host/conf/scouter.conf
  • net_collector_ip에는 Collector 접속 IP나 도메인을 기입합니다.
    • 여기서는 하나의 장비로 테스트 중이므로 loopback 주소를 넣었습니다.
  • 기본 port 값이 6100이므로, Collector 설치시 port 정보를 변경하지 않았다면 port 설정은 하지 않아도 됩니다. (여기서는 이해를 돕기 위해 기본값으로 넣었습니다.)
    • 위 설정에서 알 수 있듯이 SCOUTER는 UDP와 TCP를 모두 사용합니다.
      • 성능정보는 UDP를 통해 Collector에 전송되며, TCP 연결은 Client 프로그램을 통해 사용자가 Agent에 특정 요청(예를 들면 Top Process 목록 요청)을 보낼때 사용됩니다.
      • 연결은 UDP, TCP 모두 Agent가 수행하며, 따라서 Agent와 Collector 사이에 방화벽등이나 보안 정책이 적용되어 있다면 TCP및 UDP 6100 포트가 허용되어 있어야 합니다.
  • Host Agent를 시작합니다.
    • ./host.sh(또는 host.bat)
    • 정지할 경우는 ./stop.sh (또는 stop.bat)를 수행합니다.
  • Host Agent가 잘 실행되었다면, 앞에서 실행한 Scouter Client에서 확인이 가능합니다.
  • 여기서는 OSX에서 테스트 중이라 Mac 아이콘이 나왔습니다. 우측의 숫자(%)는 CPU 사용량을 나타냅니다.
  • 이쯤에서 Default Object Type을 맞춰주는 것이 편한데요, Client의 메뉴중 환경설정(Preferences) 메뉴로 들어갑니다.
  • 이 예제는 Mac에서 진행하는 중이므로, 저는 default Host를 OSX 그리고 default JavaEE를 tomcat으로 맞추겠습니다.
    scouter default object type setting
    • Scouter의 화면 구성 및 배치는 사용자가 자유롭게 변경이 가능합니다.
    • 그리고 이를 여러개 저장할 수 있는데 이 화면 배치를 Perspective라고 합니다.
    • 위 그림에서 설정한 default type은 기본 Perspective에서 사용됩니다.
      (예를 들어 default Host가 OSX로 설정되었다면 기본 Perspective에서 OSX type의 CPU View가 보여집니다.)
  • "Default Object Type"을 적절히 설정한 후 저장하면 설정한 type에 맞게 Perspective가 재구성 됩니다.(reset은 기본 Perspective에서만 가능합니다.)
  • 그러면 이제 "CPU-OSX" View에서 CPU가 모니터링 되는 것을 확인할 수 있습니다.
  • 위 View에서 그래프를 클릭하게 되면 시간 및 값이 보여지게 됩니다.
  • 그리고 Status Bar에는 선택한 View에 대한 상세 정보가 나타납니다.
    scouter client view & status bar

5. Java Agent 실행

Java Agent는 단독으로 실행되는 것이 아니라, 모니터링할 Java Program이 실행될때 attach되어 모니터링을 수행합니다.
따라서 실행하는 Java Program에서 scouter agent를 인식할 수 있도록 명령행 옵션을 설정해야 합니다.
  • -javaagent:/[somewhere]/scouter.agent.jar
그리고 하나의 VM에 여러개의 java 프로그램을 실행한다면 보통 scouter agent의 환경설정 파일경로와 이름을 지정해주게 됩니다.
  • 설정 파일 경로 지정
    • -Dscouter.config=/[somewhere]/mySampleConfig.conf
    • 설정 파일 경로를 지정하지 않은 경우 기본값
      • [directory of scouter.agent.jar]/conf/scouter.conf
  • 모니터링 대상(object) 이름 지정
    • -Dobj_name=scouterWebDemo1
    • 기본값 : java1 또는 tomcat1

데모를 위해 Spring boot로 작성된 간단한 샘플 프로그램에 java agent를 실행해 보겠습니다.
  • 샘플 프로그램은 다음 경로에서 다운로드 받을 수 있습니다.
  • 제공되는 어플리케이션은 java -jar scouter-web-demo-[verions].jar 명령어로 실행할 수 있으며, 8080 포트로 웹 어플리케이션이 시작됩니다.
  • 여기서는 scouter 명령행 옵션을 포함하여 jar 파일을 실행합니다.
    java -javaagent:/demo/scouter/agent.java/scouter.agent.jar -Dobj_name=scouterWebDemo1 -DScouter.config=/demo/scouter/sample/conf/scouterWebDemo1.conf -jar ./scouter-web-demo-1.0.0.jar
    Scouter java agent command sample
  • 정상적으로 scouter agent가 포함된 상태로 spring boot 어플리케이션이 실행되면, object view에서 이를 확인할 수 있습니다.
    • Scouter에서는 모니터링 대상을 object라고 부릅니다.  
  • 브라우저를 열고, http://localhost:8080/user/user0001 을 호출해보면 Scouter client를 통해 요청의 상세 정보를 확인할 수 있습니다.


이제 모든 설치가 완료되었습니다.


다음 글에서는 Scouter로 어떠한 값들을 모니터링 할 수 있는지 알아보도록 하겠습니다.

댓글

  1. 안녕하세요 스카우터 잘 사용하고 있는데요.
    Tomcat 위에 올라가는 Application 은 모니터링이 잘 되는데...
    -jar 로 실행하는 단독 어플리케이션(소켓 서버)은 서버에 감지는 되는데 모니터링이 안됩니다.
    혹시 추가설정을 해줘야할 것이 있나요...???

    답글삭제
    답글
    1. 모니터링할 지점(method)을 지정해 주어야 합니다. hook_service_patterns 옵션으로 지정합니다.

      삭제
  2. 스카우터 구성을 하려고 하는데. OS 단 리소스에 대한 모니터링은 되나 TOMCAT 에 대한 모니터링은 바인딩이 안되더라고요 혹시. 어떤 부분을 확인하면 될지 ????

    답글삭제
  3. 고객서버에 설치를 해달라고 하는데 설치지원 가능하신지요?
    부탁드립니다...
    메일 주시면 감사하겠습니다

    답글삭제
    답글
    1. 오픈소스 컨설팅에 관련하여 기술지원이나 섭스크립션 모델등이 있는걸로 알고 있습니다. 한번 연락해 보세요.

      삭제
  4. 안녕하세요,

    Scouter Server
    Default: admin / admin
    기본 암호를 변경하고 싶습니다.

    conf/account.xml file 파일에서 설정하는 것 같은데,



    pass 의 hash 값을 어떻게 만들면 되나요?

    미리 감사 드립니다.

    답글삭제
    답글
    1. 암호는 설치후에 스카우터 클라이언트를 통해서만 변경이 가능합니다.

      삭제
  5. 안녕하세요. 정성껏 써주신 포스팅을 읽고 OS 리소스 관제까지는 설치 완료하였습니다.
    남겨주신 WEB SAMPLE 로 실행하였을때도 정상적으로 TOMCAT 사용량이 관제가 되었는데, 제가 만들어둔 서버의 TOMCAT 을 관제하려고 하니. 어떤 JAR 파일을 실행시켜서 관제를 해야할지 모르겠습니다.

    궁금한내용은 관제를 위한 명령어중
    java -javaagent:/demo/scouter/agent.java/scouter.agent.jar -Dobj_name=scouterWebDemo1 -DScouter.config=/demo/scouter/sample/conf/scouterWebDemo1.conf -jar ./scouter-web-demo-1.0.0.jar


    -jar ./scouter-web-demo-1.0.0.jar 이부분을 제가 구현한 TOMCAT 에서 어떤 파일로 실행해야할 지를 잘 모르겠습니다. JSP 로 구현되어있는 TOMCAT 입니다. 답변 부탁드립니다.

    답글삭제
    답글
    1. jvm 옵션 설정한 스크립트등에 넣으면 됩니다. 어떻게 톰캣을 구성하고 띠우는지에따라 달라질텐데요.
      이 문서에서는 catalina 에 설정했습니다. https://github.com/scouter-project/scouter/blob/master/scouter.document/main/Setup.md

      삭제
    2. 답변 감사합니다. 하지만 알려주신 URL 대로 동일하게 진행했지만 모니터링이 되지 않습니다.
      혹시 관련된 내용의 동영상이나 TOMCAT 에 적용된 내용이 없을까요?

      삭제
  6. Hi,
    Does the Scouter collect any data and sends it to you (as the application creator) or any other external receiver?
    Thanks in advance for your answer.

    답글삭제
    답글
    1. 작성자가 댓글을 삭제했습니다.

      삭제
    2. No. not any data is sent to external.

      삭제
  7. 안녕 하세요 JEUS 에 SunOS 환경인데 몹니터링이 가능 한지 궁금 합니다 그리고 Scouter Server (Collector ) 를 Sun OS 에 설치 가능 할까요 ?

    답글삭제
  8. 당연히 모니터링/설치 가능합니다...리소스만 충분하다면

    답글삭제
  9. WARNING: An illegal reflective access operation has occurred
    WARNING: Illegal reflective access by com.sun.xml.bind.v2.runtime.reflect.opt.Injector (file:/c:/scouter-all-2.7.0.tar/scouter/server/./lib/jaxb-impl-2.3.0.1.jar) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int)
    WARNING: Please consider reporting this to the maintainers of com.sun.xml.bind.v2.runtime.reflect.opt.Injector
    WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
    WARNING: All illegal access operations will be denied in a future release

    startup.bat을 실행시키면 이와같은 오류가 발생하는데 이유가 뭘까요 ㅠㅠ

    답글삭제
  10. 감사합니다. 덕분에 스프링부트에 잘 적용해봤어요^^ 인터넷 글 중에 가장 잘 설명해 놓은 포스트네요!

    답글삭제
  11. 잘 만들어 놓으신 정보 잘 봤습니다. 궁금한게 있는데요.

    Scouter를 사용해서 app이 돌아가고 있는 두 node간에 node1-to-node2 네트워크 속도 (throughput in MB/s)와 그중에서 app이 얼마나 bandwidth를 사용하는지 app-to-app 속도를 측정할 수 있나요?

    그리고, Kubernetes를 사용할 경우, node1-to-node2 대신에 pod1-to-pod2 속도 측정도 가능한가요? 미리 감사드립니다.

    답글삭제
  12. AWS 에 적용을 해보려고 하는데, 클라이언트 로그인 하려고 할때마다 에러가 뜨네요. 서버 IP는 AWS 서버 IP를 넣어야 하는건가요?

    답글삭제
  13. 혹시 agent(서버) -> agent(DB)와 같이 데이터를 전송하는 방법이 있을까요
    공식 서비스 흐름도를 보면 tomcat(.app) -> MYSQL(DB)이런 식의 흐름도가 있어서요

    답글삭제
    답글
    1. 직접적으로 연결할수는 없고 서버 플러그인을 제작하면 필요한 데이터를 db로 저장할 수 있습니다.

      삭제

댓글 쓰기

이 블로그의 인기 게시물

Scouter APM 소소한 시리즈 #4 - XLog 활용 - 상세기능

Java의 동시성 개선을 위한 Project Loom은 reactive streams를 대체할 것인가?