Laravel 큐 모니터링 도구를 만들었습니다. 작업이 실제로 무엇을 하는지 몰라서 지쳤습니다
Source: Dev.to
왜 더 나은 큐 가시성이 필요했는가
어느 순간 Laravel 큐에서 무슨 일이 일어나고 있는지 제대로 이해하지 못하고 있다는 걸 깨달았다.
- 작업이 실행되고 있다
- 워커가 살아 있다
- 로그가 어딘가에 존재한다
하지만 간단한 질문에 답하려고 하면 벽에 부딪힌다.
- 이 작업이 실제로 해야 할 일을 했는가?
- 아니면 단순히 “성공적으로 완료”됐을 뿐인가?
- 어디서 조용히 깨지는가?
가장 짜증나는 부분은 무언가 조용히 실패하는 경우다: 작업이 실행되고, 오류를 내지 않으며, 성공으로 끝났지만 실제로는 아무 일도 하지 않는다. 처음엔 드물다고 생각했지만 파고들어 보니 여러 사례가 있었다. 이를 발견하게 된 계기는 실행 시간을 보는 것이었다—보통 작업은 ~500 ms가 걸리지만, 가끔 5 ms에 끝나는 경우가 있었고, 이는 의심스러웠다. 이런 빠른 완료는 “성공”했지만 사실상 아무 것도 하지 않는 작업이었다.
내가 원했던 것
무거운 설정 없이 큐 시스템을 명확하고 간단하게 볼 수 있는 화면:
- 지금 무슨 일이 일어나고 있는가?
- 무엇이 실패하고 있는가?
- 무엇이 이상해 보이는가?
실용적인 요구 사항:
- 모든 재시도 보기
- 실패 원인 파악
- 반복되는 오류 그룹화
- 하나의 작업이 아니라 여러 작업을 재시도
- 때때로 페이로드를 수정하고 다시 실행
그리고 물론 알림:
- Slack
- Webhook
- 중요한 이슈에 대한 PagerDuty
해결책: yammi-jobs-monitoring-laravel
이 모든 기능을 제공하는 작은 Laravel 패키지를 만들었다.
설치
composer require romalytar/yammi-jobs-monitoring-laravel
php artisan migrate
사용법
설치 후 모니터링 UI를 연다:
/jobs-monitor
무거운 설정 없이 바로 작동한다.
UI가 보여주는 내용
작업 상세
어떤 작업이든 열어 보면:
- 모든 시도 횟수
- 오류 (있는 경우)
- 각 시도의 실행 시간
단순히 “실패 / 성공” 플래그보다 훨씬 많은 인사이트를 제공한다.
기본 통계
- 가장 많이 실패하는 작업
- 가장 느린 작업
- 재시도 비율
실패 작업 (DLQ) 관리
- 재시도
- 편집 후 재시도 (JSON 페이로드)
- 일괄 작업
오류 그룹화
동일한 스택 트레이스를 일일이 스크롤하는 대신, 실패가 그룹화되어 같은 이슈에서 발생한 많은 오류를 한눈에 파악할 수 있다.
이상 감지
작업이 갑자기:
- 훨씬 느려지거나, 또는
- 의심스러울 정도로 빨리 완료되면
플래그가 지정된다. “너무 빠른” 경우는 종종 조용한 실패를 의미한다.
추가 기능
- 워커 하트비트 (워커가 사라지는 경우 감지)
- 스케줄된 작업 모니터링
- Slack, Webhook, PagerDuty 등 알림
피드백 요청
사용해 본 사람들의 의견을 듣고 싶다:
- 무엇이 빠졌는가?
- 무엇이 불필요한가?
- 실제 프로젝트에서 무엇이 잘 작동하는가?
스크린샷
저장소
소스 코드는 여기서 확인할 수 있다:
