메뉴 건너뛰기

Extra Form
출처 https://team-platform.tistory.com/25

스카우터에서는 성능 모니터링 중 생긴 특정 상황에 대해 얼럿 기능이 들어가 있다.
스카우터 클라이언트의 얼럿항목에서 확인 및 조회가 가능하다.
하지만 항상 보고 있을수는 없는 상황에서, 얼럿을 스카우터 외부에서 받기를 원한다면 어떻게 해야 할까.

스카우터의 커스텀 플러그인으로 해결이 가능하다.
이런 상황에 맞추어 사용자가 직접 플러그인을 개발해서 넣을수 있도록 내부 API를 가지고 있고, 
이를 활용할 수 있는 커스텀 플러그인 구조를 가지고 있다.

우선 스카우터의 플러그인에 대해 알아보도록 하겠다.



스카우터의 플러그인

스카우터의 서버 플러그인은 크게 2가지 종류이다.
스크립트 형식으로 된 스크립팅 플러그인과 java의 jar 파일 형식으로 된 빌트인 플러그인이다.

스크립팅 플러그인은 파일에 java 문법으로 이루어진 스크립트를 넣어서 적용할 수 있다.
빌트인 플러그인의 경우 jar 파일로 이루어진 자바 프로젝트이다.
정해진 형식에 맞게 프로젝트를 만들고 내부 로직은 자유롭게 개발해서 사용할 수 있다.

이번 글에서는 2가지 방식 중 빌트인 플러그인 방식에 대해서 알아보려고 한다.
2가지 방식의 스카우터 플러그인 외에 에이전트에 적용하는 플러그인도 있다. 더 자세한 정보는 아래 링크에서 확인 가능하다.

처음 접하는 입장에서 플러그인을 처음부터 만드는것은 쉽지 않다.
그래서 스카우터를 사용하는 능력자들께서 손수 만드신 플러그인들을 공유하고 있다.
https://github.com/scouter-project 이곳에서 scouter-plugin 으로 시작하는 프로젝트 들이다.

확인해보고 필요한 것이 있다면 학습해보는 것도 좋을것이다.



빌트인 플러그인 적용방법

  1. 플러그인 프로젝트를 jar 파일로 만든다(빌드 방법은 아래에서 다룬다.)
  2. ./server/lib 폴더 아래에 jar 파일을 넣어준다.
  3. 스카우터 수집기 서버를 재기동 한다. (./server.startup.sh)



얼럿 플러그인

얼럿을 외부로 보내기 위한 플러그인은 매체에 따라 구분된다. email, slack, line, telegram, teamup(?) 등이 있다.
매체가 다른 플러그인이지만, 대부분 로직은 비슷하고 발송 단계의 로직만 다르기 때문에 원하는 발송 매체가 있다면 커스터마이징도 가능하다.

이번 글에서는 다양한 발송 매체 중에 슬랙을 이용하는 플러그인을 가지고 설명하려고 한다.
해당 플러그인의 깃헙 주소는 아래와 같다.

이 얼럿 플러그인으로 받을수 있는 알림은 아래와 같다.
  • CPU of Agent (warning / fatal)
  • Memory of Agent (warning / fatal)
  • Disk of Agent (warning / fatal)
  • connected new Agent
  • disconnected Agent
  • reconnect Agent



얼럿 플러그인 적용하기


1.  플러그인 빌드

적용하기 위해서는 얼럿 플러그인 프로젝트의 jar 파일이 필요하다.
클론을 받고, jar 파일로 빌드하자(macos 기준..)
git clone https://github.com/scouter-project/scouter-plugin-server-alert-slack.git
cd scouter-plugin-server-alert-slack/
mvn package

문제없이 빌드가 완료되었다면,
target 디렉토리에 scouter-plugin-server-alert-slack-1.0.1-SNAPSHOT.jar 라는 파일이 생성되어 있을 것이다.
이 파일을 스카우터 수집기 서버 디렉토리 아래 lib 폴더에 복사한다. (스카우터를 설치한 디렉토리에서 ./server/lib 이다)


2. 플러그인 설정

스카우터 수집기 서버의 설정 파일을 수정해야 한다.
별도의 변경이 없다면 경로는 아래와 같다.
./server/conf/scouter.conf
얼럿 플러그인을 사용하기 위해 필요한 설정값은 아래와 같다.
내용을 참고해서 환경에 맞게 내용을 추가해 준다.

ext_plugin_slack_send_alert : 발송기능을 사용할지 여부. true/false
ext_plugin_slack_debug : 메시지를 로깅 할지 여부. true/false
ext_plugin_slack_level : 로깅 레벨. (0=info, 1=warn, 2=error, 3=fatal)
ext_plugin_slack_webhook_url : 슬랙 웹훅 url
ext_plugin_slack_channel : 채널명 (ex. #test1) 혹은 사용자명(ex. @user_id)
ext_plugin_slack_botName : 알림을 보낼 봇 이름
ext_plugin_slack_icon_emoji : 봇 아이콘
ext_plugin_slack_xlog_enabled : xlog 얼럿 활성화 여부 true/false
ext_plugin_elapsed_time_threshold : 응답시간의 임계치. 이 값 보다 큰 응답시간에 반응한다
ext_plugin_gc_time_threshold : gc 시간 임계치. 이 값보다 큰 gc 시간이 걸리면 반응한다
ext_plugin_thread_count_threshold : 쓰레드 갯수 임계치. 쓰레드 갯수가 임계치 보다 커지면 반응한다.

적용해 사용하고 있는 설정은 아래와 같다.
# External Interface (Slack)
ext_plugin_slack_send_alert=true
ext_plugin_slack_debug=true
ext_plugin_slack_level=0
ext_plugin_slack_webhook_url=http://mydonain.com/hooks/1234CCSReKgN23wiw/dtCGozaNPAA41234yiCnhnpcNQCA7BSrkjqmFmsy3nMuKk95
ext_plugin_slack_channel=#alert_channel
ext_plugin_slack_botName=scouter
ext_plugin_slack_icon_emoji=:computer:
ext_plugin_slack_icon_url=https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQnQFLCYQ-rg_iJFXBzazZjUqMXTHPmTQ-AVU_JymsxleUHI1Oe
ext_plugin_slack_xlog_enabled=true
ext_plugin_elapsed_time_threshold=3000
ext_plugin_gc_time_threshold=5000
ext_plugin_thread_count_threshold=300

3. 적용하기

서버를 재기동 하면 적용된다.
./server/startup.sh



플러그인 커스터마이징

얼럿 플러그인을 사용하면서, 기능상 변경이 필요한 상황이 종종 찾아왔다.

예를들어,
스카우터에서 모니터링 하고 있는 서비스 중, 일부 서비스의 요청은 기본 응답시간이 1분이 넘어갈 정도로 오래 걸리게 만들어져 있었다.
응답시간 임계치 보다 크다보니 이 요청이 호출 될 때마다 응답시간 초과로 얼럿이 오게 되었다.
스카우터 전체 응답시간 임계치를 늘리면 기존에 10ms 이내로 처리되는 요청들의 응답이 느려질 때 얼럿을 받지 못하게 되어서 문제가 되었다.

이런식으로 얼럿 조건이 특수한 상황에 맞게 설정 되어야 할 때, 소스를 직접 수정하여 해결 할 수 있다.

대부분의 로직은 SlackPlugin.java 에 있다.

이 클래스의 메소드는 아래와 같은 용도를 가진다.

  • alert : 얼럿 발송
  • object : 에이전트 연결/연결끊김/재연결 얼럿 처리
  • xlog : xlog 에 에러로 표시된 건에 대한 얼럿 처리
  • counter : gc 타임 임계치 값에 대한 얼럿 처리
나의 경우 xlog 에서 응답시간 임계 초과 때 오는 얼럿을 서비스 마다 따로 설정하고 싶었다.
xlog 메소드 쪽에  분기를 추가해서 처리했다. 로직을 만들 때 사용한 내용은 아래와 같다.

  • elapsedThreshold 변수에는 아까 설정한 ext_plugin_elapsed_time_threshold 값이 들어있다. 기본 3초이다.
  • XlogPack 객체로 이루어진 pack 변수에는 xlog의 각 요청을 정보가 들어있다.
  • pack 변수에는 http 요청에 대한 엔드포인트 URL 정보와  지연된 응답시간 정보가 있다.

기존 코드의 264라인 근처에 수정을 하였다.
아래는 특정 엔드포인트에 대해서만 지연 응답시간 기준을 60초로 설정하는  분기를 추가한 코드이다.
try {
      int elapsedThreshold = conf.getInt("ext_plugin_elapsed_time_threshold", 0);
      if (elapsedThreshold != 0 && pack.elapsed > elapsedThreshold) {
         String serviceName = TextRD.getString(DateUtil.yyyymmdd(pack.endTime), TextTypes.SERVICE, pack.service);
         if (
                 AgentManager.getAgentName(pack.objHash).equals("/192.168.123.111/endpoint1")
                 || AgentManager.getAgentName(pack.objHash).equals("/192.168.123.111/endpoint2")
               && pack.elapsed < 60000) {
           //얼럿을 보내지 않음.
         } else {
            AlertPack ap = new AlertPack();
            ap.level = AlertLevel.WARN;
            ap.objHash = pack.objHash;
            ap.title = "Elapsed time exceed a threshold.";
            ap.message = "[" + AgentManager.getAgentName(pack.objHash) + "] "
                  + pack.service + "(" + serviceName + ") "
                  + "elapsed time(" + pack.elapsed + " ms) exceed a threshold.";
            ap.time = System.currentTimeMillis();
            ap.objType = AgentManager.getAgent(pack.objHash).objType;
            alert(ap);
         }
      }

수정을 마치게 되면 위에 설명한 방식으로 빌드를 다시 하고,
스카우터 수집기 서버 lib 폴더에 jar 파일을 덮어쓴 뒤 재기동 하면 바로 적용이 된다.

스카우터에서는 플러그인 개발을 위해 내부 API를 잘 정리하여 공유하고 있다.

자신만의 로직이 필요한 상황이라면 내부 API 문서를 참고하여 기존의 플러그인에 수정을 해서 필요에 맞게 사용할 수 있다.

혹은 새로운 플러그인을 새로 만들 수 있을것이다. 결과가 좋다면 커뮤니티에 공유해서 좋은 피드백도 받을 수도 있지 않을까 한다. 

  1. IA, 메뉴구조도, 화면목록

    회사에서 사용자를 위한 서비스가 정의되면, ‘서비스에 어떤 화면들이 필요한지’, ‘각 화면들의 정보(화면 간 관계, 속성, 기능 등)는 어떻게 되는지’ 등을 정리합니다. 이렇게 정리된 화면들의 정보를 토대로 ‘화면 설계’를 진행하고, 이 과정에서 보통 IA(In...
    Date2024.12.18 Reply0 Views327
    Read More
  2. UX의 기본, 와이어프레임은 어떻게 작성하는 것일까

    Wireframe (와이어프레임) 사용자 경험의 기본이자 핵심이라고 할 수 있는 와이어프레임은 기초적인 골격을 통해 만들고자 하는 결과물이 어떤 모습을 할 것인지를 예상해 볼 수 있는 중요한 문서입니다. 그렇다면 와이어프레임은 어떻게 작성해 나가는 것일까...
    Date2024.12.05 Reply0 Views396
    Read More
  3. 웹, 모바일을 위한 I.A(Information Architecture, 정보구조도)

    서비스 설계의 기초인 정보 구조도(Information Architecture) 에 대해서 알아보겠습니다. I.A.의 기초 이론과 역할 그리고 구조도 작성법에 대해 알아보도록 하겠습니다. I.A(정보 구조도)란?I.A.는 간단하게 말해서 서비스의 목차 역할을 수행합니다. 웹 혹...
    Date2024.12.05 Reply0 Views379
    Read More
  4. (웹 용어) GNB, LNB, SNB, FNB

    웹사이트에서 유저의 서비스 탐색을 도와주는 카테고리. 서비스를 찾은 유저가 원하는 것을 쉽게 찾아낼 수 있게 직관적인 UI 구성이 필요한데요. 내비게이션 바라고 불리는 이 카테고리 영역은 위치와 역할에 따라 GNB, LNB, SNB, FNB 등으로 나눌 수 있어요...
    Date2024.12.04 Reply0 Views373 file
    Read More
  5. No Image

    [Spring] Annotation

    Annotation 이란? 사전적 의미로는 주석이라는 뜻이지만, 자바에서 Annotaion(@)은 코드 사이에 특별한 의미, 기능을 수행하도록 하는 기술이다. 프로그램 코드의 일부가 아닌 프로그램에 관한 데이터를 제공하고, 코드에 정보를 추가하는 정형화된 방법이다. ...
    Date2024.11.23 Reply0 Views421
    Read More
  6. No Image

    iBatis, MyBatis 비교 정리(Dynamic Query)

    iBatis와 MyBatisiBatis( ~ 2.3)의 버전이 변경되면서 MyBatis(2.5 ~)로 변경이 되었다. Apache project팀에서 google code 팀으로 이동하면서 명칭이 변경 변경된 사항들을 정리해보면 아래와 같다. Java 요구 버전Java 요구버전도 iBATIS는 JDK 1.4 이상에서...
    Date2024.11.13 Reply0 Views390
    Read More
  7. Git / Github / 포크 (Fork) 하는 방법 (오픈소스 프로젝트 복...

    Fork란? 오픈 소스 프로젝트를 공부하거나 Contributors가 되고 싶을 때, 해당 원격 저장소(Remote Repository)를 자신의 원격 저장소로 복사할 수 있다. 이를 Fork라 한다. 깃허브의 경우 공개된 모든 자료가 오픈 소스로 다른 사람의 자료를 Fork 할 수 있다...
    Date2024.10.19 Reply0 Views558 file
    Read More
  8. No Image

    VBA, Range/Cells Text, Value, Value2 차이점

    VBA 프로그래밍의 기본은 특정 영역 또는 셀을 선택하는 것으로 시작될 것입니다. 단위 셀을 선택하는 방법은 다음 중 편한 방법을 선택하면 됩니다. Range(A5) = Cells(5, 1) = Cells(5, "A") Range와 Cells의 차이는 다중 영역을 선택할 수 있는지 여부 입니...
    Date2024.10.14 Reply0 Views1871
    Read More
  9. VBA VLookup 가이드

    이 포스트는 Excel Macro Mastery 사이트의 'VBA VLookup – A Complete Guide(by Paul Kelly)'의 내용을 다시 정리한 것입니다. 이번 포스트에서는 VLookup 함수를 VBA 스크립트에서 사용하는 방법에 대해 다룹니다. 들어가며 이번 포스트에서는 VLookup 함수...
    Date2024.10.04 Reply0 Views475 file
    Read More
  10. No Image

    VBA 엑셀 - 북 선택(Workbooks)북(Workbooks), 시트(Sheet) 선택

    VBA를 이용해 북(Book)과 시트(Sheet)를 선택하는 기능에 대해 알아보겠습니다. 일반적으로는 엑셀(Excell) 프로그램을 그냥 엑셀 또는 윈도우라고 하지만 VBA에서는 이 엑셀 프로그램 1개를 Book이라고 생각합니다. 주로 다른 북(Book) 선택 또는 종료를 위해...
    Date2024.09.28 Reply0 Views512
    Read More
  11. 컬렉션(Collections)

    1. 컬렉션(Collections) 1.1 컬렉션이란? : 컬렉션이란 우리말로 쉽게 말해서 자료구조이다. 더 쉽게 말하면 배열이다. 1.2 자료구조 1.3 컬렉션의 핵심 인터페이스와 특징 인터페이스 특징 List 순서가 있는 데이터의 집합, 데이터의 중복을 허용한다. 예) 대...
    Date2024.09.26 Reply0 Views484 file
    Read More
  12. 스테이징 서버(Staging Server)

    2022. 7. 26. 01:26 주요 개념개발 서버(Development Server) 스테이징 서버(Staging Server) 프로덕션 서버(Production Server) 스테이징 서버(Staging Server)란 Production으로 가기 전 임시서버라 볼 수 있다. 즉, 운영환경에 적용하기 전에 확인하는 서버...
    Date2024.09.14 Reply0 Views585 file
    Read More
  13. 배포(deploy) 아키텍처 - 배포 코스

    배포(deploy) 아키텍처 - 배포 코스 2008. 10. 2. 16:29 리소스설정치환에 관한 글에서 얘기했듯이 개발소스와 빌드결과물은 여러 서버를 거치면서 생성,이동,배치됩니다. 개발자 로컬PC -> (소스저장소) -> 빌드서버(CI서버) -> 개발서버 -> 테스트서버 -> 스...
    Date2024.09.14 Reply0 Views495 file
    Read More
  14. Nginx란

    Nginx(엔진엑스)는 높은 성능과 안정성 그리고 현재 가장 많이 사용되고 있는 웹 서버입니다. Apache(아파치) 같은 웹 서버와 비교하면 더 빠르고 가볍고, 대규모 애플리케이션 처리에 적합하다는 장점이 있습니다. Nginx를 이해하기 위해서는 다음 4가지 용어...
    Date2024.07.14 Reply0 Views486 file
    Read More
  15. 인기 높은 아파치 HTTP 서버에서 발견된 취약점 패치돼

    인기 높은 아파치 HTTP 서버에서 발견된 취약점 패치돼 요약 : 보안 블로그 시큐리티어페어즈에 의하면 아파치재단(Apache Foundation)에서 다수의 취약점을 패치했다고 한다. 아파치 HTTP 서버(Apache HTTP Server)에서 발견된 것들로, 가장 눈에 띄는 건 CVE...
    Date2024.07.11 Reply0 Views509 file
    Read More
  16. 데이터센터, 데이터통합관리를 위한 nSIMS 소개

    nSIMS 도입사례 - 국가정보자원관리원 (NIRS) 도입배경 국가정보자원관리원(구 정부통합전산센터)은 2005년 세계 최초의 범정부데이터센터로서 흩어져 있던 전자정부 시스템을 한곳에 모으는 역할을 했습니다. 현재는 정부 기관의 자료들을 한 곳에서 효율적으...
    Date2024.07.07 Reply0 Views491 file
    Read More
  17. APM, Elevisor(Elevation Advisor) 통합성능관리 및 모니터링툴...

    Elevisor(Elevation Advisor) 는 시스템 성능을 최적화 할 수 있도록 도와주는 통합 성능관리 솔루션으로서. 다음과 같은 제품 군으로 구성되어 있습니다. Elevisor for J2EE 특징 J2EE 표준을 준수하는 모든 WAS 지원 50개 이상의 컨테이너의 독립적 모니터링...
    Date2024.07.07 Reply0 Views554 file
    Read More
  18. APM, Jennifer 제니퍼 소개

    정보 기술 분야 에서 애플리케이션 성능 관리(APM, Application Performance Management)는 개발된 애플리케이션 등을 포함한 소프트웨어 응용 프로그램의 성능 및 가용성을 모니터링하고 관리하는 소프트웨어를 의미합니다. 애플리케이션 성능 관리(APM)는 기...
    Date2024.06.29 Reply0 Views564 file
    Read More
  19. APM, Scouter 스카우터 설치 및 실행(+Jenkins, SpringBoot)

    XLog 보는 방법https://github.com/scouter-project/scouter/blob/master/scouter.document/client/Reading-XLog_kr.md Scouter 에서 응답시간 분포 그래프를 XLog 라고 부른다. XLog 는 Transaction Log 라는 의미에서 2004년에 처음 만들어졌다. XLog 는 전...
    Date2024.06.26 Reply0 Views1086 file
    Read More
  20. No Image

    JAVA APM Scouter 활용 - 3부 스카우터 얼럿 플러그인 커스터마...

    1부 APM 선정과 스카우터의 지표소개 2부 스카우터 기능 활용 및 페이퍼 플러그인 3부 스카우터 얼럿 플러그인 커스터마이징 스카우터에서는 성능 모니터링 중 생긴 특정 상황에 대해 얼럿 기능이 들어가 있다. 스카우터 클라이언트의 얼럿항목에서 확인 및 조...
    Date2024.06.26 Reply0 Views498
    Read More
목록
Board Pagination Prev 1 2 3 4 5 Next
/ 5