몇 년 동안 쌓인 장애 기록으로 대응 시간을 비교하는 화면을 만들려고 했다. 먼저 기록을 원본과 대조했더니 발생 시각과 인지 시각과 복구 시각이 사람마다 다른 기준으로 적혀 있었다.

같은 이름이 붙어 있어도 그대로 비교할 수 없었다. 그래서 화면을 만들기 전에 각 시각이 무엇을 뜻하는지부터 맞췄다.

장애 데이터에는 발생 시각과 인지 시각과 복구 시각이 있었다. 숫자는 이미 정리되어 있었지만 바로 믿을 수는 없었다.

발생 시각에 고객 문의가 들어온 시간을 적은 경우가 있었다. 최초 알람 시각을 적은 경우도 있었다. 복구 시각에는 조치를 완료한 시간과 지표가 정상으로 돌아온 시간이 섞여 있었다. 롤백으로 복구한 장애가 핫픽스로 분류된 사례도 있었다.

장애 채널을 하나씩 열어 공지와 타임라인을 조치 기록과 대조했다. 시간이 맞지 않는 기록은 수정하고 복구 방법이 잘못 적힌 경우는 다시 분류했다. 근거가 부족한 기록은 검증하지 못한 상태로 남겼다.

이 기록을 그대로 그래프로 만들었다면 서로 다른 의미의 시간을 비교하게 됐을 것이다.

장애 시각

장애 대응 시간을 비교하려면 각 시점이 무엇을 뜻하는지 먼저 합의해야 한다.

  • 발생은 고객 영향이 시작된 시점이다.
  • 감지는 시스템이나 사람이 이상을 처음 확인한 시점이다.
  • 인지는 대응 조직이 장애로 판단한 시점이다.
  • 첫 조치는 롤백이나 증설처럼 복구를 위해 실행한 첫 행동의 시작이다.
  • 복구는 고객 영향이 멈춘 것을 지표로 확인한 시점이다.

채널에 복구된 것 같다는 메시지가 올라온 시간은 복구 시각이 아니다. 조치가 끝났더라도 고객 영향 지표가 정상으로 돌아오지 않았다면 아직 복구되지 않은 것이다.

정의가 같아지자 어느 단계에서 시간이 오래 걸리는지 비교할 수 있었다. 감지가 늦었는지 판단이 늦었는지 조치가 늦었는지를 나눠 볼 수 있었다.

검증한 기록에는 알람보다 사람이 먼저 발견한 장애가 적지 않았다. 사람이 발견한 장애는 알람이 감지한 장애보다 오래 지속되는 경향이 있었다.

더 높은 등급의 장애가 더 오래 지속될 것이라는 예상도 틀렸다. Critical 장애는 모두 알람으로 감지됐다. 반면 낮은 등급의 장애에는 알람이 놓친 사례가 많았다. 그 결과 낮은 등급의 장애가 Critical 장애보다 더 오래 지속됐다.

등급이 낮아서 대응이 느렸던 것만은 아니었다. 장애 인지까지의 시간이 길었다.

이 결과를 보고 대응 인력을 늘리는 것보다 먼저 감지되지 않는 영역을 줄여야 한다고 판단했다. 사람의 주의력만으로 알람이 없는 구간을 계속 감시할 수는 없기 때문이다.

첫 공지

장애를 감지한 뒤에는 전사 공지를 통해 장애 상황을 알리고 같은 정보를 공유해야 한다. 원인 분석이 끝날 때까지 공지를 미룰 수는 없다.

첫 공지에는 확인된 고객 영향과 현재 대응 주체를 적는다. 실행 중인 복구 조치가 있다면 함께 공유한다. 아직 모르는 내용은 모른다고 남긴다. 다음 상태 공유 시점도 정한다.

이 정보가 있어야 다른 팀이 같은 질문을 반복하지 않는다. 리더십도 추측으로 우선순위를 정하지 않아도 된다. 장애 대응자는 원인 분석과 복구에 집중할 수 있다.

우리는 Critical 장애를 5분 안에 감지하고 전파하는 체계를 목표로 삼았다. 자동 감지와 온콜 호출을 연결하고 Incident Commander의 책임을 정했다. 누가 언제 무엇을 기록하고 다음 행동을 시작할지도 미리 정했다.

대응 시간을 그래프로 비교하면 어느 단계에서 오래 걸렸는지와 개선 전후의 차이를 확인할 수 있다.

같은 이름의 시간이 서로 다른 시점을 뜻하면 비교할 수 없다. 그래프를 만들기 전에 기록 기준을 맞춰야 했다.

장애가 시작되고 끝나는 기준을 먼저 정하고 최초 공지와 주요 의사결정을 남길 위치를 정했다. 기록은 실제 장애 채널과 대조할 수 있게 했다.

이렇게 기준과 기록 방식을 맞춘 뒤에는 조직이 같은 기준으로 장애 시각과 대응 시간을 추적할 수 있었다. 발생부터 복구까지 어느 단계에서 시간이 오래 걸렸는지도 그래프로 비교할 수 있었다.