테스트 GitLab 인스턴스에서 카오스 생성하기
GitLab 개발 환경에서 느린 요청, CPU 과부하, 메모리 누수, 프로세스 비정상 종료 등 장애 상황을 시뮬레이션하는 카오스 엔드포인트의 사용 방법을 설명합니다.
Amazon Web Services의 CTO인 Werner Vogels 가 유명하게 말했듯이, 모든 것은 언제나 실패합니다 . 개발자로서, 소프트웨어가 일반적으로 동작하는 방식만큼이나 장애가 발생할 수 있는 상황을 함께 고려하는 것이 중요합니다. 이를 통해 소수의 사용자가 경험하는 몇 가지 500 오류로 끝나는 사소한 문제와, 모든 사용자에게 장시간 영향을 미치는 전체 서비스 중단 사이의 차이를 만들 수 있습니다. Tolstoy 를 인용하자면, 행복한 서버는 모두 비슷하지만, 실패하는 서버는 저마다 다른 방식으로 실패합니다 . 다행히도 이러한 장애 상황을 시뮬레이션할 수 있는 방법이 있으며, 카오스 엔드포인트는 이 과정을 지원하는 도구입니다. 현재 다음 상황을 시뮬레이션하는 네 가지 엔드포인트가 있습니다: 느린 요청 CPU 바운드 요청 메모리 누수 예상치 못한 프로세스 충돌 카오스 엔드포인트 활성화 # 명백한 이유로, 이 엔드포인트들은 production 환경에서는 기본적으로 비활성화되어 있습니다. development 환경에서는 기본적으로 활성화되어 있습니다. 카오스 엔드포인트에 대한 접근을 시크릿 토큰으로 보호해야 합니다. 무엇을 하는지 정확히 알지 못하는 이상 프로덕션 환경에서는 활성화하지 않는 것이 좋습니다. 시크릿 토큰은 GITLAB_CHAOS_SECRET 환경 변수를 통해 설정할 수 있습니다. 예를 들어, GDK 를 사용하는 경우 다음 명령어로 설정할 수 있습니다: GITLAB_CHAOS_SECRET=secret gdk start secret 을 본인의 시크릿 토큰으로 교체하세요. 카오스 호출하기 # 카오스 엔드포인트를 활성화하고 애플리케이션을 재시작한 후, 엔드포인트를 사용하여 테스트를 시작할 수 있습니다. 기본적으로 카오스 엔드포인트를 호출하면, 요청을 수신한 웹 워커 프로세스가 이를 처리합니다. 예를 들어 Kill 작업을 호출하면, 요청을 처리하는 Puma 워커 프로세스가 종료됩니다. Sidekiq에서 이 작업들을 테스트하려면 각 엔드포인트의 async 파라미터를 true 로 설정하세요. 이렇게 하면 카오스 프로세스가 Sidekiq 워커에서 실행됩니다. 메모리 누수 # 애플리케이션의 메모리 누수를 시뮬레이션하려면 /-/chaos/leakmem 엔드포인트를 사용하세요. 요청이 완료된 후에는 메모리가 유지되지 않습니다. 요청이 완료되면 Ruby 가비지 컬렉터가 메모리 회수를 시도합니다. GET /-/chaos/leakmem GET /-/chaos/leakmem?memory_mb=1024 GET /-/chaos/leakmem?memory_mb=1024&duration_s=50 GET /-/chaos/leakmem?memory_mb=1024&duration_s=50&async=true 속성 타입 필수 여부 설명 memory_mb integer 아니오 누수시킬 메모리 양(MB). 기본값은 100 MB. duration_s integer 아니오 메모리를 유지할 최소 시간(초). 기본값은 30초. async