자동 수집이 며칠째 멈춰 있었는데 아무도 몰랐다
한눈에 답변
자동으로 매일 돌아야 하는 수집 작업이 특정 날짜를 마지막으로 멈춰 있었다는 것을, 저장소 접근 권한 밖에 있는 실행 로그 대신 데이터 자체의 시각 패턴을 역산해서 알아냈다. 문제는 멈춘 사실 자체가 아니라 멈춘 줄 아무도 몰랐다는 것이었다. 새로운 감시 인프라를 따로 만들지 않고, 매번 수집될 때마다 남는 시각 값을 심장 박동처럼 사용해 일정 시간 이상 갱신이 없으면 실패로 보고하는 검사를 만들었다.
무엇을 알아채지 못했나
매일 자동으로 실행돼야 하는 수집 작업이 특정 날짜를 마지막으로 멈춰 있었다. 저장소가 비공개라 실행 이력 화면을 직접 볼 수 없는 상황이었지만, 데이터 자체에 남은 흔적으로 이 사실을 역산할 수 있었다 — 정상적으로 자동 실행되던 기간에는 매일 거의 같은 시각에 수집이 이뤄졌는데, 특정 날짜부터는 시각이 들쭉날쭉해졌다. 이건 사람이 손으로 직접 실행한 흔적이었고, 실제로 그 무렵부터 수동 수집 기록이 남기 시작한 것과 정확히 맞아떨어졌다.
왜 멈췄는지는 확인할 수 있었나
정확한 원인은 실행 로그 화면을 직접 봐야 알 수 있는 부분이라 이번에는 확인하지 못했다. 오래 사용하지 않으면 자동으로 비활성화되는 정책, 실행 시간 소진, 반복된 실패 같은 몇 가지 후보만 남겨 뒀다.
진짜 문제는 무엇이었나
멈춘 사실 자체보다 더 큰 문제는 “멈춘 줄 아무도 몰랐다”는 것이었다. 실패는 눈에 띄지만, 조용히 안 돌아가고 있는 상태는 누군가 일부러 확인하지 않으면 드러나지 않는다.
어떻게 감지 장치를 만들었나
별도의 감시 서버나 알림 인프라를 새로 만들지 않고, 이미 매번 수집할 때마다 자연히 남는 시각 값을 심장 박동으로 삼았다. 가장 최근 수집 시각을 확인해서 일정 시간(36시간)이 넘도록 갱신이 없으면 검사가 실패하도록 만들었다.
만드는 과정에서 두 번 더 틀렸다
실행일 수를 셀 때 처음에는 “이 값이 마지막으로 갱신된 시각”을 기준으로 셌는데, 이 값은 재수집할 때마다 덮어써지기 때문에 실제로는 여러 날 실행됐어도 하루치로만 잡혔다. 매 회차마다 반드시 새로 생기는 다른 시각 값으로 바꾸고 나서야 실제 실행 일수와 맞아떨어졌다. 또 한 번은 데이터를 가져올 때 한 번에 가져올 수 있는 최대 개수 제한 때문에 그 이전 회차 전체가 통계에서 안 보이는 문제가 있었는데, 여러 번에 걸쳐 나눠 가져오도록 고쳐 해결했다.