또한 WAS가 풀 요청에 응답하지 않으면 서버의 장애로 진단할 수 있기 때문에 쉽게 장애를 진단할 수 있다
일반적으로 TCP를 사용하며 지표 데이터를 가져올 WAS 목록이 이미 정의되어 있어 수집한 데이터를 믿을 수 있다
푸시 모델은 지표를 만드는 시스템(웹 서버, 데이터베이스, 등)에서 직접 지표를 수집기에 전송하는 모델로, 모니터링 대상 서버에 통상 수집 에이전트 소프트웨어를 설치한다
해당 장비에서 실행되는 서비스가 생산하는 지표 데이터를 받아 모은 다음 주기적으로 수집기에 전달한다
데이터 집계를 통해 수집기에 보내는 데이터의 양을 조절할 수 있으며, 데이터 전송 트래픽 양이 커져 일시적으로 전송이 실패한다면 내부의 소규모 버퍼를 이용해 일시적으로 보관한 다음 추후 재전송할 수 있다
하지만 시스템이 scale-out이 가능해 동적으로 추가하거나 삭제된다면 해당 데이터는 소실될 수 있다
이런 일을 막기 위해서 지표 수집기도 scale-out이 가능하도록 설계해야하며 로드밸런서를 두어야 한다
푸시 모델의 장점은 지표 수집기가 scale-out 확장 클러스터 형태로 구성되었다면 어디서 오든 지표 수집이 가능하다
하지만 지표를 받지 못할 때 네트워크 장애인지 서버 장애인지 원인을 알기 어렵다
지표 전송 파이프라인의 규모 확장
지표 수집기에서 바로 시계열 데이터베이스로 정보를 저장하게 되면 데이터 베이스 장애 시 데이터 손실이 발생할 가능성이 있다지표 수집기는 지표 데이터를 카프카와 같은 큐 시스템을 이용해 전송하면 Storm, Flink, Spark와 같은 소비자(스트림 처리 서비스)가 해당 데이터를 받아 시계열 데이터 베이스에 저장한다
이렇게 하면 생기는 장점은- 카프카는 안정적이고 규모 확장성이 뛰어난 분산 메시지 플랫폼이다- 데이터 수집 컴포넌트와 처리 컴포넌트 사이의 결합도를 낮춘다- 데이터 베이스에 장애가 생겨도 데이터가 소실되지 않고 카프카에 보관된다
이전 글에서 본 것처럼 카프카의 파티션 메커니즘을 사용하면 시스템의 규모를 확장할 수 있다
지표 이름에 따라 어떤 파티션에 배치할지 결정하고 소비자는 지표 이름에 따라 쉽게 집계할 수 있다
태그/레이블에 따라 지표 데이터를 더욱 세분화한 파티션으로 나누고, 중요 지표가 먼저 처리될 수 있도록 지표를 분류하고 우선순위를 지정한다
데이터 집계 시점
여러 지점에서 데이터를 집계할 수 있다
수집 에이전트(클라이언트 측), 데이터 수집 파이프라인(저장소 기록 전), 질의 시점(저장소 기록 후)에 대해서 알아보자
수집 에어전트가 집계를 하게되면 클라이언트에 복잡한 집계 로직을 지원하기 어려워 단순한 지표를 해상도가 낮게 수집하는 정도가 가능하다
데이터 수집 파이프라인에서 집계를 하면 저장소에 저장되기 전에 집계하기 위해 스트림 프로세싱 엔진이 필요하다
데이터베이스는 계산 결과만 기록하므로 실제로 기록되는 양은 줄어들지만, 늦게 도착하는 지표 데이터의 처리가 어렵고 원본 데이터를 보관하지 않기 때문에 정밀도나 유연성 측면에서 손해를 보게 된다
스트림 프로세싱 엔진은 실시간으로 발생한 데이터를 즉각적으로 처리하여 활용하는 방식의 엔진으로 실시간 빅데이터 처리, 데이터 스트리밍이라고 표현하기도 한다
대표적으로 아파치 플링크가 있는데, 실시간 처리 말고도 배치 처리(일정량 기록 후 일괄 처리), 이벤트 처리 등도 지원한다
질의 시에 집계를 하면 데이터를 그대로 보관한 다음 질의할 때 필요한 시간 구간에 맞게 집계한다
데이터 손실 문제는 없으나 질의 처리시 전체 데이터 세트에 집계 결과를 계산해야 하므로 속도가 느리다
질의 서비스
질의 서버 클러스터 형태로 구현되며, 시각화 또는 경보 시스템(저장된 데이터를 조회하여 사용자에게 보여주는 플랫폼)에서 접수된 요청을 시계열 데이터베이스를 통해 처리하는 역할을 담당한다
질의 전담 서비스를 두면 클라이언트와 시계열 데이터베이스 사이의 결합도를 낮출 수 있다(데이터 베이스 제품 교체 용이)
캐시 계층
질의 결과를 저장할 캐시 서버를 도입해 질의 부하를 낮춰 질의 서비스의 성능을 올릴 수 있다
상용 시각화 및 경보 시스템은 대부분 시계열 데이터베이스와 연동 처리하는 강력한 플러그인이 있기 때문에 이 점도 고려해야 할 사항이다
요구된 데이터 보관 기간이 1년이지만, 낡은 데이터는 해상도를 줄여도 되는지 여부를 파악해야 한다
이러한 시스템은 대부분의 데이터가 최신 데이터만 이용되기 때문에 오래된 데이터부터 다운 샘플링을 진행한다
다운 샘플링을 하는 동안 해당 데이터에 대한 요청이 올 수 있기 때문에
일정 시간이 지난 데이터는 기존 데이터를 다운 샘플링된 것처럼 보이도록 인터페이스를 구성해 캐시에 등록한 뒤, 타 쓰레드에서 다운 샘플링을 하는 동안 요청을 대신 처리하고 완료 후 캐시 데이터를 교환하는 작업을 진행한다
혹은 요청 큐를 통해 다운 샘플링이 진행된 후 다운 샘플링 된 데이터에 접근하도록 제어할 수 있다
냉동 저장소
잘 사용되지 않는 비활성 상태 데이터를 보관하는 것으로, 일반 저장소에 비해 훨씬 비용이 낮다
경보 시스템
경보를 처리하는 흐름은 다음과 같다
1. 경보 규칙 설정 파일을 가져와 캐시 서버에 저장하고, 경보 규칙을 디스크 파일 상태로 보관한다
2. 경보 관리자가 경보 설정 내역을 캐시에서 가져온다
3. 설정된 규칙에 근거하여 지정된 시간마다 질의 서비스를 호출해 질의 결과가 임계값(threshold)을 위반하면 경보 이벤트를 발생시킨다
그 외의 경보 관리자의 역할 - 경보 필터링, 병합, 중복 제거 : 짧은 시간 동안 같은 인스턴스에서 발생한 경보는 병합할 수 있다 90% 이상 디스크 사용량이 초과했다고 여러 이벤트에서 발생했어도 같은 인스턴스의 내용이라면 1개의 경보로 줄이는 것 - 접근 제어 : 사람의 실수로 빚어지는 장애를 막고 시스템의 보안을 유지하기 위해 경보 관리 작업은 반드시 특정한 개인만이 수행할 수 있도록 제한한ㄷ - 재시도 : 경보 관리자는 경보 상태를 확인하고 알림이 최소 한 번은 전달됨을 보장한다
4. 경보 저장소는 카산드라 같은 키-값 저장소이다. 모든 경보의 상태가 여기 보관된다. 알림이 적어도 한 번 이상 전달될 수 있도록 보장하기 위해서 사용된다
5. 경보 이벤트를 카프카에 전달한다
6. 경보 소비자는 카프카에서 경보 이벤트를 읽는다
7. 경보 소비자는 카프카에서 읽은 경보 이벤트를 처리하여 이메일, 단문 메시지, 페이지듀티, HTTP 서비스 엔드포인트 등의 다양한 채널로 알림을 전송한다
시각화 시스템
시각화 시스템은 데이터 계층 위에서 만들어진다
지표 대시보드에는 지표를 다양한 시간 범위로 표시하고, 경보 대시보드에는 다양한 경보의 상태를 표시한다
서버가 처리하고 있는 요청의 수, 메모리, CPU 사용률, 페이지 로드 시간, 트래픽 양, 로그인 현황 등의 지표를 표시한다
회사에서 Granfana Dashboard를 통해 요청이 오래걸려 Slow packet으로 잡힌 패킷들에 대해 원인을 분석하고 개선해본 경험이 있어 시각화 시스템의 유무는 중요하다고 생각한다