일정산 배치 결과를 텔레그램 봇의 sendMessage 로 보내면서 성공과 실패 건수만 넣었더니 받을 때마다 Kibana 에 들어가 조회하게 됐다. 밤에 알림이 오면 그것 때문에 노트북을 열었고 대부분은 열어 보면 별것 아니었다.
Table of contents
Open Table of contents
증상 — 요약만 보낸 알림
건수만 있으면 무엇이 실패했는지 알 수 없다. 그것을 알려면 반드시 Kibana 로 넘어가야 한다.
반대로 상세를 전부 넣어 봤더니 길어져서 아무도 안 읽었다. Telegram Bot API 공식 문서대로 text 는 4096자까지라 잘리기까지 했고 스크롤조차 하지 않고 넘겼다.
원인 — 요약만이면 다시 묻고 전부면 안 읽는다
두 실패는 방향이 반대인데 원인은 같아서 받는 사람이 무엇을 판단해야 하는지를 안 보고 양을 정한 것이었다. 그 판단은 지금 봐야 하는지 아침에 봐도 되는지 하나였다.
그래서 reason 별 건수와 그 판단에 대한 답을 함께 넣고 상세는 Kibana 링크로 뒀다. 재실행으로 해결되는지 아닌지를 한 줄로 적으니 그 자리에서 판단이 끝났다.
판단 기준 — 판단에 필요한 만큼
사유별로 몇 건인지가 있으면 데이터 문제인지 일시 오류인지가 갈린다. 어느 건인지까지는 링크를 열어야 하지만 지금 열지 말지는 알림에서 정해진다.
알림의 길이를 정하는 기준이 정보의 양이 아니라 판단의 종류가 됐다. 그 판단에 안 쓰이는 항목은 아무리 유용해 보여도 뺐다.
조치 — 긴급도와 보내는 방식
실패 비율과 오류 종류로 긴급도를 자동 판정해 [P1]·[P3] 말머리에 넣었다. 말머리만 보고 지금 열지를 정할 수 있다.
두 가지 방법이 있었다. 긴급도와 무관하게 한 채널로 다 보내고 말머리로만 가르는 것과, 긴급한 것은 당직 채널로 아닌 것은 일반 채널로 경로를 나누는 것이다. 뒤쪽을 골랐다. 이유는 당직 채널만 알림음을 켜 두면 밤에 노트북을 여는 기준이 채널 하나로 정해져서다. 대신 봇 설정과 chat_id 가 둘로 늘어나는 것을 감수했다. 성공한 것도 안 오는 것과 구분하려고 보내되 배치별로 보내지 않고 하루 한 번 묶어서 보냈다.
반복 알림을 묶는 법
같은 원인으로 여러 번 오는 경우가 있어서 dedupe_key 가 같은 내용은 일정 시간에 한 번만 보내게 했다. 그동안 몇 번 더 일어났는지는 세어 두고 다음 발송에 함께 넣었다.
한 번만 보내면 심각성을 모르고 매번 보내면 다른 알림에 묻힌다. 묶으면서 횟수를 같이 보내니 두 문제가 함께 풀렸고 하루 알림 수가 크게 줄면서 읽는 비율이 올라갔다.
정리
- 요약만 보내면 다시 물어보고 전부 보내면 안 읽는다
- 양을 정하기 전에 받는 사람이 무엇을 판단하는지 본다
- 그 판단에 안 쓰이는 항목은 유용해 보여도 뺀다
- 지금 봐야 하는지를 자동 판정해
[P1]말머리에 넣는다 - 긴급도에 따라 보내는 채널을 나눈다
- 성공한 것도 보내되 묶어서 하루 한 번 보낸다
- 같은
dedupe_key는 억제하되 횟수를 세어 함께 보낸다 - 알림이 많으면 알림이 없는 것과 같으므로 개수를 센다