1. 개요

와탭은 Server와 Application, DB의 성능을 모니터링 하는 '통합 모니터링 솔루션'이다.

본 아티클은 와탭 세미나 참석 후 보고들은 내용을 정리한 것임.


2. 아키텍처

2.1. Agent

  • Java, PHP, Node.js, Python, .NET, Database, Server
    - IP/SessionID/커스텀 헤더 기반 사용자 추적
    - 트랜잭션 URL 패턴 기반
    - 암호화 기반 SQL/HTTP 파라미터 수집

2.2. Server

  • Yard
    - 데이터 수집 서버
    - 데이터 용량에 따라 Scale Out
    - 내부적으로 분산 구조로 되어 있음
  • Web Front
    - 사용자 접속 서버: 여러 사용자 동시 접속

3. 컨테이너 모니터링

3.1. 배경

Docker의 등장 초기에는 VM에 비해 리소스 사용에 대한 효율성은 있었지만 불안정성이 높아 이점이 없었다. 이후 Kubernetes생태계의 확장으로 경량화된 컨테이너로 MSA를 구현할 수 있게 되고, Kubernetes 표준 컨테이너 런타임인 Containerd의 등장 등 컨테이너 모니터링에 대한 필요성이 대두되었다.

3.2. Issue

컨테이너 모니터링의 가장 큰 이슈는 VM/서버 모니터링에 비해 비가시성이 증가하였다는 점이다. Kubernetes 환경은 특정 컨테이너에 커멘드를 내리는 것이 아니라 자동화에 초점이 맞춰져 있는 만큼, 어떤 Host에 컨테이너가 구동되고 있는지 별도의 추적이 필요하다.

3.3. 전제

컨테이너로 구성된 시스템은 MSA로 구축되었거나, Light한 여러 어플리케이션을 동일한 환경에서 구동하는 것을 전제로 한다.


4. WhaTap을 통한 모니터링

4.1. Project

WhaTap에서의 프로젝트는 업무 단위로 구분한다. 프로젝트 내부에서는 Namespace/Node/ReplicaSet 단위로 구분하게 된다. 1개의 클러스터 안에 단일/다중 업무로 구성되고, Namespace를 통해 Stage 구분을 하고, MSA단위(Pod/Container 단위)로 분류 하는 것을 예시로 할 수 있다.

업무 단위 프로젝트 생성-> 프로젝트 선택 -> Container Map이동 -> 1단 분류(Pod 등) -> 2단 분류(Node 등)

4.2. 트랜잭션 중심의 모니터링

DataDog/Dynatrace 등의 모니터링 툴은 리소스 중심의 모니터링을 수행하지만, Neurelic/WhaTap 등은 트랜잭션 중심의 모니터링 구조를 가지고 있다. 트랜잭션 분석(Active/Profile)을 통해 어플리케이션과 리소스 모니터링을 수행할 수 있다.

4.3. Java 컨테이너 환경 구성/모니터링 시의 유의점

Java는 Heavy한 App에 어울리며, 따라서 경량화된 Container와 잘 맞지 않는다.

Multi Language로 애플리케이션을 구성되는 경향성 (Front : Nodejs, Backend : Java / 혹은 Go, Python으로 한 번에 구성하는 추세)

Java App의 경우 Initializing Time이 김: 무한 재기동이 발생하지 않도록 초기화 시간에 대한 적절한 모니터링 필요

4.4. 보고서

Prometheus/Grafana 등의 오픈소스를 활용한 모니터링의 경우 보고서 생성이 쉽지 않은 단점이 존재한다. WhaTap의 경우 Plugin 방식으로 새로운 보고서 형식을 지속적으로 추가할 수 있으며, HTML방식으로 손쉽게 보고서를 생성할 수 있다. 또한 비동기 방식을 사용하는 Spring Web/Netty에 대한 연계 처리를 지원한다.

4.5. 연계추적

WhaTap은 트랜잭션 스택이 쌓이는 것을 통해 장애를 확인하고 애플리케이션 분석을 수행할 수 있다. Active 트랜잭션(SQL/HTTPC/DBC/Socket 등) 중 어느 트랜잭션이 가장 많이 쌓이고 오래 걸리는지 확인이 가능하며, Active Stack에 대한 스냅샷을 통해 문제 구간을 찾아내고 보통 Container 단위의 Method 레벨까지 확인할 수 있다.

4.6. 비동기 프로세스에 대한 연계추적

  • Weaving Plugin
    일반적인 Kubernetes 트랜잭션 추적은 ThreadLocal을 사용하게 되는데, 비동기 처리에 대해서는 추적이 불가능했다. WhaTap에서는 Weaving 플러그인을 통해 @Weaving 어노테이션 또는 관련 로직을 사용하여 비동기 추적을 수행할 수 있다. Weaving Plugin은 소스와는 별도로 빌드가 가능하여, 소스코드에 대한 접근이 제한된 모니터링 환경에서 도입이 가능하다. 또한 Zipkin 지원 등 다양한 커스터마이징 전략을 통해 환경에 맞게 도입할 수 있다.

4.7. 로그 모니터링

컨테이너가 내부에 쌓고 있는 로그 중 추적이 되지 않는 로그들이 존재할 수 있다. 이러한 등록되지 않은 로그/파일은 호스트/PV의 용량을 지속적으로 점유하여 장애를 유발 할 수 있다. 로그 용량 관리 또는 로그 관리 스크립트 파일 등록을 통해 WhaTap에서 자체적으로 관측 불가능한 로그를 관리할 수 있다.