본문 바로가기

DEVELOP_NOTE/그 외

[Flower]Celery웹 모니터링 도구 'Flower'을 분해해보자.

Flower는 'Celery'의 웹 모니터링 도구로, 작업 큐를 추적하고 관리하는 도움이 되는 Tool이다.

최근에는 celery 사용 시 필수적으로 사용되는 도구로, 오늘은 Flower Dashboard의 각 항목을 분해해보려한다. 

 

Flower 대시보드 화면

'Flower' Dashboard

Flower의 dashboard에서는 위와 같이 각 worker들의 상태와 작업량, 작업부하등의 정보를 보기쉽게 담고있다.

대시보드의 각 컬럼들이 의미하는바에 대해 정리해보자.

 

(1) 'Worker Name'

워커의 고유한 이름으로 이 이름은 각 워커를 식별하는데 사용된다.

각 worker name은 celery가 실행되어있는 docker container id를 표시하고 있다.

 

(2) 'Status'

worker의 현재 상태를 표현하는것으로 일반적으로 'Online' 또는 'Offline'으로 표시된다.

Online은 워커가 정상적으로 작동중임을 의미하며, Offline은 워커가 작동하지 않거나, 연결이 끊겼음을 나타낸다.

 

(3) 'Active'

현재 실행중인 작업의 수를 나타낸다.

워커가 처리중인 작업의 수가 몇 개인지를 나타낸다.

 

(4) 'Processed'

워커가 시작된 이후 처리한 작업의 총 개수를 나타낸다.

작업이 성공적으로 완료되거나, 실패했든간에 처리된 작업이 포함된다.

 

(5) 'Failed'

워커가 처리하는 동안 실패한 작업의 개수이다.

실패한 작업은 예외가 발생하거나 처리중에 문제가 발생한 작업을 의미한다.

 

(6) 'Succeeded'

워커가 처리하는 동안 성공적으로 완료한 작업의 개수이다.

성공적으로 처리된 작업은 워커가 정상적으로 작업을 완료하고 결과를 반환한것을 의미한다.

 

(7) 'Retried'

워커가 처리하는 동안 재시도된 작업의 개수이다.

재시도된 작업은 일시적인 문제로 인해 처음에 실패했으나, 설정된 재시도 정책에 따라 다시 시도된 작업을 의미한다.

 

* 잠깐, 재시도 정책은 어떻게 설정할까?

celery에서 재시도 설정은 작업(task)데코레이터 내에 설정할 수 있다.

'autoretry_for' 및 'retry_kwargs'매개변수를 사용해서 예외유형 및 재시도에 대한 설정을 지정할 수 있다.

예를들어, 작업이 'SomeException'예외를 발생시킬 때 재시도하려면 다음과 같이 작업을 정의하면 된다.

from celery import Celery
from some_module import SomeException

app = Celery('task', broker='pyamqp://guest@localhost//')

@app.task(autoretry_for=(SomeException,), retry_kwargs={'max_retries':3, 'countdown' : 5})
def some_task():
	#your task logic here
    pass

위 예제에서, autoretry_for에 SomeException이 포함되어 있으므로, 해당 작업이 실행 중 SomeException 예외를 발생시키면 자동으로 재시도합니다

위 예제에서, 'autoretry_for'에 'SomeException'이 포함되어 있으므로, 해당 작업이 실행 중 'SomeException'예외를 발생시키면 자동으로 재시도한다.

'retry_kwargs' 매개변수는 재시도 관련 설정을 제공합니다. 

'max_retries'는 최대 재시도 횟수를 지정하고, 'countdown'은 재시도 간 시간 간격(초)을지정합니다.

 

 

(8) 'Load average'

워커  시스템의 평균 부하를 나타낸다.

이 값은 일반적으로 1분 / 5분 / 15분 동안의 시스템 부하 평균을 표시한다.

시스템 부하는 시스템에서 실행중인 프로세스와 대기중인 프로세스의 총 개수를 나타내며, 시스템 가용 리소스와 관련된 성능지표를 의미한다.

 

 

 

 

대시보드에 표현된 정보를 통해 아래와 같이 조치할 수 있다.

 

1. 만약, Active값이 높다면 

워커의 부하가 높아질 수 있으므로, 추가 워커를 투입하거나 작업큐의 크기를 조절하여 부하를 줄일 수 있다.

또한 실패한 작업이 많은 경우 워커 코드를 검토하여 문제를 해결하거나, 시스템 자원을 증가시켜 워커의 처리능력을 향상시킬 수 있다.

 

2. Load average가 어느정도 되면 높다고 판단하는걸까?

load average의 정상범위는 CPU 코어수와 관련이 있는데, 일반적으로 부하평균이 CPU코어 수보다 낮으면 시스템이 정상적으로 작동하고 있는것으로 간주한다.

예를들어, "4개의 CPU 코어가 있는 시스템에서 부하평균(load average)이 4 미만이라면 시스템이 정상적으로 운영되고 있다"고 볼 수 있다

 

* CPU 코어 수 확인방법

nproc

nproc 명령어를 통해 cpu코어가 4개인것을 확인