Scouter APM 소소한 시리즈 #2 - 기본 항목 모니터링(1/2)

Scouter is an APM optimized for developers.
Scouter APM 소소한 시리즈 2번째 글입니다.
이번 글에서는 Scouter를 이용한 기본적인 모니터링 방법에 대해 알아보도록 하겠습니다.

뭔가 Tip 위주의 연재를 진행하려고 했는데, "설치쪽은 좀 자세히 써야겠다..." 라고 생각하며 쓰다가 거의 매뉴얼 스타일로 글이 진행되는 것 같습니다.
이렇게 된 이상 그냥 이대로 쭉~ 진행하고, 향후에 "진정 소소한 시리즈"를 다시 연재하던지 아니면 유용한 Tip들을 여기에 어떻게든 잘 녹여보던지 해야 할 것 같습니다.

1. "Performance Counter"와 "Object Request"

Scouter에는 모니터링 항목을 크게 두가지로 구분합니다.
"Performance Counter", 그리고 "Object Request" 입니다.
"Performance Counter"는 시간에 따라 변하는 값을 실시간 차트 형태로 보여주며, "Object Request"는 사용자가 특정 성능 정보를 요청하여 조회하는 기능입니다.
그리고 보통 "Performance Counte"r에 포함하기도 하지만, 그 성격이 전혀 다른 특수한 몇가지 기능이 있습니다. (XLog, Active Service EQ 등)
이러한 기능은 조금 복잡한 부분이 있으므로 다른 포스트에서 다루도록 하겠으며 여기서는 기본적인 모니터링 항목에 대해서 설명하도록 하겠습니다.

이러한 기능들은 상단메뉴에서도 접근이 가능하지만 "Object View"에서 콘텍스트 메뉴에서 접근하는 것이 더 직관적입니다.

1.1 Performance Counter

Performance Counter는 시계열 성능메트릭을 의미합니다.
  • Counter View를 Collector의 콘텍스트 메뉴에서 여는 경우, 해당 Object Type의 인스턴스 전체에 대해 하나의 차트로 보여줍니다.
    (예를 들어 TPS 차트를 선택한 경우 동일한 Object Type인 tomcat1, tomcat2, ... tomcatX 에 대한 TPS가 하나의 차트로 보여집니다.)
  • 각 Object의 콘텍스트 메뉴에서 여는 경우에는 해당 Object에 대한 Counter View만 보여줍니다.
  • 어떠한 View는 Collector 메뉴에서만 열 수 있거나 혹은 Object 메뉴에서만 열 수 있습니다.
    • XLog 및 Active Service EQ등은 Collector 메뉴에서만 열 수 있습니다.
    • Heap Total Usage, Sys/User CPU등은 Object 메뉴에서만 열 수 있습니다.
context menu for scouter's performance counter
<그림. Collector의 콘텍스트 메뉴에서 Performance Counter 열기>

context menu for scouter's performance counter
<그림. 개별 Object의 콘텍스트 메뉴에서 Counter 열기>

  • Scouter에서 중요한 개념중의 하나가 Object Family와 Object Type(monitoring group type)입니다.
  • Object Family는 모니터링 항목 특성에 따른 모니터링 대상의 종류를 나타냅니다. 예를 들면 Host와 Java를 Object Family로 볼 수 있습니다.
  • Object Type(monitoring group type)은 Family의 하위 개념으로써, 예를 들어 Object Family가 Host라면 이 하위의 Object Type은 Linux, Windows등이 될 수 있고, Java라면 tomcat, jetty 등이 될 수 있습니다.
  • 또한 Object Type은 사용자 지정이 가능합니다.
    이를 이용해 한번에 모니터링 할 대상을 동일한 Object Type으로 묶기도 합니다.
  • 위 두가지 개념은 Scouter에서 중요하게 다루어지므로 기억하고 있는게 좋습니다.
    주로 Family는 모니터링 항목에 관련되어 있으며, Type"어떠한 대상들을 하나의 차트에서 모니터링 할 것인가"와 관련이 있습니다. 
Scouter 1.7 이상에서는 "Object Type" 이라는 용어 대신 "Monitoring Group Type" 이라는 용어를 사용하기도 합니다.

1.2 Object Request

Performance counter는 시계열 성능 메트릭을 보여줍니다.
반면에 Object request는 원하는 시점에 사용자가 각 Object들에 특정 정보를 요청하는 기능입니다.
요청할 수 있는 정보는 당연히 Object Family에 따라 달라집니다.

Object Request는 각 모니터링 대상(Object)의 콘텍스트 메뉴에서 사용이 가능합니다.

context menu for scouter's object request

2. Host 모니터링

2.1 Host의 성능 Counter

  • Counter의 항목명으로 알 수 있으므로 따로 설명하지 않습니다.
Scouter Host's performance counters(metrics)
<그림. Host의 성능 Counter>

2.2 Host의 Object Request에서 제공하는 기능

scouter object request for host
  • Env
    • OS의 환경 변수를 조회합니다.
  • Disk Usage
    • Disk 사용량을 조회합니다.
  • Top
    • 요청 시점의 Process를 조회합니다.
scouter object request view for top process monitoring
<그림. Top Process 조회>


3. Java 모니터링

3.1 Java 모니터링에서 제공하는 성능 Counter#1

Counter의 이름으로 대부분 파악이 가능하므로 부가적인 설명이 필요한 것들에 대해서만 언급하도록 하겠습니다.
Scouter performance counters(metrics) for java
<그림. Java 성능 Counter #1>

  • Active Service
    • 측정 순간에 서버에서 동시에 실행중인 서비스의 개수를 의미합니다.
  • Elapsed90%
    • 90%로 느린 응답시간을 나타냅니다.(예를 들어 100개의 요청이 들어왔다면 이중 90번째로 느린 요청의 응답시간입니다.)
  • Process CPU
    • 해당 Java process가 사용하는 CPU% 입니다.
  • Queuing Time
    • Java 프로그램(주로 Servlet container인 경우)의 앞단의 reverse proxy나 gateway 서버로부터 java 프로그램으로 요청이 들어오기 까지의 시간을 의미합니다.
      (reverse proxy나 gateway 서버에 특별한 설정이 필요합니다.)
  • Recent User
    • 일반적으로 말하는 concurrent user와 유사한 개념입니다.
      HTTP로 서비스되는 환경에서는 concurrent user라는 개념이 모호하므로, Scouter에서는 최근 5분간 1번이라도 요청을 보낸 사용자수를 Recent User라는 개념으로 제공합니다.
      (측정 시간은 설정으로 변경 가능하며, 유니크 사용자를 cookie, header, ip 등으로 판단하는 옵션 제공)
  • Today Visitor
    • 특정 날짜의 유니크 방문자 수를 보여줍니다.

3.2 Java 모니터링에서 제공하는 성능 Counter#2

Java 모니터링에서는 기본적인 시계열 차트외에 어플리케이션에 대해 보다 상세한 정보를 제공하는 몇가지 차트가 존재합니다.

  • Active Service EQ
    • 현재 시점에 얼마나 많은 서비스가 동시에 수행되는지를 한 눈에 파악하기 위한 이퀄라이저 형태의 차트입니다. 이 차트를 더블클릭하게되면 현재 수행되는 서비스를 "Active Service View"에서 목록 형태로 보여주게 됩니다.
<그림. Active Service EQ>
  • Active Service View
    • 현재 시점에 서버에서 수행중인 서비스 목록 및 이에 대한 상세 정보입니다.
      서비스명 및 수행중인 SQL이나 호출하고 대기중인 원격 Service URL이 보여지게 되며, 코드의 어떤 부분이 수행중인지 알 수 있도록 StackTrace 및 Thread의 Lock 정보등이 제공됩니다.
<그림. Active Service Detail>
  • XLog
    • 모든 요청에 대해 scatter 차트형태로 보여주며 이를 통해 어플리케이션의 상태를 직관적으로 파악할 수 있습니다.
      XLog 차트를 통해 어플리케이션 상태를 파악하고, 상세한 정보는 개별 요청의 Profile View에서 확인하게 됩니다.
      Scouter의 제품 목표 중 하나가 XLog 차트를 이용하여 어플리케이션에서 발생하는 문제를 빠르게 확인하고 원인을 찾아내는 것이기 때문에 여기서 제공하는 기능이 상당히 많습니다.
      XLog 차트에 대한 설명은 다른 글에서 다시 한번 상세히 설명하도록 하겠습니다.
<그림. XLog View>

<그림. XLog List View>


<그림. Profile View>

3.3 Java 모니터링에서 제공하는 Object Request




  • Thread List
    • 해당 Java Process의 Thread 목록을 테이블 형태로 보여줍니다.
  • Active Service List
    • 요청 시점에 실행중인 Service 목록을 보여줍니다. Active Service EQ를 더블 클릭해서도 접근할 수 있습니다.
  • Loaded Class List
    • 로드한 Class의 목록을 보여줍니다.
    • 변경한 Hooking 옵션을 Runtime에 적용하기 위해 Class를 Redefine 하는 기능을 제공합니다.
  • Heap Histogram
    • Heap Histogram을 보여줍니다.
  • Thread Dump
    • Thread Dump를 보여줍니다.
  • Env
    • JVM의 환경변수를 조회합니다.
  • Socket
    • 해당 Process에셔 연결한 Socket의 정보를 보여줍니다.
    • Socket#connect의 stackTrace 를 생성하고 조회할 수 있습니다.
  • System.GC
    • System.GC()를 호출합니다.
  • Heap Dump
    • Heap Dump를 생성합니다.
  • File Dump
    • 위에서 언급한 기능들을 수행하여 파일로 저장합니다.
  • Object View에서 보여지는 Object들은 일정 시간마다 Collector (Server)로 Heart Beat을 보내게 되어었으며, 일정시간 Heart Beat이 없으면 Inactive Object(회색)로 표시되고 경고 알림이 표시되게 됩니다.
    그런데 만약 정말 사용하지 않는 Object라면 회색으로 남아있는 아이콘을 수동으로 제거해줄 필요가 있습니다.
    이 경우 "Remove Inactive"기능을 통해 제거 하면되는데, 이 버튼이 찾기 애매한 위치에 있습니다.
    많은 분들이 못찾아요. TT :,(
    그래서 아래 이미지를 첨부합니다. ^^ :)
일단 이 정도 기능만 알고 있어도 충분히 Scouter를 잘 사용할 수 있습니다.
하지만 정말 잘 사용하려면 Scouter가 제공하는 다양한 옵션과 기능을 내가 운영하는 시스템에 맞도록 세밀하게 설정하여 사용할 필요가 있습니다.
이러한 설정과 기능들은 앞으로 연재되는 글에서 계속해서 소개할 예정입니다.

다음 글에서는 Scouter의 화면 및 차트의 조작법에 대해 다룹니다. 




댓글

  1. 테스트로 각 서버마다 obj_name을 줘서 object를 여러개 만들어놨는데 테스트후 스카우터를 사용하지 않음에도 계속 object에 이름이 나오는데 삭제가 안될까요.? 설정파일을 뒤져봐도 못찾겠어요

    답글삭제
    답글
    1. 클라이언트의 오브젝트뷰 아이콘 메뉴의 아래로향하는 확장 삼각형 버튼에 인액티브 오브젝트를 제거하는 기능이 있습니다

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

    답글삭제
  3. Hi. I've been using Scouter for some time now to monitor a series of applications running in a tomcat server. Everything is working ok, but now I want to go to the "next level" adding alerts when a service has being running for long time. I already read the alerts guide and have some alerts. In particular I think that the ones that could fit my needs are maybe "Elapsed Time" or "Active Service". I've been playing a little bit with both of them but cannot get information regarding the service that is currently running.

    I can see the service name or URL in the Active Service List in the Scooter UI, but what I really want to do is to get an email when a service has run for a certain number of minutes. I'm already using the scouter-plugin-server-alert-email, it is woking, but I'm still not able to get the service's name. So, I was wondering, is actually a way to get it?

    Thanks in advance.

    답글삭제
  4. 안녕하세요 scouter 를 너무 잘 사용하고 있는 사용자 입니다. 이렇게 좋은 모니터링 프로그램을 만들어 주셔서 감사합니다. 최근에 netty 기반인 Spring Cloud Gateway 를 추가해서 모니터링 하고 있는데요. Active Service EQ의 Count가 줄어들지 않는데 제가 뭔가 설정을 제대로 못한 걸까요?

    답글삭제

댓글 쓰기

이 블로그의 인기 게시물

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

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

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