Horizon 이란
Laravel Horizon은 Laravel의 Redis 큐 전용 감시 대시보드입니다. 잡의 스루풋·실행 시간·실패 상황을 실시간으로 가시화하고, 워커 설정을 코드로 관리할 수 있습니다.설치
Composer로 설치합니다.config/horizon.php와 app/Providers/HorizonServiceProvider.php가 생성됩니다.
설정
config/horizon.php 의 구성
config/horizon.php는 워커의 설정을 모두 관리하는 파일입니다. 중심이 되는 설정이 environments 옵션입니다.
Horizon은 내부에서
horizon이라는 이름의 Redis 접속을 사용합니다. config/database.php에서 이 이름을 다른 접속에 사용하지 마십시오.슈퍼바이저(Supervisor)
각 환경은 하나 이상의 “슈퍼바이저”를 가질 수 있습니다. 슈퍼바이저는 워커 그룹의 관리 단위이며, 서로 다른 큐·밸런스 전략·프로세스 수를 갖는 여러 슈퍼바이저를 동일 환경에서 움직일 수 있습니다.기본값
defaults 옵션으로 모든 슈퍼바이저에 적용되는 기본값을 설정할 수 있습니다.
유지보수 모드
애플리케이션이 유지보수 모드일 때, Horizon은 기본적으로 잡을 처리하지 않습니다. 강제로 처리시키려면force 옵션을 사용합니다.
잡의 최대 시도 횟수
tries를 0으로 하면 무제한 재시도를 허가합니다.
잡의 타임아웃
백오프(재시도의 대기 시간)
예외 발생 후 재시도까지의 대기 초 수를 지정합니다.밸런스 전략
Horizon에는 3종류의 워커 밸런스 전략이 있습니다.auto(기본값)
auto(기본값)
큐의 부하에 따라 워커 수를 자동 조정합니다.
minProcesses와 maxProcesses로 범위를 지정합니다.time— 큐를 비울 때까지의 추정 시간으로 스케일링size— 큐 내의 잡 수로 스케일링
auto 전략에서는 큐의 순서가 우선도를 의미하지 않습니다. 우선도를 강제하고 싶은 경우 여러 슈퍼바이저를 사용해 주십시오.simple
simple
워커 수를 고정하고, 지정한 큐에 균등하게 분배합니다.위에서는
default와 notifications에 각각 5프로세스씩 할당됩니다.false(밸런스 없음)
false(밸런스 없음)
큐를 열거한 순서대로 엄격히 우선합니다. Laravel 기본의 큐 시스템과 같은 동작이지만, 적체에 따라 워커 수를 스케일링합니다.
default 큐의 잡이 항상 notifications 큐보다 먼저 처리됩니다.대시보드의 인가
Horizon의 대시보드는/horizon 라우트에서 접근할 수 있습니다. 로컬 환경에서는 기본적으로 누구나 접근할 수 있지만, 운영 환경에서는 게이트 정의로 접근을 제한합니다.
app/Providers/HorizonServiceProvider.php의 gate() 메서드를 편집합니다.
Horizon 의 기동
기본 명령어
로컬 개발: 자동 재기동
파일 변경을 감지해 Horizon을 자동 재기동하려면horizon:listen 명령어를 사용합니다.
Supervisor 에 의한 상시 기동
운영 환경에서는 Supervisor를 사용해 Horizon을 상시 가동시킵니다.Supervisor 의 설치
설정 파일의 작성
/etc/supervisor/conf.d/horizon.conf를 작성합니다.
Supervisor 의 기동
배포 시
코드를 배포할 때마다 Horizon을 재기동해 변경을 반영합니다.autostart=true / autorestart=true로 되어 있으면, 종료 후에 자동으로 재기동됩니다.
잡의 관리
태그
Horizon은 잡에 관련된 Eloquent 모델을 자동 검출해 태그를 붙입니다.tags() 메서드를 구현합니다.
tags() 메서드에 전달됩니다.
사일런트화
대시보드의 “완료된 잡” 리스트에 표시하고 싶지 않은 잡은config/horizon.php에서 사일런트화할 수 있습니다.
Silenced 인터페이스를 구현하는 방법도 있습니다.
메트릭과 모니터링
Horizon의 메트릭 대시보드에는 잡·큐의 스루풋과 실행 시간이 표시됩니다. 정기적으로 스냅숏을 취득하기 위한 스케줄을 설정합니다.잡 실패의 통지
큐의 대기 시간이 길어졌을 때 통지를 받을 수 있습니다.app/Providers/HorizonServiceProvider.php의 boot() 메서드에서 설정합니다.
대기 시간의 임계값
config/horizon.php의 waits 옵션으로 통지 트리거가 되는 대기 초 수를 설정합니다.
0을 설정하면 그 큐의 통지는 무효화됩니다.
실패 잡의 관리
실패한 잡은 ID 또는 UUID로 삭제할 수 있습니다.업그레이드
Horizon의 메이저 버전 업데이트 시에는 업그레이드 가이드를 반드시 확인해 주십시오.관련 페이지
큐와 잡
Laravel 큐의 기본. 잡의 작성·디스패치·배치 처리·실패 처리를 설명.
Redis
Horizon의 백엔드로서 필요한 Redis의 설정과 사용법.