Upright 개요 및 주요 특징
Upright는 37signals에서 개발한 Rails 엔진 기반의 합성 모니터링 시스템입니다. 이 시스템은 전 세계 여러 지리적 위치에서 서비스의 가용성을 확인하고 문제가 발생했을 때 즉각적으로 알림을 제공합니다. 특히 상용 서비스의 제약에서 벗어나 개발자가 직접 모니터링 로직을 제어하고 확장할 수 있도록 설계되었습니다.
지원하는 4가지 프로브(Probe) 유형
Upright는 단순한 가용성 체크를 넘어 다양한 방식의 진단을 지원합니다. - Playwright 프로브: 가장 핵심적인 기능으로, 실제 브라우저를 사용하여 로그인, 워크플로우 탐색 등 엔드 투 엔드(E2E) 테스트를 수행합니다. Ruby 클래스로 작성하며, 실패 시 비디오 녹화와 로그를 캡처하여 원인 파악을 돕습니다. - HTTP 프로브: 지정된 URL에 대해 30초마다 상태 코드를 확인하는 기본적인 헬스 체크입니다. 로그는 익숙한 cURL 형식으로 기록됩니다. - SMTP 프로브: 메일 서버의 EHLO 응답성, STARTTLS 지원 여부 및 SSL 인증서 유효성을 검증합니다. - Traceroute 프로브: MTR 리포트를 활용하여 서비스로 이어지는 네트워크 경로의 홉별 지연 시간을 추적합니다.
다중 지점 모니터링 및 장애 판단
Upright는 여러 VPS 노드에 배포되어 독립적으로 프로브를 실행합니다. 이를 통해 특정 지역의 일시적인 네트워크 문제(Regional Blip)와 실제 전체 서비스 장애(Full Outage)를 명확히 구분할 수 있습니다. 예를 들어, 암스테르담 노드에서만 접속이 안 되고 다른 4개 지역에서 정상이라면 이는 지역적 이슈로 판단하여 불필요한 호출(Paging)을 방지합니다.
기술 스택 및 아키텍처
Upright는 현대적이고 효율적인 오픈 소스 기술들을 조합하여 구축되었습니다. - Rails Engine: 기존 Rails 앱에 Gem으로 추가하여 간편하게 통합 가능합니다. - SQLite & Solid Queue: 결과 저장과 백그라운드 작업 처리를 위해 사용됩니다. - Kamal: 전 세계 여러 서버로의 멀티 서버 배포를 관리합니다. - Prometheus & AlertManager: 메트릭 수집 및 알림 송출을 담당합니다. - OpenTelemetry: 트레이싱 및 로그 수집의 표준을 따릅니다. - Grafana: 수집된 데이터를 시각화하여 대시보드를 구성합니다.
비용 효율적인 운영
37signals는 DigitalOcean과 Hetzner의 저렴한 VPS를 활용하여 5개 지역에서 월 약 110달러의 비용으로 시스템을 운영 중입니다. 최소 구성인 2개 지점 운영 시 월 20달러 미만으로도 구축이 가능하여, 고가의 상용 솔루션 대비 뛰어난 가성비를 제공합니다.
시작하기 및 확장성
rails new로 생성한 앱에 upright Gem을 추가하고 설치 제너레이터를 실행하는 것만으로 기본적인 설정이 완료됩니다. 제너레이터는 Prometheus, AlertManager 설정 파일부터 Kamal 배포 템플릿까지 필요한 모든 인프라 구성 요소를 생성해 줍니다. 개발자는 Ruby 코드로 복잡한 시나리오를 작성하거나 YAML 파일로 간단한 HTTP 체크를 정의하기만 하면 됩니다.