인수한 시스템에서 cron 의 0 7 * * * 로 daily_report.sh 가 매일 아침 운영 요약 메일을 몇 해째 보내고 있었다. 그 메일 때문에 무언가를 한 적이 한 번도 없다는 것을 깨달았다.
Table of contents
Open Table of contents
배경 — 열람 기록이 보여 준 것
메일은 외부 발송 서비스로 나가고 거기에 open 이벤트가 남아 있어서 실제로 열리는지 확인했다. 수신자 열두 명 중 최근 한 달 안에 연 사람이 셋이고 정기적으로 여는 사람은 하나였다.
그 한 명에게 물으니 failed_jobs 숫자만 훑고 넘어간다고 했다. 이상한 것을 찾으려고 여는 것이 아니라 습관이었다.
원인 — 행동을 유발하지 않는다
왜 안 읽히는지 따져 보니 셋으로 갈렸다. 매일 오니까 특별하지 않고 숫자가 많은데 어디를 봐야 하는지 표시가 없고 무엇을 하라는 것인지 안 적혀 있었다.
셋 다 같은 문제의 다른 얼굴이었다. 읽히지 않는 것의 원인은 내용의 양이 아니라 그것이 행동을 유발하지 않는다는 점이었다.
조치 — 알림과 보고서의 분리
이것을 계기로 둘을 구분했다. 알림은 무언가 해야 할 때만 오고 오면 반드시 보는 것이고 보고서는 정기적으로 상태를 요약하는 참고용이다.
원래 daily_report.sh 의 메일은 보고서인데 알림처럼 매일 오고 있었다. 성격과 빈도가 어긋나 있으니 둘 중 어느 역할도 못 했다.
해 본 것 — 평소와 다를 때만 오는 조건
보고서에 담기던 것 중 실제로 행동이 필요한 항목을 골라 알림 조건을 만들었다. failed_jobs 가 지난 7일 평균보다 크게 늘면 알린다. device_jobs 의 한 단계가 30분 넘게 진행되지 않거나 어제 없던 error_type 이 나와도 알린다. 알림은 텔레그램 봇의 sendMessage 로 보낸다.
절대값이 아니라 평소와의 차이를 조건으로 삼는 쪽을 골랐다. 이유는 현장 수가 달마다 바뀌어 절대값 기준이 금방 낡아서다. 대신 평소가 이미 나쁜 상태면 알림이 안 오는 것을 감수했다. 알림 본문에는 어디를 확인하고 어떤 원인이 가능한지를 함께 적어서 받은 사람이 다음 행동을 알게 했다.
검증 — 빈도와 변화 표시
매일 나가던 요약은 weekly_report.sh 로 주 한 번으로 바꾸고 숫자 나열 대신 지난주 대비 변화를 앞에 뒀다. ▲ 와 ▼ 증감 표시와 판정을 붙여서 어디를 봐야 하는지를 드러냈다.
바꾸고 나서 open 이 크게 늘었다. 알림은 드물게 오니 오면 보고 보고서는 주 한 번이라 훑을 만해졌기 때문이다. 아무도 안 보는 것을 계속 보내면 진짜 중요한 것도 같이 묻히므로 없애는 것도 개선이었다.
정리
- 매일 나가는 것은 특별하지 않아서 안 읽힌다
- 읽히지 않는 원인은 양이 아니라 행동을 유발하지 않는 것이다
- 알림과 보고서를 나눈다
- 성격과 빈도가 어긋나면 둘 중 어느 역할도 못 한다
- 알림 조건은 절대값이 아니라 평소와의 차이로 만든다
- 알림에 다음 행동을 적는다
- 보고서는 빈도를 줄이고 변화를 앞에 둔다
- 안 읽히는 것을 없애는 것도 개선이다