대규모 시스템 설계 기초 2 (5장)
가상 면접 사례로 배우는 대규모 시스템 설계 기초 2 (5장) 의 내용 중, 인상적이었던 부분을 발췌 및 요약합니다.
지표 모니터링 및 경보 시스템
대규모 인프라를 모니터링해야 한다. 수집한 데이터는 시간이 지남에 따라서 해상도가 낮아져도 된다.
기본적 사항
지표 모니터링 및 경보 시스템은 다섯 가지 컴포넌트를 이용한다.
- 데이터 수집 : 여러 출처로부터 지표 데이터를 수집한다.
- 데이터 전송 : 지표 데이터를 지표 모니터링 시스템으로 전송한다.
- 데이터 저장소 : 전송되어 오는 데이터를 정리하고 저장한다.
- 경보 : 밀려오는 데이터를 분석하고, 이상 징후를 감지하고, 경보를 발생시킨다.
- 시각화 : 데이터를 차트나 그래프 등으로 제공한다.
데이터 모델
지표 데이터는 통상 시계열 데이터 형태로 기록한다.
데이터 저장소 시스템
데이터 저장소 시스템은 시계열 DB 를 사용해야 한다. 관계형 DB도, NoSql 도 시계열 데이터를 저장하기에는 난이도 높은 설계와 튜닝이 필요하다. OpenTSDB 와 같은 분산 시계열 데이터베이스를 고려해보자. X 의 MetricsDB 나, 아마존의 타임스트림이라는 제품도 있다.
가장 인기 있는 시계열 데이터베이스는 InfluxDB 와 프로메테우스다. 좋은 시계열 데이터베이스는 막대한 양의 시계열 데이터를 레이블 기준으로 집계하고 분석하는 기능을 제공한다.
지표 데이터 수집 모델
풀 모델
실행 중인 애플리케이션으로부터 지표 수집기에서 데이터를 가져온다. 지표 수집기 서버에서 서비스 목록에 대한 엔드포인트 DNS/IP 주소를 둘 수도 있다. 그러나 이 방안은 서버가 수시로 추가/삭제되는 환경에서는 적절하지 못하다.
etcd 나 아파치 주키퍼와 같은 서비스 탐색 기술을 활용하면 이 문제를 핵뎔할 수 있다. 각 서비스는 자신의 가용성 관련 정보를 서비스 탐색 서비스(SDS)에 기록하고, SDS 로부터 지표 수집기는 엔드포인트를 가져올 수 있는 것이다.
지표 수집기 클러스터를 구성할 수도 있다. 이 때, 여러 지표수집기에서 같은 출처의 데이터를 중복해서 가져오는 것에 주의해야 한다. 안정 해시 링을 사용해서 잘 분배하자.
푸시 모델
푸시 모델은 지표 출처에 해당하는 서버가 직접 지표를 수집기에 전송하는 모델이다. 푸시 모델의 경우, 수집 에이전트를 모니터링 대상 서버에 설치한다. 수집 에이전트는 해당 정비에서 실행되는 서비스가 생산하는 지표 데이터를 받아 모은 다음 주기적으로 수집기에 전달한다. 지표 수집기가 밀려드는 지표 데이터를 제때 처리하지 못하는 일을 방지하기 위해서는 지표 수집기 클러스터도 자동 규모 확장이 가능하도록 구성해야 한다.
풀 모델 vs 푸시 모델
- 풀 모델을 채택한 유명 사례는 프로메테우스이다.
- 푸시 모델을 채택한 유명 사례는 아마존 클라우드와치, 그래파이트 등이 있다.
항목 | 풀 모델 | 푸시 모델 |
---|---|---|
디버깅 | 애플리케이션 서버에 /metrics 엔드포인트를 두도록 강제하므로, 언제든 볼 수 있다. | - |
헬스 체크 | 애플리케이션 서버가 풀 요청에 응답하지 않으면, 해당 서버의 장애 여부를 알 수 있다. | 지표 수집기가 지표를 받지 못하면, 원인이 무엇인지 찾아야 한다. |
짧은 생존 주기의 프로세스 | - | 수집기가 지표를 끌어가기 전에 종료될 수 있으니, 푸시 모델이 안정적이다. |
방화벽 등 네트워크 구성 | 수집기 서버가 모든 엔드포인트에 접근해야 하므로 어렵다. | 지표 수집기가 로드 밸런서만 잘 구성되면 된다. |
성능 | 풀 모델은 일반적으로 TCP 를 사용한다. | UDP 를 사용하기에, 전송 지연이 낮다. |
데이터 신빙성 | 지표 데이터를 가져올 서버가 이미 정의되어 있으므로 믿을 수 있다. | 누구라도 수집기 쪽에 데이터를 밀어넣을 수 있다. |
지표 전송 파이프라인
지표 수집기는 엄청난 데이터를 받아 처리해야 하고, 시계열 데이터베이스에 쓰기 부하를 준다. 따라서, 지표 수집기와 시계열 데이터베이스 사이에 카픙카와 같은 스트림 처리 서비스를 두면 시스템이 더 안정적일 것이다.
카프카의 대안
큐 없이도 대규모 데이터 처리가 가능한 모니터링 시스템이 있다. 페이스북 메모리 기반 시계열 데이터베이스 고릴라가 주요 사례다.
질의 서비
프로메테우스나 influxDB 와 같은 지표 모니터링 시스템은 SQL 이 아닌 독자 질의어를 제공한다. Flux 라는 언어를 공부해보자.
저장소 계층
페이스북에서 내놓은 논문에 따르면 운영 데이터 저장소에 대한 질의의 85% 는 지난 26시간 이내에 수집된 데이터를 대상으로 한다.
저장 용량 최적화
데이터를 인코딩하고 압축할 수 있다. 좋은 시계열 데이터베이스는 이 기능을 제공한다.
다운샘플링
다운샘플링은 데이터의 해상도를 낮춰 저장소 요구량을 줄이는 기법이다.
경보 시스템
경보 규칙을 설정한다. 경보 관리자는 경보 규칙에 따라서 지정된 시간마다 질의 서비스를 호출한다. 질의 결과가 임계값을 위반하면 경보 이벤트를 생성한다.
- 경보 저장소는 키-값 저장소다. 모든 경보의 알림이 적어도 한 번 이상 전달되도록 보장해야 한다.
- 경보 이벤트가 발령되고, 소비될 수 있도록 카프카 시스템을 활용해보자.