↓ 본문으로 건너뛰기

DevOps 모니터링 관찰가능성

모니터링은 프로덕트고, 사용자는 개발자다

개발자가 실제로 덕을 보는 관찰가능성에 대해, 스택과 도구부터 그 주변의 문화까지 길게 정리한 메모입니다.

모니터링은 프로덕트고, 사용자는 개발자다

제가 봐온 모니터링 환경의 대부분은 운영팀이 운영팀을 위해 만든 것이었습니다. 실제로 버그를 만들고, 그걸 고쳐야 하는 개발자들은 뒷전이었죠. 이건 순서가 거꾸로 된 겁니다. 모니터링은 프로덕트고, 그 사용자는 개발자입니다. 개발자가 안 쓰고 있다면, 커버리지가 아무리 그럴듯해 보여도 소용없습니다.

이걸 잘못했을 때의 비용은 굳이 찾아보지 않아도 눈에 들어옵니다. 보이지 않는 문제를 재현하려고 몇 시간씩 태우는 개발자. 알림이 아니라 화난 사용자를 통해 알게 되는 프로덕션 장애. 맥락 없는 알림의 홍수, 그리고 그 결과 전부 무시되는 상황. 피해가 이미 발생한 뒤에야 “무슨 일이 있었는지” 파악부터 시작하는 인시던트 대응. 단순히 배포가 느려지는 문제가 아닙니다. 눈 가리고 디버깅하는 걸 즐기는 사람은 없으니, 팀 사기 자체가 깎여 나갑니다.

“좋은 모니터링"의 조건
#

메트릭, 로그, 트레이스라는 3대 기둥은 이제 기본값입니다. 메트릭은 뭔가 잘못됐다고 알려주고(CPU, 메모리, 요청 속도, 레이턴시 퍼센타일), 로그는 무슨 일이 있었는지 말해주고, 트레이스는 어디서 시작됐는지 보여주죠. 좋은 환경과 도구 무더기를 가르는 건 이 셋이 연결되어 있느냐입니다. 알림에서 로그로, 로그에서 트레이스로, 생각의 틀을 바꾸거나 타임스탬프를 복붙하지 않고 넘어갈 수 있어야 합니다.

대시보드는 만든 사람이 아니라 보는 사람을 위해 만들어야 합니다. 기술 메트릭 옆에 비즈니스 메트릭이 있고, 상태가 한눈에 보이고, 개요에서 상세로 드릴다운이 되고, 최근 배포나 설정 변경 같은 맥락이 같은 화면에 있어야 한다는 뜻입니다. “내 서비스 지금 괜찮나?“라는 질문에 답하려고 개발자가 모니터링 전문가가 될 필요는 없어야죠.

가장 자주 무너지는 곳이 알림입니다. 임계값은 베이스라인과 이상 감지에서 나와야지, 2022년에 누가 감으로 정한 숫자 그대로면 안 됩니다. 문제는 그걸 소유한 팀에 라우팅하고, 연관된 알림은 50개를 따로따로 울리는 대신 묶어야 합니다. 그리고 모든 알림은 “뭐가 고장났는가"에 답하고, 최소한 “어디서부터 볼지"를 가리켜야 하죠. 마지막으로 루프는 빨라야 합니다. 문제 발생에서 개발자 인지까지는 초 단위여야 하고, 그러려면 실시간 메트릭, 검색 가능한 스트리밍 로그, 서비스 경계를 넘는 트레이싱, 릴리스와 장애를 연결해 볼 배포 마커가 필요합니다.

폼 안 나는 밑작업부터
#

도구를 고르기 전에, 디버깅 중인 개발자 옆에 붙어 보세요. 반복해서 나오는 질문, 지금 프로세스에서 아픈 지점, 프로덕트의 성공을 실제로 반영하는 메트릭이 뭔지 파악하는 겁니다. 그다음엔 진입 장벽을 낮춥니다. 계측을 사소한 일로 만들어주는 라이브러리와 SDK, 흔한 케이스용 템플릿, 셀프서비스 대시보드, 그리고 “어떻게"만이 아니라 “왜"를 설명하는 문서요.

모니터링 자체도 진화해야 하는 시스템으로 다뤄야 합니다. 모든 설정은 Infrastructure as Code로, 알림 정의와 대시보드는 버전 관리로, 모니터링 규칙에는 자동화된 테스트를. 멀티 리전이나 멀티 클라우드도 떠밀리기 전에 계획해 두는 게 좋습니다.

스택을 구체적으로 보면
#

도구 이름은 바뀌어도 현대적인 스택의 골격은 꽤 안정적입니다.

  • 메트릭: 시계열 데이터베이스(Prometheus, InfluxDB, TimescaleDB) + APM 도구 + 비즈니스 로직에서 뽑는 커스텀 메트릭.
  • 로그: 중앙화된 수집 플랫폼(ELK Stack, Splunk, Loki), 쿼리 가능하게 만드는 구조화 로깅 표준, 비용과 효용의 균형을 맞춘 보존 정책.
  • 트레이스: 계측은 OpenTelemetry, 시각화는 Jaeger, Zipkin, Honeycomb 같은 것, 볼륨이 커지면 샘플링 전략.
  • 합성 모니터링: 여러 지역에서의 업타임 체크, 스크립트로 짠 사용자 여정, API 헬스 체크.
  • 리얼 유저 모니터링(RUM): 프론트엔드 성능, 사용자 경험 메트릭, 실제 프로덕션 트래픽의 에러 추적. 합성 카나리는 호텔 와이파이에 물린 3년 된 안드로이드 폰으로 접속해 주지 않으니까요.

AWS 위의 소규모 팀: CloudWatch부터
#

AWS 위의 작은 팀에게 진짜 쓸모 있는 것까지 가는 최단 경로는 CloudWatch입니다. EC2, Lambda, RDS, ECS가 설정 없이 알아서 리포트하니 계측 코드 없이 인프라 가시성이 생깁니다. 쓴 만큼 내는 구조라 소규모면 월 10~50달러 수준이고 고정 플랫폼 비용도 없습니다. 메트릭, 로그, 트레이스(X-Ray 경유), 알람이 한곳에 모여 있고, 의미 있는 알림과 대시보드는 몇 시간이면 만듭니다.

제대로 뽑아 쓰는 요령:

  1. CloudWatch Logs Insights는 많은 사람들이 Elasticsearch를 세워서 하는 일을 대체할 수 있습니다. fields @timestamp, @message | filter @message like /ERROR/ | stats count() by bin(5m) 같은 쿼리 한 줄이면 “에러가 늘고 있나?“에 답이 나옵니다.
  2. 복합 알람으로 노이즈를 줄이세요. 에러율이 높고 “동시에” 응답 시간이 나빠졌을 때 울리고, 조건마다 따로 울리지 않게요.
  3. 대시보드는 비즈니스와 기술 메트릭을 섞어야 값어치를 합니다. 사무실 TV에 띄우거나 Slack에 링크를 박아두세요.
  4. 진짜 가치는 커스텀 메트릭에 있습니다. 에이전트나 SDK로 가입, 결제, 기능 사용량을 인프라 숫자 옆에 놓으세요.
  5. CloudWatch Synthetics로 크리티컬 패스를 도는 카나리를 스케줄로 돌리면, 결제가 깨진 걸 사용자보다 먼저 알게 됩니다.
  6. X-Ray면 최소한의 설정으로 분산 트레이싱이 되고, CloudWatch 연동으로 상위 메트릭부터 요청 단위 트레이스까지 이어집니다.

졸업할 때는 언젠가 옵니다. 엔지니어가 대략 50명을 넘거나, 멀티 클라우드로 가거나, 머신러닝 기반의 제대로 된 이상 감지가 필요해지거나, 대시보드 커스터마이징과 알림 로직이 UI의 한계에 부딪힐 때죠.

엔터프라이즈 규모라면 DataDog
#

여러 환경에 수백 개의 서비스를 돌리는 규모가 되면 DataDog가 사실상 표준이고, 그 평가는 대체로 정당합니다. AWS, Azure, GCP, 온프레미스, 컨테이너, 서버리스, 데이터베이스, 서드파티 서비스, 프론트엔드까지 전부 하나의 뷰에서 봅니다. Watchdog가 머신러닝으로 이상을 감지하고 근본 원인 후보까지 짚어주는데, 수천 개 서비스를 사람이 지켜볼 수는 없으니 이게 중요합니다. 나머지 절반의 가치는 협업 레이어입니다. 팀별 대시보드, 역할 기반 접근 제어, 공유 조사 노트북, PagerDuty·Opsgenie 연동. 알림도 필요한 만큼 깊게 만들 수 있습니다. 불리언 로직의 다중 조건 알림, 임계값 돌파를 미리 알리는 예측 알림, 트래픽 패턴에 적응하는 이상 감지, 유지보수 윈도우. APM은 코드 수준 프로파일링, 트레이스와 연결된 보안 모니터링, 서비스별 비용 귀속, 자동 생성 서비스 맵까지 내려갑니다.

큰 조직에 펼치려면 진짜 계획이 필요합니다. 도입은 단계적으로. 중요한 서비스부터 시작하고 팀·환경·사업부 기준의 태깅 전략으로 정리합니다. 표준은 일찍 정하세요. 메트릭과 태그 명명 규칙, 서비스 유형별 대시보드 템플릿, 알림 심각도와 에스컬레이션 경로, 계층별 SLO 정의. 기존 도구와는 전부 연결합니다. 배포 마커용 CI/CD, 인시던트 관리, Slack이나 Teams, ITSM 티켓팅까지요. 교육에도 투자해야 합니다. 내부 문서, 팀마다 챔피언 한 명, APM과 프로파일링 워크숍. 그리고 청구서는 작정하고 관리하세요. 엔터프라이즈면 연 2만~10만 달러 이상이니, 가치 낮은 노이즈 메트릭을 필터링하고, 트래픽 많은 서비스는 트레이스를 샘플링하고, 기능 사용을 감사하고, 비용 배분용 태깅을 철저히 하는 겁니다.

제대로 굴러가면 보상은 큽니다. 상관관계 기능 덕에 빨라지는 인시던트 해결, 사용자가 느끼기 전에 잡히는 문제, 운영팀 줄을 서는 대신 셀프서비스로 움직이는 개발자, 그리고 인프라를 적정 규모로 맞출 수 있게 해주는 리소스 가시성. 이것만으로 라이선스 값을 뽑는 경우도 있습니다.

계약 전에 견적을 비교해 볼 대안으로는 New Relic(비슷한 역량, 대용량 트레이싱은 더 저렴할 수도), Dynatrace(AIOps가 강하고 대형 금융사에서 흔함), Splunk(보안팀이 이미 쓰고 있다면 로그 분석은 최강), Grafana Cloud(Prometheus/Loki를 쓰고 있다면 자연스러운 다음 단계)가 있습니다.

하이브리드로 잘 살고 있는 조직도 많습니다. AWS 네이티브 서비스는 자동으로 CloudWatch에 리포트하게 두고, 애플리케이션과 AWS 바깥은 DataDog로 커버하고, CloudWatch 메트릭을 DataDog로 수집해 단일 뷰를 유지하는 거죠. 비용과 기능의 균형이 잡힌, 탈 없는 구성입니다.

나머지 절반은 문화
#

주변에 습관이 없으면 도구는 실패합니다. 계측은 프로덕션 코드로 취급하세요. 코드 리뷰 대상에 넣고, 커스텀 메트릭에는 테스트를 쓰고, 모니터링 관련 결정은 아키텍처 논의에서 문서화하는 겁니다. 인시던트는 모니터링에 대한 피드백으로 취급하세요. 비난 없는 포스트모템을 하고, 매번 “어떤 모니터링이 있었으면 더 빨리 잡았을까?“를 묻고, 실제로 대시보드와 알림을 고치는 겁니다. 그리고 분기마다 감사를 하세요. 안 쓰는 대시보드와 알림을 지우고, 시스템 변화에 맞춰 임계값을 조정하고, 알림이 여전히 제대로 울리는지 검증하고, 문서를 정직한 상태로 유지하는 거죠.

함정은 뻔한데, 저는 전부 실제로 봤습니다. 연동되는 소수의 도구 대신 반짝이는 신상 도구를 죄다 들이는 것. 베이스라인도 추세도 없어서 숫자가 좋은 건지 나쁜 건지 아무도 모르는 그래프. 기술적으로는 훌륭한데 아무도 교육받지 못해 실패하는 시스템. 사용자에게 중요해서가 아니라 호기심으로 수집된 메트릭. 그리고 모니터링 자체의 이중화 부재. 눈이 가장 필요한 순간에 눈이 멀게 됩니다.

모니터링을 뜯어고치기 시작한다면 이 순서로 하겠습니다. 현재의 공백과 아픈 지점을 감사하고, 사용자 경험 기준으로 SLO와 SLI를 정의하고, 가장 중요한 사용자 여정부터 계측하고, 분산 트레이싱을 넣고(마이크로서비스 세계에서 디버깅 효과가 가장 큽니다), 모든 알림을 런북에 연결하고, 효과를 측정하는 겁니다. MTTR, 배포 빈도, 그리고 개발자들이 실제로 “편해졌다"고 말하는지.

마지막 항목이 진짜 시험대입니다. 좋은 DevOps 일은 시스템을 돌아가게만 하는 게 아니라, 개발팀을 더 빠르고 차분하게 만들어 줍니다. 개발자들이 자발적으로 여는 모니터링이야말로, 그게 됐다는 가장 분명한 증거죠.

댓글

댓글은 검토 후 게시됩니다.