시스템을 관찰한다는 것: 모니터링을 넘어 '가시성'을 실무에 적용하는 방법
6 views
# 시스템을 관찰한다는 것: 모니터링을 넘어 '가시성'을 실무에 적용하는 방법
## 보이는 것과 보려는 것
모니터링은 상태를 비추는 일이고, 가시성(observability)은 시스템과 대화하는 태도다. 두 단어는 자주 섞여 쓰이지만, 가리키는 일은 다르다.
모니터링은 정해진 지표를 정해진 주기로 본다. CPU, 메모리, 응답 시간, 에러율. 임계치를 넘으면 경보가 울리고, 운영자는 익숙한 동선을 따라 움직인다. 이 동선이 잘 닦여 있을수록 시스템은 안정적이라 불린다. 그러나 안정은 종종 평온의 다른 이름이며, 평온은 보지 않으려는 자에게도 찾아온다.
가시성은 다르다. 가시성은 "이 지표가 왜 이런 모양인가"라고 묻는다. 임계치를 넘지 않은 그래프 안에서 이상한 결을 발견하고, 평소와 다른 호흡을 읽어낸다. 모니터링이 신호를 받는 일이라면, 가시성은 신호 이전의 미세한 떨림을 감지하려는 의지에 가깝다.

이 차이는 도구의 차이가 아니다. 같은 Grafana 대시보드를 보고도 누군가는 숫자만 읽고, 누군가는 시스템의 상태를 추론한다. 보는 자와 보려는 자 사이의 거리, 그것이 가시성의 본령이다.
## 도구를 갖춰도 보이지 않는 것들
업계에서는 보통 가시성을 세 축으로 정의한다. 메트릭(metrics), 로그(logs), 추적(traces)으로 구성된 'Three Pillars of Observability'다. CNCF의 관측성 백서를 비롯한 여러 문서가 이 분류를 따른다. 분류 자체는 유용하다. 다만 분류가 곧 가시성을 의미하지는 않는다.

수많은 조직이 Prometheus를 띄우고, Loki에 로그를 모으고, Jaeger로 트레이스를 본다. 도구는 갖춰져 있다. 그럼에도 장애가 나면 사람들은 여전히 터미널을 연다. `tail -f`로 로그를 따라가고, `kubectl describe`로 파드의 상태를 읽고, `top`으로 부하의 결을 살핀다. 왜인가.
대시보드는 이미 정해진 질문에만 답하기 때문이다. 누군가 "이 지표가 중요하다"고 판단해 패널을 만들었고, 그 판단의 범위 안에서만 시스템이 보인다. 하지만 장애는 대개 그 판단의 바깥에서 온다. 예상되지 않은 곳에서, 예상되지 않은 결합으로.
```
대시보드: 정의된 질문 → 정의된 답
터미널: 열린 질문 → 새로운 가설
```
가시성은 열린 질문을 던지는 능력이다. 그리고 이 능력은 도구가 아니라, 시스템에 대한 모델을 머릿속에 가진 자에게만 작동한다.

## 가시성이 무너지는 순간
가시성이 가장 적나라하게 무너지는 자리는, 역설적으로 가장 많은 도구를 갖춘 자리다.
대량의 데이터를 옮기던 어느 새벽을 기억한다. 정확한 수치는 의미가 없다. 다만 그것은 한 테이블이 감당할 수 있는 임계의 언저리였고, 마이그레이션은 새벽에 시작되어 아침을 지나가고 있었다. 대시보드는 멀쩡했다. 그래프는 평탄했고, 알람은 울리지 않았다. 그러나 무언가가 잘못되어가고 있다는 감각이 있었다.
대시보드를 닫고 터미널을 열었다. 슬레이브의 복제 지연이 조금씩 벌어지고 있었다. 1초, 2초, 3초. 모니터링 시스템은 5초 이상의 지연만 경보로 정의했고, 그 임계는 합리적이었다. 다만 지연이 일정하지 않게 흔들리는 그 결이 어색했다.
그 어색함은 어디서 왔는가. 도구는 알려주지 않았다. 알려준 것은 그 시스템을 1년 동안 운영하며 쌓은 감각, 정상일 때의 결과 비정상일 때의 결을 구분하는 후각이었다. 이것이 가시성의 실체다. 가시성은 시스템에 대한 누적된 이해 위에서만 작동한다.
지금 우리의 시스템에는 아무도 들여다보지 않는 경로가 있는가. 정의된 지표 바깥에서 조용히 흔들리는 결이 있는가.
## 관찰의 문화, 도구가 아닌 태도
가시성을 확보한다는 말은 흔히 도구 도입의 문제로 환원된다. Datadog을 도입하면, OpenTelemetry를 표준화하면, eBPF 기반 관측 도구를 깔면 가시성이 확보된다는 식이다. 이 진술은 절반만 옳다.

도구는 가시성의 필요조건이지 충분조건이 아니다. 충분조건은 조직의 관찰 문화에 있다. 관찰 문화는 세 가지 습관으로 드러난다. 장애를 사후에 복기하는 습관, 평상시의 결을 기록하는 습관, 그리고 모르는 것을 모른다고 인정하는 습관이다.
장애 복기는 단순한 회의가 아니다. 시스템에 대한 집단적 모델을 갱신하는 작업이다. 'Postmortem'이라는 이름으로 Google SRE 책에 정리된 이 관행의 본질은 문서를 남기는 일이 아니라 모델을 다듬는 일이다. 문서는 그 부산물일 뿐이다.
평상시의 결을 기록한다는 것은 정상 상태가 무엇인지 정의하는 일이다. 정상이 무엇인지 모르는 자는 비정상도 알아볼 수 없다. SLO(Service Level Objective)는 이 정의의 한 형식이다. 그러나 SLO 숫자 자체보다 중요한 것은, 그 숫자를 정하기 위해 조직이 시스템과 나눈 대화의 흔적이다.
모르는 것을 모른다고 인정하는 습관은 가장 어렵고 가장 본질적이다. 운영자는 자주 안다고 가정하며, 그 가정은 알람이 울리지 않는 한 검증되지 않은 채로 유지된다. 가시성은 이 가정을 흔드는 일에서 시작한다.
## 시스템과 운영자 사이
가시성을 깊게 들여다보면, 결국 그것은 시스템과 운영자 사이의 관계 설정에 관한 문제다.
운영자가 시스템을 '관리 대상'으로 본다면, 가시성은 통제의 도구가 된다. 지표는 통제를 위한 핸들이고, 알람은 통제 실패의 신호다. 이 관점에서 시스템은 다루어져야 할 객체다.
운영자가 시스템을 '대화 상대'로 본다면, 가시성은 경청의 형식이 된다. 지표는 시스템이 자신의 상태를 말하는 언어이고, 알람은 그 언어가 다급해진 순간이다. 이 관점에서 시스템은 함께 일하는 주체에 가깝다.
추상적인 수사로 들릴 수 있다. 그러나 실무에서는 명백한 차이로 나타난다. 통제의 관점은 장애를 '잘못된 상태'로 규정하고, 그것을 빠르게 정상으로 되돌리는 데 집중한다. 경청의 관점은 장애를 '시스템이 보내는 메시지'로 읽고, 그 메시지가 무엇을 뜻하는지 해석하는 데 시간을 쓴다.
빠른 복구만이 미덕인 조직에서는 같은 장애가 반복된다. 메시지를 읽지 않았기 때문이다. 해석에 시간을 쓰는 조직은 같은 장애를 두 번 겪지 않는다. 모델이 갱신되었기 때문이다.
## 보이지 않는 것을 보는 법
『장자(莊子)』에 포정해우(庖丁解牛)의 이야기가 있다. 소를 잡는 포정은 19년 된 칼을 새것처럼 쓴다. 비결을 묻자 그는 답한다. "신(神)으로 만나며 눈으로 보지 않습니다." 눈으로 소를 보는 자는 살을 베지만, 결을 따라 칼을 움직이는 자는 뼈에 닿지 않는다.
가시성은 결국 이 결을 읽는 일이다. 도구는 눈을 빌려주지만, 결은 빌려주지 않는다. 결은 시스템과 오래 함께한 자에게만 보인다.
## 가시성이라는 태도
가시성은 도구가 만드는 것이 아니라, 시스템을 관찰하려는 자세가 만드는 것이다. 정의된 지표 너머의 결을 읽으려는 의지이며, 시스템을 다스리려는 욕망이 아니라 시스템의 말을 들으려는 인내다.
대시보드는 빛나고 알람은 울린다. 그러나 보이지 않는 것은 여전히 보이지 않는다. 보이지 않는 것을 보기 위해, 우리는 도구의 바깥에 한 번 더 서야 한다.
> 知之者不如好之者 好之者不如樂之者.
> 아는 자는 좋아하는 자만 못하고, 좋아하는 자는 즐기는 자만 못하다.
시스템을 즐겁게 관찰하는 자에게만, 시스템은 자신의 결을 내어준다.