본문 바로가기
Back-end/Python

[Celery] 무작정 시작하기 (5) - Monitoring

by 허도치 2020. 1. 28.

2020/01/10 - [Back-end/Python] - [Celery] 무작정 시작하기 (1) - 설치 및 실행

2020/01/17 - [Back-end/Python] - [Celery] 무작정 시작하기 (2) - Task

2020/01/20 - [Back-end/Python] - [Celery] 무작정 시작하기 (3) - Chain

2020/01/20 - [Back-end/Python] - [Celery] 무장적 시장하기 (4) - Group과 Chord

 

 

  지금까지 Celery에서 Task를 사용하는 예제들을 다루면서 실행 상태를 확인 할 때 Celery Log만 봤었다. 크롤링에 Task를 사용하면서 수행시간이 긴 Task를 확인하고 중단 할 필요가 생겼다. 당연히 Log에서는 처리할 수 없는 부분들이었다. 그래서 찾아보니 특정 명령어를 입력해서 처리 할 수도 있었다. 그러나, 명령어를 매번 입력하여 처리하는게 꽤나 번거로웠다. 그래서 Celery를 Monitoring하고 관리할 수 있는 Tool을 찾아보았는데, 공식문서에서 두 개의 Monitoring Tool을 지원한다는 것을 확인하였다. 그래서 이번 포스트에서는 이 Tool들을 직접 사용하면서 정리한 내용들을 다룰계획이다.

 

 

이 포스트는 Windows 10 기반으로 작성되었습니다.

 

 

1. Monitoring Tool 종류.

   1-1. Celery Events.

         - curses를 이용한 Monitoring Tool.

         - 작업의 결과와 추적 검사 수, 속도 제한 및 작업자의 종료 등의 관리 명령도 지원.

         - 단순히 개념 증명용으로 만들어진 것으로 Flower를 사용하는 것을 권장.

         - TUI 특성상 화면이 텍스트로만 구성되어 있고 키보드로만 조작할 수 있어서 매우 불편함.

         - Uinx계열 OS를 사용하면 별도의 설치없이 Celery를 실행할 때 [ -E ]옵션을 주면 사용할 수 있음.

         - Windows에서는 curses를 지원하지 않기 때문에 별도의 설치가 필요함.

         - 더 자세한 내용은 공식 문서 참조.

 

           * curses는 Unix계열 OS의 터미널 제어 라이브러리로, 텍스트 사용자 인터페이스(TUI) 응용 프로그램을 구성할 수 있음.

 

 

   1-2. Flower.

         - Web 기반의 실시간 Monitoring 및 관리 Tool.

         - 아직 개발중이지만 필수 Tool로 자리잡고 있음.

         - 작업자 상태 및 통계보기, 작업자 인스턴스 종료 및 다시 시작 등 Web을 통해 Celery를 관리할 수 있음.

         - Web뿐만아니라 API를 지원하여 좀 더 세부적으로 Celery를 관리할 수 있음.

         - 더 자세한 내용은 공식 문서 참조.

 

 

2. Celery Events.

   2-1. 설치.

         - Unix 계열의 OS를 사용한다면 설치할 필요없음.

         > pip install windows-curses

 

   2-2. 실행.

         > celery -A [APP_NAME] events

         > celery -A dochi_app events

 

   2-3. 실행 화면.

 

   2-4. Task를 실행한 후 화면.

         - UUID, WORKER, TASK, TIME, STATE를 확인할 수 있음.

         - STATE에서 Task의 상태를 확인할 수 있음.

           * [ RECEIVED ]: 요청받은 Task를 Queue에 적재한 상태.

           * [ STARTED ]: Task를 Queue에서 가져와서 실행한 상태.

           * [ SUCCESS ]: Task가 완료된 상태.

           * [ FAILED ]: Task가 실패한 상태.

         - 화면 하단에 [ Keys ]에 입력 가능한 키를 확인할 수 있음.

           * [ j ]: 커서 Down.

           * [ k ]: 커서 Up.

           * [ i ]: 상세화면.

           * [ t ]: 역추적.

           * [ r ]: 결과화면.

           * [ ^c ]: 종료.

           * 확인결과 Windows에서 [ t, r, ^c ]를 사용하면 반응이 없음.

 

   2-5. 상세화면.

 

   2-6. 결과화면.

 

 

3. Flower.

   3-1. 설치.

         > pip install flower

 

   3-2. 실행.

         - 여러가지 실행방법이 있으나, 가장 기본적인 방법만 소개.

         > celery [ -A APP_NAME ] flower [ Options ]

         > celery -A dochi_app flower --address=localhost --port=5555

 

   3-2. 실행 확인.

 

 

   3-3. Flower Web 접속.

         - [ http://localhost:5555 ]로 접속

 

 

4. Flower 탭별 확인.

   4-1. [ Dashboard ]탭.

         - 시작화면으로 모든 Worker의 상태를 실시간으로 확인할 수 있음.

         - [ Active ]: 현재 수행중인 Task의 수.

         - [ Processed ]: 수행한 모든 Task의 수.

         - [ Failed ]: 수행에 실패한 Task의 수.

         - [ Succeeded ]: 수행에 성공한 Task의 수.

         - [ Retried ]: 재수행 중인 Task의 수.

         - Worker의 목록.

 

   4-2. [ Tasks ] 탭.

         - Celery Events보다 디테일한 Task 정보들을 확인할 수 있음.

         - [ UUID ]를 클릭하면 상세 정보를 확인 할 수 있으며 완료되기 전이라면 중단시킬 수 있음.

         - [ Worker ]를 클릭하면 해당 Task를 처리하는 Worker에 대한 정보를 확인 할 수 있음.

         - 실시간으로 확인할 수가 없어서 계속 Refresh 해주어야함.

 

   4-3. [ Broker ] 탭.

         - Queue에 대한 정보를 확인할 수 있음.

         - [ Messages ]: 받은 Tasks의 수.

         - [ Unacked ]: Celery가 Message를 받았는지에 대한 응답 건수.

         - [ Ready ]: 대기중인 Message의 수.

         - [ Consumers ]: Queues에 접속해있는 Worker의 수.

         - [ Idle since ]: 마지막으로 집계된 시간.

 

   4-4. [ Monitor ] 탭.

         - Task의 수행 상태, 시간, Queue에 적재된 Tasks의 수를 그래프로 확인 할 수 있음.

 

 

5. Flower HTTP API.

   5-1. Worker 목록 조회.

         - GET http://localhost:5555/api/workers

 

   5-2. Task 목록 조회.

         - GET http://localhost:5555/api/tasks

 

   5-3. 이 기능은 다룰게 많아서 공식 문서를 직접 보고 필요한 것만 사용하는 것을 추천.

 

 

 

6. 마치며.

   - Monitoring Tool을 쓰면서 지금까지 Celery Log만 확인했던 내 자신을 반성하게 되었다. 이렇게 시각화가 잘 되어 있는 Tool이 있었을 줄은 몰랐다. 앞으로는 새로운 프로그램을 사용하면 Monitoring Tool이 있는지 먼저 확인해봐야겠다.

   - API 관련 내용은 

   - 그리고, 이렇게 또 하나의 Web을 띄울게 생겼으니 Docker에 올려서 사용해야겠다.

댓글