반복영역 건너뛰기
주메뉴 바로가기
본문 바로가기
제품/서비스
EMS Solution
Features
클라우드 관리
AI 인공지능
서버관리
데이터베이스 관리
네트워크 관리
트래픽 관리
설비 IoT 관리
무선 AP 관리
교환기 관리
운영자동화
실시간 관리
백업 관리
APM Solution
애플리케이션 관리
URL 관리
ITSM Solution
서비스데스크
IT 서비스 관리
Big Data Solution
SIEM
Dashboard
대시보드
Consulting Service
컨설팅 서비스
고객
레퍼런스
고객FAQ
문의하기
가격
자료실
카탈로그
사용자매뉴얼
회사소개
비전·미션
연혁
2016~현재
2000~2015
인증서·수상
투자정보
재무정보
전자공고
IR자료
새소식
공고
보도자료
오시는 길
채용
피플
컬처
공고
FAQ
블로그
열기
메인 페이지로 이동
블로그
최신이야기
블로그
최신이야기
사람이야기
회사이야기
기술이야기
다양한이야기
카프카를 통한 로그 관리 방법
메모리 누수 위험있는 FinalReference 참조 분석하기
김진광
2023.10.12
페이스북 공유하기
트위터 공유하기
링크드인 공유하기
블로그 공유하기
[행사] 브레인즈컴퍼니 ‘가을문화행사 2023’
Java에서 가장 많이 접하는 문제는 무엇이라 생각하시나요? 바로 리소스 부족 특히 ‘JVM(Java Virtual Machine) 메모리 부족 오류’가 아닐까 생각해요.
메모리 부족 원인에는 우리가 일반적으로 자주 접하는 누수, 긴 생명주기, 다량의 데이터 처리 등 몇 가지 패턴들이 있는데요. 오늘은 좀 일반적이지 않은(?) 유형에 대해 이야기해 볼게요!
Java 객체 참조 시스템은 강력한 참조 외에도 4가지 참조를 구현해요. 바로 성능과 확장성 기타 고려사항에 대한 SoftReference, WeakReference, PhantomReference, FinalReference이죠. 이번 포스팅은
FinalReference를 대표적인 사례
로 다루어 볼게요.
PART1. 분석툴을 활용해 메모리 누수 발생 원인 파악하기
메모리 분석 도구를 통해 힙 덤프(Heap Dump)를 분석할 때, java.lang.ref.Finalizer 객체가 많은 메모리를 점유하는 경우가 있어요. 이 클래스는 FinalReference와 불가분의 관계에요. 나눌 수 없는 관계라는 의미죠.
아래 그림 사례는 힙 메모리(Heap Memory)의 지속적인 증가 후 최대 Heap에 근접 도달 시, 서비스 무응답 현상에 빠지는 분석 사례인데요. 이를 통해 FinalReference 참조가 메모리 누수를 발생시킬 수 있는 조건을 살펴볼게요!
Heap Analyzer 분석툴을 활용하여, 힙 덤프 전체 메모리 요약 현황을 볼게요. java.lang.ref.Finalizer의 점유율이 메모리의 대부분을 점유하고 있죠. 여기서 Finalizer는, 앞에서 언급된 FinalReference를 확장하여 구현한 클래스에요.
JVM은 GC(Garbage Collection) 실행 시 해제 대상 객체(Object)를 수집하기 전, Finalize를 처리해야 해요.
Java Object 클래스에는 아래 그림과 같이 Finalize 메서드(Method)가 존재하는데요. 모든 객체가 Finalize 대상은 아니에요.
JVM은 클래스 로드 시, Finalize 메서드가 재정의(Override)된 객체를 식별해요. 객체 생성 시에는 Finalizer.register() 메서드를 통해, 해당 객체를 참조하는 Finalizer 객체를 생성하죠.
그다음은 Unfinalized 체인(Chain)에 등록해요. 이러한 객체는 GC 발생 시 즉시 Heap에서 수집되진 않아요. Finalizer의 대기 큐(Queue)에 들어가 객체에 재정의된 Finalize 처리를 위해 대기(Pending) 상태에 놓여있죠.
위 그림과 같이 참조 트리(Tree)를 확인해 보면, 많은 Finalizer 객체가 체인처럼 연결되어 있어요. 그럼 Finalizer 객체가 실제 참조하고 있는 객체는 무엇인지 바로 살펴볼까요?
그림에 나온 바와 같이 PostgreSql JDBC Driver의 org.postgresql.jdbc3g.Jdbc3gPreparedStatement인 점을 확인할 수 있어요. 해당 시스템은 PostgreSql DB를 사용하고 있었네요.
이처럼 Finalizer 참조 객체 대부분은 Jdbc3gPreparedStatement 객체임을 알 수 있어요. 여기서 Statement 객체는, DB에 SQL Query를 실행하기 위한 객체에요.
그렇다면, 아직 Finalize 처리되지 않은 Statement 객체가 증가하는 이유는 무엇일까요?
먼저 해당 Statement 객체는 실제로 어디서 참조하는지 살펴볼게요. 해당 객체는 TimerThread가 참조하는 TaskQueue에 들어가 있어요. 해당 Timer는 Postgresql Driver의 CancelTimer이죠.
해당 Timer의 작업 큐를 확인해 보면 PostgreSql Statement 객체와 관련된 Task 객체도 알 수도 있어요.
그럼 org.postgresql.jdbc3g.Jdbc3gPreparedStatement 클래스가 어떻게 동작하는지 자세히 알아볼까요?
org.postgresql.jdbc3g.Jdbc3gPreparedStatement는 org.postgresql.jdbc2.AbstractJdbc2Statement의 상속 클래스이며 finalize() 메서드를 재정의한 클래스에요. Finalize 처리를 위해 객체 생성 시, JVM에 의해 Finalizer 체인으로 등록되죠.
위와 같은 코드로 보아 CancelTimer는, Query 실행 후 일정 시간이 지나면 자동으로 TimeOut 취소 처리를 위한 Timer에요.
정해진 시간 내에 정상적으로 Query가 수행되고 객체를 종료(Close) 시, Timer를 취소하도록 되어 있어요. 이때 취소된 Task는 상태 값만 변경되고, 실제로는 Timer의 큐에서 아직 사라지진 않아요.
Timer에 등록된 작업은, TimerThread에 의해 순차적으로 처리돼요. Task는 TimerThread에서 처리를 해야 비로소 큐에서 제거되거든요.
이때 가져온 Task는 취소 상태가 아니며, 처리 시간에 아직 도달하지 않은 경우 해당 Task의 실행 예정 시간까지 대기해야 돼요.
여기서 문제점이 발생해요.
이 대기 시간이 길어지면 TimerThread의 처리가 지연되기 때문이죠. 이후 대기 Task들은 상태 여부에 상관없이, 큐에 지속적으로 남아있게 돼요.
만약 오랜 시간 동안 처리가 진행되지 않는다면, 여러 번의 Minor GC 발생 후 참조 객체들은 영구 영역(Old Gen)으로 이동될 수 있어요.
영구 영역으로 이동된 객체는, 메모리에 즉시 제거되지 못하고 오랜 기간 남게 되죠. 이는 Old(Full) GC를 발생시켜 시스템 부하를 유발하게 해요. 실제로 시스템에 설정된 TimeOut 값은 3,000초(50분)에요.
Finalizer 참조 객체는 GC 발생 시, 즉시 메모리에서 수집되지 않고 Finalize 처리를 위한 대기 큐에 들어가요. 그다음 FinalizerThread에 의해 Finalize 처리 후 GC 발생 시 비로소 제거되죠. 때문에 리소스의 수집 처리가 지연될 수 있어요.
또한 FinalizerThread 스레드는 우선순위가 낮아요. Finalize 처리 객체가 많은 경우, CPU 리소스가 상대적으로 부족해지면 개체의 Finalize 메서드 실행을 지연하게 만들어요. 처리되지 못한 객체는 누적되게 만들죠.
요약한다면 FinalReference 참조 객체의 잘못된 관리는
1) 객체의 재 참조를 유발 2) 불필요한 객체의 누적을 유발 3) Finalize 처리 지연으로 인한 리소스 누적을 유발
하게 해요.
PART2.
제니우스 APM을 통해 Finalize 객체를 모니터링하는 방법
Zenius APM에서는 JVM 메모리를 모니터링하고 분석하기 위한, 다양한 데이터를 수집하고 있어요. 상단에서 보았던
FinalReference 참조 객체의 현황에 대한 항목도 확인
할 수 있죠.
APM 모니터링을 통해 Finalize 처리에 대한 문제 발생 가능성도
‘사전’
에 확인
할 수 있답니다!
위에 있는 그림은 Finalize 처리 대기(Pending)중인 객체의 개수를 확인 가능한 컴포넌트에요.
이외에도 영역별 메모리 현황 정보와 GC 처리 현황에 대해서도 다양한 정보를 확인 할 수 있어요!
이상으로 Finalize 처리 객체에 의한 리소스 문제 발생 가능성을, 사례를 통해 살펴봤어요. 서비스에 리소스 문제가 발생하고 있다면, 꼭 도움이 되었길 바라요!
------------------------------------------------------------
©참고 자료
◾ uxys, http://www.uxys.com/html/JavaKfjs/20200117/101590.html
◾ Peter Lawrey, 「is memory leak? why java.lang.ref.Finalizer eat so much memory」, stackoverflow, https://stackoverflow.com/questions/8355064/is-memory-leak-why-java-lang-ref-finalizer-eat-so-much-memory
◾ Florian Weimer, 「Performance issues with Java finalizersenyo」, enyo,
https://www.enyo.de/fw/notes/java-gc-finalizers.html
------------------------------------------------------------
#APM
#Finalize
#제니우스
#메모리 누수
#Zenius
#FinalReference
#제니우스 APM
김진광
APM팀(개발3그룹)
개발3그룹 APM팀에서 제품 개발과 기술 지원을 담당하고 있습니다.
필진 글 더보기
목록으로
추천 콘텐츠
이전 슬라이드 보기
[Zenius Case#1] 내일까지 서버관리 현황 부탁할게요!
[Zenius Case#1] 내일까지 서버관리 현황 부탁할게요!
퇴근을 준비하는 어느 날, 부장님이 갑자기 요청합니다. “내일까지 서버관리 전반 현황 보고해야 되니 준비 부탁할게! 그럼 고생하고 낼 보자고” 어떤 내용들로 자료를 준비해야 하는 걸까요? 이번에는 Zenius SMS를 활용한 서버관리현황 파악에 대해 살펴보겠습니다. 서버관리 현황 파악의 포인트 1. 얼마나 많은 대상을 관리하고 있으며 종류는 어떤 것이 있는가? 2. 관리가 필요한 주요 성능지표 항목은 어떤 것이 있는가? 3. 주요 성능지표 관련해 현재 상태는 어떠한가? 4. 이슈가 존재하는 서버의 현황과 어떤 이슈를 가지고 있는가? 5. 어떻게 필요한 자료를 쉽고 빨리 확보해 보고할 것인가? 6. 향후 지속적으로 제공 가능한 범위인가?(내일까지 해야 하는데….) 7. 추가적인 요청사항에 대한 대응이 가능한가? 상기 사항들 모두 중요하지만, 그 중에서도 “지속적으로 제공 및 관리가 가능한가?”라는 부분에 집중해야 합니다. 아무리 훌륭한 자료라도 자료구성을 위해 과도한 공수가 발생하는 자료는 사실상 향후 지속적인 관리측면에서 실효성을 상실하게 돼 1회성 보고자료로 끝나게 되는게 현실입니다. 실제 업무에 필요한 자료는 지속적인 관리가 가능해야만 합니다. Zenius로 1분 만에 서버현황 보고자료 정리하기 Step 1. 기본 데이터 취득(10초) Step 2. 현황정보 정리(10초) 저희가 운영하는 대상은Total 12대입니다. OS 별로 Linux 6, Solaris 1, AIX 1, HPUX 1, Window 3 관리 운영 중에 있습니다. Step 3. 주요 성능지표의 상태정리(20초) 먼저 서버(OS) 측면의 주요 성능지표에 대해 알아보도록 하겠습니다. 정보시스템 성능관리 지침에서는 서버 성능관리의 목적을 아래와 같이 정의하고 있습니다. 서버 성능관리의 목적 “서버 성능관리 업무는 최적의 용량을 적시에 확보하기 위한 용량계획의 시점을 제공하고 성능 관련 문제를 사전에 예방함으로써, 사용자의 시스템 활용도 및 만족도를 향상시키기 위하여 수행된다.” 또한 정보시스템 성능관리 지침에서 서버의 주요 성능관리 구성요소는 아래와 같이 정의하고 있습니다. 구성요소 내용 CPU 총 CPU사용률, 시스템 모드 사용률, 사용자 모드 사용률, Run Queue, Pri Queue, 사용자수 등 메모리 총 메모리 사용률, 시스템 및 버퍼 캐쉬, Page In/Out, Swap 공간 사용률 등 디스크 Disk 사용률, Disk I/O Busy, Disk Queue 프로세스 CPU를 집중적으로 사용하는 프로세스, Zombie 프로세스 커널 커널 파라미터 설정을 통한 자원의 적절한 분배 파일시스템 파일시스템 IO Rate, 파일시스템 공간 사용률 네트워크 I/O In 패킷률, Out 패킷률, Collision률, Error률 해당 성능관리 구성요소 중 실제 시스템운영 시 체크가 필요한 몇 개 항목에 대해 간단히 정의하고 넘어가겠습니다. CPU 사용률(%) 서버의 성능을 의미하는 척도로 사용되는 항목으로 CPU의 사용률이 일정 이상을 넘어가면 서비스에 영향을 주기 시작합니다. 순간적으로 급격히 높아질 수 있기 때문에 일반적으로 임계값과 지속시간을 함께 지정해 감시합니다. *여기서 CPU란? Central Processing Unit의 약자로 명령을 해독하고 산술논리연산이나 데이터 처리를 실행하는 장치입니다. Memory 사용률(%) 메모리의 사용량이 너무 빨리 소모되거나 또는 지속적으로 사용량이 떨어지지 않는다면 조치가 필요한 부분입니다. *여기서 Memory란? 기억소자를 지칭하는 것으로 보다 빠른 처리를 위한 프로그램 또는 데이터를 저장하거나 계산된 결과를 임시 또는 반영구적으로 보관하는 기억장치입니다. Disk I/O Busy Rate(%) Disk의 경우 데이터 처리 속도가 메모리나 CPU에 비해 너무 느리기 때문에 Disk I/O Busy Rate의 경우 일정 임계치 이상 지속되는 경우 과다한 입출력이 발생시킴을 의미하며 시스템 성능에 영향을 줄 수 있습니다. *여기서 Disk I/O란? Disk의 입출력 양을 의미합니다. 이제 기본 취득 데이터 기준 주요 성능지표를 정리해 보겠습니다. CPU 사용률(%) 저희가 운영하는 서버 중 CPU 사용률은 다음과 같으며, CPU 사용률이 가장 높은 대상은 Cent7x64 장비입니다. 전일 기준 Peak 치가 59% 정도이며 현재 36%정도의 사용률을 보입니다. Memory 사용률(%) Memory 사용률 현황은 다음과 같으며, Memory 사용률이 가장 높은 대상은 Solaris11 장비 입니다. 전일 기준 Peak 치가 97% 정도이며 현재도 96%정도의 사용률을 보입니다. 해당 장비의 경우 상세분석 진행 예정입니다. Disk I/O Busy Rate(%) Disk I/O Busy Rate 기준으로 모니터링이 필요한 대상은 다음과 같으며 현재 전반 양호한 상태입니다. 가장 높은 대상은 Zenius6.1 장비입니다. 현재 37% 정도를 보이고 있으며 한시적 증가로 요소가 존재하는 상태입니다. 저장장치 사용률(%) 저장장치 사용률의 경우 시스템 전체의 사용률보다는 파티션 별 사용률 관점에서 정리가 필요합니다. 95% 이상 사용중인 파티션 영역이 존재하고, AIX72-ORA, Suse11-x64, Solaris11 장비의 경우 현재 조치 진행 중이며 용량증설 계획도 함께 고려하고 있습니다. Step 4. 이슈사항 정리(20초) 전체관리대상 중 긴급 1건, 위험 4건, 주위 4건의 이슈가 발생해 있는 상태이며 등급 별 상세내역은 다음과 같습니다. 이슈 발생 후 지속시간 2일 이상 지속중인 항목들은 단기 조치 불가 항목으로 조치방안에 대해 논의중인 항목입니다. 이상으로 Zenius를 활용해 1분만에 서버현황 보고자료를 구성해봤습니다. 그럼 이제 다음과 같이 보고를 진행했을 때 추가적으로 유입될 수 있는 요청사항을 Zenius SMS를 활용해 대응해보겠습니다. Zenius SMS를 활용해 추가 요청사항 대응하기 Q. CPU 사용률 높은 장비의 CPU 추이는 어떤가요? 전반 추이와 전일 대비 사용률을 확인해볼 필요가 있습니다. A. 해당장비의 CPU 사용률 추이는 다음과 같으며 전일대비 비교 했을 때 거의 유사한 범위내에 사용률 추이를 보여주고 있습니다. 3단계의 임계라인 기준으로 감시를 수행하고 있습니다. Q. 특정 파티션의 파일시스템 사용률이 높은 장비의 타 파티션의 사용률은 얼마나 되나요? 저장장치 사용률 추이도 함께 검토가 필요해보입니다. A. /nshome40 96% 이외 /home 파티션도 사용률이 90% 이상인 상태입니다. 사용률 추이를 확인했을 때 급격한 증가는 발생하지 않는 상태입니다.
2022.09.02
IT 인프라 모니터링 트렌드
IT 인프라 모니터링 트렌드
EMS란? EMS는 Enterprise Management System의 약자로, 여러 기업과 기관의 IT서비스를 이루는 다양한 IT Infrastructure를 통합적으로 모니터링하는 시스템을 의미합니다. 해외에서는 일반적으로 ITIM(IT Infra Management)이라는 용어로 많이 사용되고 있지만, 국내에서는 EMS라는 용어로 통용되고 있습니다. EMS는 IT인프라의 데이터를 실시간으로 수집 및 분석할 뿐만 아니라, 수집된 데이터를 활용해 비즈니스의 가치를 창출할 수 있습니다. 글로벌 IT분야 연구자문 기업인 “가트너(Gartner)”에서는 ITIM, 즉 EMS를 데이터센터, Edge, IaaS(Infrastructure as a Service), PaaS(Platform as a Service) 등에 존재하는 IT인프라 구성요소의 상태와 리소스 사용률을 수집하는 도구로 정의하며, 컨테이너, 가상화시스템, 서버, 스토리지, 데이터베이스, 라우터, 네트워크 스위치 등에 대한 실시간 모니터링이 가능해야 한다고 서술합니다. <사진 설명: 가트너의 ITIM 정의를 도식화한 그림> 이러한 EMS는 초기에는 기업 전산실에 물리적인 형태로 존재하는 서버, 네트워크의 리소스관리를 중심으로 모니터링해 왔습니다. 서버의 CPU, Memory 등의 리소스 정보를 수집하거나, 네트워크 장비의 트래픽 정보를 모니터링하고 임계치를 기반으로 이벤트 감지하는 역할이 대부분이었으며, 이 정도 수준에서도 충분한 IT 인프라 관리가 이뤄질 수 있었습니다. 그러나 가상화(Virtualization)라는 개념이 생겨나고 다양한 IT 인프라들이 기업 전산실에서 클라우드(Cloud) 환경으로 전환됨에 따라, EMS의 모니터링 분야도 조금씩 바뀌어 가고 있습니다. 많은 기업들이 효율적인 리소스 사용과 비용 절감을 목표로 VMware와 같은 가상화 시스템을 도입해 운영하게 됐으며, 모니터링 부문도 이에 대응하기 위해 가상화 리소스에 대한 관리 영역으로 확장됐습니다. 가상화 환경을 이루는 하이퍼바이저(Hypervisor)와 가상머신(Virtual Machine)의 연관성을 추적하고, 각 가상머신들이 사용하고 있는 리소스를 실시간으로 분석해 효율적인 자원 배분, 즉 프로비저닝(Provisioning)을 위한 근거 데이터를 제공할 수 있도록 하고 있습니다. 더 나아가 VMware, Hyper-V 등의 다양한 가상화 플랫폼에서 가상머신을 생성하고 삭제하고, 실제로 가상머신에 CPU, Memory 등과 같은 리소스를 할당해 줄 수 있는 컨트롤 영역까지 제공하는 제품을 개발하는 벤더사들이 많아지고 있습니다. 이러한 가상화 기술을 기반으로 현대에는 IT 인프라들이 대부분 클라우드 환경으로 전환하고 있는 추세입니다. 클라우드 환경으로의 전환 클라우드(Cloud)란, 언제 어디서나 필요한 컴퓨팅 자원을 필요한 시간만큼 인터넷을 통해 활용할 수 있는 컴퓨팅 방식으로, 최근 기업들은 각자의 목적과 상황에 맞게 AWS, MS Azure와 같은 Public Cloud 및 OpenStack, Nutanix 등을 활용한 Private Cloud 등의 환경으로 기업의 전산설비들을 마이그레이션 하고 있습니다. 클라우드로의 전환과 기술의 발전에 따라, EMS의 IT 인프라 모니터링은 더 이상 *On-Premise 환경에서의 접근이 아닌, Cloud 환경, 특히 MSA(Micro Service Architecture)를 기반으로 하는 클라우드 네이티브(Cloud Native) 관점에서의 IT 운영 관리라는 새로운 접근이 필요하게 됐습니다. (*On-Premise : 기업이 서버를 클라우드 환경이 아닌 자체 설비로 보유하고 운영하는 형태) 클라우드 네이티브란, 클라우드 기반 구성요소를 클라우드 환경에 최적화된 방식으로 조립하기 위한 아키텍처로서, 마이크로서비스 기반의 개발환경, 그리고 컨테이너 중심의 애플리케이션 구동환경 위주의 클라우드를 의미합니다. 클라우드 네이티브는 IT비즈니스의 신속성을 위해 도커(Docker)와 같은 컨테이너를 기반으로 애플리케이션이 운영되므로, EMS는 컨테이너의 성능, 로그, 프로세스 및 파일시스템 등 세부적인 관찰과 이상징후를 판단할 수 있는 기능들이 요구되고 있습니다. 자사 제품인 Zenius SMS에서는 이러한 변화에 따라 Docker에 대한 모니터링 기능을 기본적으로 제공하고 있습니다. Docker 컨테이너가 생성되면 자동으로 관리대상으로 등록되며, Up/Down 뿐만 아니라, CPU, Memory, Network 및 Process의 정보를 실시간으로 모니터링하고 발생되는 로그들을 통합관리 할 수 있도록 합니다. <사진 설명: Zenius-SMS에서 제공하고 있는 Docker 컨테이너 모니터링 기능> 또, 복원력과 탄력성을 위해 쿠버네티스와 같은 오케스트레이션 도구를 활용해 컨테이너를 스핀업하고, 예상되는 성능에 맞게 효율적으로 리소스를 맵핑하고 있으며, 이러한 기술에 대응하기 위해 EMS는 쿠버네티스(Kubernetes), 도커스웜(Docker Swarm) 등의 오케스트레이터들의 동작여부를 직관적으로 관찰하는 제품들이 지속적으로 출시되고 있는 상황입니다. 이와 더불어 컨테이너, 오케스트레이터의 동적 연결관계를 실시간으로 모니터링하고, 파드(POD), 클러스터, 호스트 및 애플리케이션의 관계를 표현하는 역할의 중요성이 점차 커져가고 있습니다. 통합 모니터링(Monitoring) EMS 모니터링의 또 다른 변화로는 통합(Integration)의 역할이 더더욱 강해지고 있다는 것입니다. IT 서비스가 복잡해지고 다양해짐에 따라 IT 인프라의 관리 범위도 점차 증가하면서, 다양한 IT 인프라들을 융합하고 관리하기 위한 노력들이 관찰되고 있습니다. 데이터독(Datadog), 스플렁크(SPLUNK)와 같은 장비 관점의 모니터링 벤더들은 APM과 같은 애플리케이션 모니터링 시장으로, 앱다이나믹스(AppDynamics), 다이나트레이스(Dynatrace), 뉴렐릭(NewRelic)과 같은 애플리케이션 모니터링 시장의 강자들은 인프라 장비 관점의 모니터링 시장으로의 융합이 확인되고 있습니다. 자사 제품인 Zenius 역시 서버, 네트워크 중심의 관리에서 애플리케이션, 데이터베이스 등의 시장으로 관리 범위를 확장해 나가고 있는 추세입니다. IT 서비스의 영속성을 유지하기 위해서는 IT 서비스를 구성하는 다양한 요소들을 실시간으로 모니터링하고 연관관계를 추적해 문제 원인을 찾아내는 것이 중요하기 때문에 다양한 IT 요소들을 통합적으로 모니터링하는 것 뿐만 아니라, 상호 연관관계를 표현하고 추적할 수 있는 기능들이 지속적으로 요구되고 있습니다. 모니터링의 트렌드는 서버, 네트워크 등의 독립적인 개체에 대한 모니터링 아닌 IT 서비스를 중심으로 기반 요소들을 모두 통합적으로 모니터링하고, 각 상호간의 의존성과 영향도를 파악해 RCA(Root Cause Analysis) 분석을 가능하게 하고 이를 통해 IT 서비스의 연속성을 보장할 수 있는 통찰력을 확보하게끔 하는 방향으로 흘러가고 있습니다. Zenius는 서버, 네트워크, 애플리케이션, 데이터베이스 및 각종 로그들의 정보를 시각적으로 통합 모니터링할 수 있는 오버뷰(Overview) 도구와 IT 서비스 레벨에서 인프라들의 연관관계를 정의하고 다양한 조건(Rule)에 따라 서비스 이상유무와 원인분석이 가능한 서비스 맵(Service Map) 도구를 기본적으로 제공하고 있습니다. <사진 설명: Zenius 오버뷰 화면> <사진 설명: Zenius 서비스맵 화면> 앞서 언급했듯이, 클라우드 환경으로 전환함에 따라 통합적 관리 요구는 더욱 높아지고 있습니다. IT 인프라에 대한 통합 뿐만 아니라, AD(Active Directory), SAP 및 AWS, Azure, GCP 등의 다양한 서비스의 주요 지표까지 연계하고 하나의 시스템으로 통합 모니터링하기 위한 노력들이 관찰되고 있습니다. 데이터독(Datadog)의 경우, 500개 이상의 시스템, 애플리케이션 및 서비스들의 지표들을 손쉽게 통합 관리할 수 있다고 돼있습니다. <사진 설명: 데이터독 홈페이지 캡처> 이처럼 IT 서비스의 복잡성과 다양화에 따라 관리해야 될 서비스와 지표들은 점점 늘어나고 있으며, 기업의 현황에 맞게 컴포넌트 기반으로 손쉽게 지표들을 통합할 수 있는 기능과 도구들이 요구되고 있습니다. AI 기반의 예측&자동화 모니터링의 세번째 변화로는 ’AI 기반의 예측과 자동화’입니다. IT 인프라 및 서비스의 주요 지표를 모니터링하는 것도 중요하지만, 축적된 데이터를 기반으로 미래의 상황을 예측 및 이상탐지해 사전에 대비할 수 있는 체계를 갖추는 일은 모니터링 시장에서 중요한 이슈로 자리잡고 있습니다. 현재의 AIOps(AI for IT Operations)를 표방하는 모니터링 기술들은 서버, 네트워크, 애플리케이션, 데이터베이스 등의 주요 지표들을 실시간으로 수집하고, 저장된 데이터를 기반으로 AI 알고리즘 또는 통계기법을 통해 미래데이터를 예측하며 장애 발생가능성을 제공하고 있습니다. 이와 같은 기술을 통해 미래 성능 값을 예측해 IT 인프라의 증설 필요성 등을 판단하고, 장애 예측으로 크리티컬한 문제가 발생되기 전에 미리 조치를 취할 수 있도록 해 효율적인 의사결정을 할 수 있도록 합니다. Zenius도 4차 산업혁명 및 디지털 뉴딜시대가 도래함에 따라 미래예측 기능을 최신 버전에 탑재했으며, 이를 통해 IT운영자가 미래 상황에 유연하고 선제적으로 대응할 수 있도록 합니다. Zenius에서는 서버, 네트워크, 애플리케이션 등 다양한 IT 인프라의 미래 성능 값, 패턴 범위, 이상 범위 등을 예측해 IT 운영자에게 제시합니다. <사진 설명: 인공지능(AI) 기반 미래데이터 예측 화면> 다만, 인공지능 기술을 통해 장애 발생 가능성을 탐지하는 기능 외에, 어디에 문제가 발생됐는지 알려주는 기능은 모니터링 시장에 과제로 남아있고, 이를 제공하기 위한 여러 업체들의 노력이 보이고 있습니다. 이제는 EMS에서 보편적인 것이 됐지만, 모바일 기기를 통해 시∙공간적 제약 없는 모니터링이 이뤄지고 있습니다. 다양한 기종의 스마트폰, 태블릿PC 등을 이용해 운영콘솔(Console) 뿐만 아니라, 회의 등 시간을 잠시 비우더라도 IT 인프라에 대한 연속적인 모니터링이 모바일기기를 통해 가능해졌습니다. <사진 설명: 다양한 기기를 통한 모니터링>
2022.09.05
Monitoring vs Observability, 모니터링과 옵저버빌리티 이해하기
Monitoring vs Observability, 모니터링과 옵저버빌리티 이해하기
옵저버빌리티는 "무슨 일이 일어났는가?", "왜 그런 일이 일어났는가?"와 같은 질문에 답하는 것을 목표로 합니다. 옵저버빌리티는 IT시스템 전체적인 관점에서 문제를 신속하게 식별하고 근본 원인을 분석할 수 있습니다. 최근 IT 인프라의 종류가 다양해지고, 수가 기하급수적으로 많아지고, 복잡도가 급격히 증가함에 따라 IT 인프라의 가용성을 보장하기 위해서 전통적으로 행해지던 모니터링의 범주를 넘어서는 옵저버빌리티라는 개념이 등장했습니다. 모니터링과 옵저버빌리티라는 두 용어들은 때로는 비슷한 개념으로 서로 바꿔서 사용되기도 하지만, 시스템 관리에 대한 다른 접근 방식을 나타냅니다. 이번 블로그에서는 모니터링과 옵저빌리티의 차이점을 알아보겠습니다. Monitoring이란? 모니터링은 IT 시스템에서 CPU 사용량, 메모리 사용량, 네트워크 트래픽과 같은 데이터를 수집하고 분석해 성능과 동작을 파악하는 것입니다. 모니터링의 목표는 시스템에 문제가 있는 것으로 추정되는 이상한 동작이나 조건을 감지하고 경고하는 것입니다. 모니터링은 종종 문제를 나타낼 수 있는 특정 메트릭이나 이벤트에 대한 알람 설정을 포함합니다. 이 접근 방식은 일반적으로 예측 가능한 개별 시스템에 사용합니다. 전통적인 모니터링 방법은 일정한 간격으로 수집되는 사전 정의된 메트릭이나 로그에 의존합니다. 예를 들어, 서버의 CPU 사용량을 1분마다 확인하고 사용량이 특정 임계값을 초과하면 알람을 보낼 수 있습니다. 이러한 방식은 특정 유형의 문제를 감지하는 데 효과적이지만, IT 시스템 동작을 전체적으로 파악하거나 근본 원인 분석에 대한 심층적인 인사이트는 제한적일 수 있습니다. Observability란? 옵저버빌리티는 IT 시스템 관리에 대한 새로운 접근 방식으로, 시스템의 내부 동작을 이해하는 것에 중점을 둡니다. 옵저버빌리티의 목표는 시스템의 동작을 깊이 이해하고 발생 가능한 모든 문제의 근본 원인을 파악하는 것입니다. 옵저버빌리티는 메트릭, 추적, 로그 등을 실시간으로 수집하고 분석하는 것을 포함합니다. 참고로 메트릭은 CPU 사용량, 메모리 사용량, 네트워크 트래픽과 같은 시스템 성능과 관련된 정량적 정보를, 추적은 요청의 호출 순서 및 응답 시간과 같은 시스템 동작에 대한 정보를, 로그는 사용자 작업 및 오류를 포함해 시스템 활동을 제공합니다. 옵저버빌리티가 필요한 이유 옵저버빌리티는 복잡하고 동적인 시스템에서는 문제를 빠르게 찾고 해결하기 위해 시스템의 동작과 성능을 측정하고 분석할 필요가 있습니다. 옵저버빌리티를 통해 다음과 같은 이점을 얻을 수 있습니다. 옵저버빌리티가 필요한 이유 1. 문제 해결 속도 향상: 옵저버빌리티를 사용하면 복잡한 시스템에서 발생하는 문제를 더욱 빠르게 파악할 수 있습니다. 이를 통해 시스템 장애나 성능 저하와 같은 문제를 빠르게 해결할 수 있습니다. 2. 전체 시스템 이해도 증가: 옵저버빌리티를 사용하면 전체 시스템의 내부 동작을 쉽게 이해할 수 있습니다. 이는 문제를 예방하거나 빠르게 대처할 수 있도록 도와줍니다. 3. 대규모 시스템 관리 가능: 대규모 분산 시스템에서는 옵저버빌리티가 필수적입니다. 이를 통해 수많은 서버, 네트워크, 애플리케이션 등에서 발생하는 다양한 데이터를 수집하고 분석할 수 있습니다. 4. 문제 예방 및 최적화: 옵저버빌리티를 사용하면 시스템의 성능을 지속적으로 모니터링하고 문제를 예방할 수 있습니다. 또한 시스템의 최적화를 위해 데이터를 분석하고 개선할 수 있습니다. 따라서, 옵저버빌리티는 복잡한, 여러 개의 세분화된 시스템으로 구성된 전체 시스템에서 필수적인 도구로, 시스템의 성능 개선과 장애 대응 등 다양한 측면에서 가치를 제공합니다. Monitoring vs Observability 모니터링과 달리, 옵저버빌리티는 사전에 정의된 메트릭과 알람에 의존하는 대신, 시스템 동작의 더욱 전체적인 관점을 제공합니다. 옵저버빌리티는 여러 소스에서 수집한 데이터를 같이 분석함으로써 쉽게 찾을 수 없는 어떤 패턴과 상관관계를 발견하는 데 도움을 줄 수 있습니다. 이 접근 방식은 예측할 수 없는 동작을 가진 복잡한 시스템에서 특히 유용합니다. 모니터링과 옵저버빌리티의 또 다른 중요한 차이점은 사람의 개입 수준입니다. 모니터링은 특정 이벤트 또는 조건을 감지하고 해당 이벤트 또는 조건이 발생할 때 경고를 트리거하도록 설계되므로 모니터링을 설정하고 구성하는데 사람의 개입이 필요할 수 있지만 일단 도구가 셋업되면 사람의 개입 없이 자동으로 작동하는 편입니다. 반면에, 옵저버빌리티는 데이터를 해석하고 결정을 내리고 조치를 취하는데 IT 운영자의 전문 지식을 사용해 프로세스에 관여합니다. 이러한 접근 방식은 시간이 더 많이 소요될 수 있지만, 문제의 근본 원인에 대한 더 많은 인사이트를 제공할 수도 있습니다. 올바른 어프로치 선택하기 모니터링과 옵저버빌리티는 각각 장단점이 있으며, 시스템의 특정 요구사항에 따라 어떤 접근 방식을 선택할지 달라져야 합니다. 비교적 상황 파악이 어렵지 않은 간단한 시스템의 경우, 전통적인 모니터링 도구로 충분할 수 있습니다. 그러나 복잡하고 시스템이 분산된 경우, 시스템 동작을 완전히 이해하기 위해 옵저버빌리티가 필요할 수 있습니다. 결국, 효과적인 시스템 관리의 핵심은 문제를 빠르게 감지하고 해결하기 위한 적절한 도구와 프로세스를 갖추는 것입니다. 모니터링 또는 옵저버빌리티를 선택하든, 시스템과 조직의 요구에 부합하는지 정기적으로 검토하고 개선하는 것이 중요합니다. 적절한 도구와 프로세스에 투자함으로써, 시스템의 신뢰성과 성능을 개선하고 비용이 많이 드는 다운타임과 서비스 중단을 피할 수 있습니다. Zenius EMS 브레인즈컴퍼니는 20년 이상 축적된 노하우를 바탕으로 레거시 환경은 물론 최근 더욱 복잡해지고 있는 클라우드 네이티브 시스템까지 모니터링과 옵저버빌리티 모두를 제공함으로써 고객이 원하는 방식으로 사용이 가능합니다. Zenius EMS는 SMS, NMS, APM 등 각 인프라별 모니터링을 통합해 시스템을 더욱 안정성 있게 관리하고 자동화된 장애대응 환경을 제공하며 객관적인 데이터 기반으로 리포팅이 가능한 지능형 IT 성능 모니터링입니다. 또한 쿠버네티스, 오픈 스택을 지원하는 클라우드 환경을 모니터링합니다. 국내 공공분야 관제 SW 1위, 제니우스의 상관관계 분석, 인공지능을 활용한 성능예측 등 옵저버빌리티 기술을 통해 다양한 시스템 레이어에서 성능, 장애, 구성에 대한 인사이트를 얻으시기 바랍니다.
2023.03.28
옵저버빌리티 향상을 위한 제니우스 대표 기능들
옵저버빌리티 향상을 위한 제니우스 대표 기능들
이번 블로그에서는 지난 블로그에서 다루었던 옵저버빌리티를 구현하기 위한 오픈 소스들은 어떤 것들이 있는지 간략히 알아보고, 제니우스(Zenius-EMS)에서는 옵저버빌리티 향상을 위해서 어떤 제품들을 제공하고 있는 지 살펴보겠습니다. 옵저버빌리티 구현을 위해 널리 활용되는 대표적인 오픈소스로는 아래 네 가지 정도를 들 수 있습니다. l Prometheus: 메트릭 수집 및 저장을 전문으로 하는 도구입니다. Prometheus는 강력한 쿼리 기능을 가지고 있으며, 다양한 기본 메트릭을 제공하며 데이터 시각화를 위해 Grafana와 같은 도구와 통합될 수 있습니다. 또한 이메일, Slack 및 PagerDuty와 같은 다양한 채널을 통해 알림을 보낼 수 있습니다. l OpenTelemetry: 에이전트 추가 없이 원격으로 클라우드 기반의 애플리케이션이나 인프라에서 측정한 데이터, 트레이스와 로그를 백엔드에 전달하는 기술을 제공합니다. Java, Go, Python 및 .NET을 포함한 다양한 언어를 지원하며 추적 및 로그에 대한 통합 API를 제공합니다. l Jaeger: 분산 서비스 환경에서는 한번의 요청으로 서로 다른 마이크로서비스가 실행될 수 있습니다. Jaeger는 서비스 간 트랜잭션을 추적하는 기능을 가지고 있는 오픈 소스 소프트웨어입니다. 이 기능을 통해 애플리케이션 속도를 저해하는 병목지점을 찾을 수 있으며 동작에 문제가 있는 애플리케이션에서 문제의 시작점을 찾는데 유용합니다. l Grafana: 시계열 메트릭 데이터를 시각화 하는데 필요한 도구를 제공하는 툴킷입니다. 다양한 DB를 연결하여 데이터를 가져와 시각화 할 수 있으며, 그래프를 그릴 수도 있습니다. 시각화한 그래프에서 특정 수치 이상일 때 알람 기능을 제공하며 다양한 플러그인으로 기능확장이 가능합니다. ------------------------------------------------- 오픈 기술을 이용해 Do It Yourself 방식으로 옵저버빌리티를 구현한다면 어떨까요? 직접 옵저버빌리티를 구현하기 위해서는 먼저 필요한 데이터를 수집해야 합니다. 필요한 데이터가 무엇인지, 어떤 방식으로 수집할지 결정하고 Prometheus, OpenTelemetry 같은 도구들을 이용해 설치 및 설정합니다. 이 단계는 시간이 가장 오래 걸리고, 나중에 잘못된 구성이나 누락이 발견되기도 합니다. 다음 단계는 데이터 저장입니다. 이 단계에서 주의할 점은 예전처럼 여러 소스에서 수집한 데이터를 단순하게 저장하는 것이 아니라, 전체적인 관점에서 어떤 이벤트가 일어나는지를 추적이 가능하도록 데이터 간의 연결과 선후 관계를 설정하는 것입니다. 어려운 점은 새로운 클라우드 기술을 도입하거나 기존의 인프라나 애플리케이션에서 변경이 발생할 때마다 데이터를 계속해서 정리를 해야 하는데, 이를 위해 플랫폼을 지속적으로 수정하고 구성을 추가해야 한다는 것입니다. 마지막으로 부정확한 경고들은 제거해야 합니다. 비즈니스 상황과 데이터는 계속해서 변화하기 때문에 이에 맞게 베이스 라인을 지속적으로 확인하고, 임계치를 조정해서 불필요한 알람이나 노이즈 데이터가 생기는 것을 방지해야 합니다. 결론적으로 직접 옵저버빌리티를 구현하는 것은 처음에는 쉬워 보여도 고급 인력과 많은 시간을 확보해야 하며, 별개로 시간이 지남에 따라서 효율성과 확장성이 떨어진다는 점을 감안하면 대부분의 기업은 감당하기 어렵다고 할 수 있습니다. 그렇다면, Zenius(제니우스) EMS는 옵저버빌리티를 어떻게 확보하고 있을까요? 옵저버빌리티 향상을 위한 가장 기본적인 기능은 토폴로지맵 또는 대시보드입니다. 다양한 인프라의 물리적 논리적 연결구조들을 한 눈에 시각적으로 파악할 수 있도록 해야 합니다. Zenius는 각 인프라별 상황을 한 눈에 볼 수 있는 오버뷰와 시스템 전체를 조망할 수 있는 토폴로지맵, 그리고 서비스 별 상황들을 감시할 수 있는 대시보드 등 크게 세가지의 뷰어(Viewer)를 제공합니다. 인프라의 구성 상황에 따라 다층적으로 구성되어 고객들이 인프라에서 일어나는 상황을 즉각 알 수 있도록 해 줍니다. 이러한 뷰어들은 기존 ‘모니터링’의 개념에서 ‘옵저버빌리티’ 개념으로 진화화면서 좀 더 다층적, 다양화되는 형태로 진화하고 있습니다. 또한, Zenius는 기존의 각 인프라별로 단순히 감시를 설정하는 방식이 아닌 다양한 인프라로부터의 로그와 메트릭 정보를 이용해 어떤 상관관계가 있는지 분석하는 ‘복합감시’라는 서비스가 기본적으로 탑재돼 있습니다. 복합감시를 대표 기능에는 ERMS(Event Relation Management System), 스냅샷 그리고 조치 자동화 등을 들 수 있습니다. l ERMS 기능은 로깅, 메트릭 정보와 장비의 상태를 이용해 새로운 감시 기준을 만들어, 의미있는 이벤트를 생성해 사용자에게 개별 장비 수준이 아닌 서비스 관점에서 정확한 상황 정 보를 제공합니다. l 스냅샷은 서비스 동작에서 이벤트가 발생했을 때, 당시 상황을 Rawdata 기반으로 그대로 재현하는 기능으로 SMS, DBMS, APM, NMS 등 모든 인프라를 동시에 볼 수 있습니다. l 조치 자동화는 ERMS를 자동운영시스템과 연동해, 특정 상황에서 자동으로 스크립트를 실행해 제어하는 기능입니다. 트레이싱 기능은 APM에서 제공하는 기능으로, WAS(Web Application Server)에 인입되고 처리되는 모든 트랜잭션들을 실시간으로 모니터링하고 지연되고 있는 상황을 토폴로지 뷰를 통해 가시적으로 분석할 수 있습니다. 사용자는 토폴로지 뷰를 통해 수행 중인 액티브 트랜잭션의 상세정보와 WAS와 연결된 DB, 네트워크 등 여러 노드들 간의 응답속도 및 시간들을 직관적으로 파악할 수 있습니다. 제니우스의 또 다른 옵저버빌리티는 인공지능 기반의 미래 예측 기능으로 미래 상황을 시각적으로 보여줍니다. 인프라 종류에 상관없이 인공신경망 등 다양한 알고리즘을 통해 미래 데이터를 생성하고, 장애발생 가능성을 빠르게 파악해 서비스 다운타임이 없도록 도와줍니다. 또한 이상 탐지 기능은 보안 침해 또는 기타 비정상적인 활동을 나타낼 수 있는 시스템 로그, 메트릭 및 네트워크 트래픽의 비정상적인 패턴을 식별할 수 있습니다. 이상탐지 알고리즘은 시간이 지남에 따라 시스템 동작의 변화에 적응하고 새로운 유형의 위협을 식별하는 방법을 학습할 수 있습니다. 이상과 같이 Zenius(제니우스) EMS는 최고의 옵저버빌리티를 제공하기 위해서 연구개발에 매진하고 있습니다. 옵저버빌리티 향상을 위한 다양한 기능/제품들은 고객의 시스템과 조직 상황에 맞게 선별적으로 사용될 수 있습니다.
2023.04.19
다음 슬라이드 보기