메뉴 건너뛰기

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 문서를 참고하여 기존의 플러그인에 수정을 해서 필요에 맞게 사용할 수 있다.

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

List of Articles
번호 제목 날짜 조회 수
87 IA, 메뉴구조도, 화면목록 회사에서 사용자를 위한 서비스가 정의되면, ‘서비스에 어떤 화면들이 필요한지’, ‘각 화면들의 정보(화면 간 관계, 속성, 기능 등)는 어떻게 되는지’ 등을 정리... 2024.12.18 327
86 UX의 기본, 와이어프레임은 어떻게 작성하는 것일까 Wireframe (와이어프레임) 사용자 경험의 기본이자 핵심이라고 할 수 있는 와이어프레임은 기초적인 골격을 통해 만들고자 하는 결과물이 어떤 모습을 할 것인지... 2024.12.05 396
85 웹, 모바일을 위한 I.A(Information Architecture, 정보구조도) 서비스 설계의 기초인 정보 구조도(Information Architecture) 에 대해서 알아보겠습니다. I.A.의 기초 이론과 역할 그리고 구조도 작성법에 대해 알아보도록 하... 2024.12.05 379
84 (웹 용어) GNB, LNB, SNB, FNB 웹사이트에서 유저의 서비스 탐색을 도와주는 카테고리. 서비스를 찾은 유저가 원하는 것을 쉽게 찾아낼 수 있게 직관적인 UI 구성이 필요한데요. 내비게이션 바... file 2024.12.04 373
83 [Spring] Annotation Annotation 이란? 사전적 의미로는 주석이라는 뜻이지만, 자바에서 Annotaion(@)은 코드 사이에 특별한 의미, 기능을 수행하도록 하는 기술이다. 프로그램 코드의... 2024.11.23 421
82 iBatis, MyBatis 비교 정리(Dynamic Query) iBatis와 MyBatisiBatis( ~ 2.3)의 버전이 변경되면서 MyBatis(2.5 ~)로 변경이 되었다. Apache project팀에서 google code 팀으로 이동하면서 명칭이 변경 변경... 2024.11.13 390
81 Git / Github / 포크 (Fork) 하는 방법 (오픈소스 프로젝트 복... Fork란? 오픈 소스 프로젝트를 공부하거나 Contributors가 되고 싶을 때, 해당 원격 저장소(Remote Repository)를 자신의 원격 저장소로 복사할 수 있다. 이를 Fo... file 2024.10.19 558
80 VBA, Range/Cells Text, Value, Value2 차이점 VBA 프로그래밍의 기본은 특정 영역 또는 셀을 선택하는 것으로 시작될 것입니다. 단위 셀을 선택하는 방법은 다음 중 편한 방법을 선택하면 됩니다. Range(A5) =... 2024.10.14 1871
79 VBA VLookup 가이드 이 포스트는 Excel Macro Mastery 사이트의 'VBA VLookup – A Complete Guide(by Paul Kelly)'의 내용을 다시 정리한 것입니다. 이번 포스트에서는 VLookup 함수... file 2024.10.04 475
78 VBA 엑셀 - 북 선택(Workbooks)북(Workbooks), 시트(Sheet) 선택 VBA를 이용해 북(Book)과 시트(Sheet)를 선택하는 기능에 대해 알아보겠습니다. 일반적으로는 엑셀(Excell) 프로그램을 그냥 엑셀 또는 윈도우라고 하지만 VBA에... 2024.09.28 512
77 컬렉션(Collections) 1. 컬렉션(Collections) 1.1 컬렉션이란? : 컬렉션이란 우리말로 쉽게 말해서 자료구조이다. 더 쉽게 말하면 배열이다. 1.2 자료구조 1.3 컬렉션의 핵심 인터페이... file 2024.09.26 484
76 스테이징 서버(Staging Server) 2022. 7. 26. 01:26 주요 개념개발 서버(Development Server) 스테이징 서버(Staging Server) 프로덕션 서버(Production Server) 스테이징 서버(Staging Server)... file 2024.09.14 585
75 배포(deploy) 아키텍처 - 배포 코스 배포(deploy) 아키텍처 - 배포 코스 2008. 10. 2. 16:29 리소스설정치환에 관한 글에서 얘기했듯이 개발소스와 빌드결과물은 여러 서버를 거치면서 생성,이동,배... file 2024.09.14 495
74 Nginx란 Nginx(엔진엑스)는 높은 성능과 안정성 그리고 현재 가장 많이 사용되고 있는 웹 서버입니다. Apache(아파치) 같은 웹 서버와 비교하면 더 빠르고 가볍고, 대규모... file 2024.07.14 486
73 인기 높은 아파치 HTTP 서버에서 발견된 취약점 패치돼 인기 높은 아파치 HTTP 서버에서 발견된 취약점 패치돼 요약 : 보안 블로그 시큐리티어페어즈에 의하면 아파치재단(Apache Foundation)에서 다수의 취약점을 패치... file 2024.07.11 509
72 데이터센터, 데이터통합관리를 위한 nSIMS 소개 nSIMS 도입사례 - 국가정보자원관리원 (NIRS) 도입배경 국가정보자원관리원(구 정부통합전산센터)은 2005년 세계 최초의 범정부데이터센터로서 흩어져 있던 전자... file 2024.07.07 491
71 APM, Elevisor(Elevation Advisor) 통합성능관리 및 모니터링툴... Elevisor(Elevation Advisor) 는 시스템 성능을 최적화 할 수 있도록 도와주는 통합 성능관리 솔루션으로서. 다음과 같은 제품 군으로 구성되어 있습니다. Elevis... file 2024.07.07 554
70 APM, Jennifer 제니퍼 소개 정보 기술 분야 에서 애플리케이션 성능 관리(APM, Application Performance Management)는 개발된 애플리케이션 등을 포함한 소프트웨어 응용 프로그램의 성능 ... file 2024.06.29 564
69 APM, Scouter 스카우터 설치 및 실행(+Jenkins, SpringBoot) XLog 보는 방법https://github.com/scouter-project/scouter/blob/master/scouter.document/client/Reading-XLog_kr.md Scouter 에서 응답시간 분포 그래프를 XLo... file 2024.06.26 1086
» JAVA APM Scouter 활용 - 3부 스카우터 얼럿 플러그인 커스터마... 1부 APM 선정과 스카우터의 지표소개 2부 스카우터 기능 활용 및 페이퍼 플러그인 3부 스카우터 얼럿 플러그인 커스터마이징 스카우터에서는 성능 모니터링 중 생... 2024.06.26 498
목록
Board Pagination Prev 1 2 3 4 5 Next
/ 5