운영 이슈 테스트를 위한 CS4SB (1/2)

안승섭·2023년 3월 19일
0

경험들

목록 보기
6/7

What is Chaos Monkey?

우리가 서비스를 운영하다보면 간혹 장애가 발생하는 일이 있다. 장애 상황은 다양해 경험했을 수도, 예기치 못할 수도 있다. Chaos Monkey는 운영 환경에서 장애 상황을 가정하고 대응할 수 있도록 함으로써 약점을 진단하고 보완하기에 시스템에 대한 신뢰성을 높여준다.

Get Start

Chaos monkey는 4단계로 진행하며 방법은 아래와 같다.

  1. 시스템의 측정 가능 통계치로 '정상 상태' 정의하기
  2. 정상 상태가 대조군과 실험군 모두 유지될 것이라고 가정하기
  3. 인프라 장애, 네트워크 지연, 메모리 누수 등 실제 문제들로 변수 정의하기
  4. 대조군과 실험군을 비교해 가설 검증하기

실험을 지속하면서 약점을 발견하고 정상 상태를 방해하는 것이 어려울수록 신뢰성을 높이는 것이 목표이다.

CM4SB 적용


위 그림처럼 chaos monkey 프로필을 활성화하면 watcher를 활성화 시켜 대상 서비스를 공격할 수 있다. 아래는 적용하는데 작성한 코드이다.

build.gradle

implementation 'de.codecentric:chaos-monkey-spring-boot:2.7.1'
implementation 'org.springframework.boot:spring-boot-starter-actuator'

application.yml

spring:
  profiles:
    active: chaos-monkey
  
  
chaos:
  monkey:
    enabled: true
    watcher: // watcher 활성화 대상
      controller: false
      restController: false
      service: true
      repository: false
    assaults:
      level: 3 // 공격할 요청 수 (1-10000까지 설정가능) n번째 요청 시 공격
      latencyActive: true // 지연 발생 공격
      latencyRangeStart: 1000 // 최소 지연 시간
      latencyRangeEnd: 3000 // 최대 지연 시간
      exceptionsActive: false// 예외 발생
      exception:
        type: java.lang.RuntimeException // 공격 시 적용 예외
      killApplicationActive: false // appkiller 공격
      cpuActive : false // cpu 자원 공격

management:
  endpoint:
    chaosmonkey:
      enabled: true

  endpoints:
     web:
       exposure:
         include:
           - health
           - info
           - chaosmonkey

Chaos Monkey가 응답 지연을 발생시키는지 확인을 위해 지난번 포스팅에서 작성한 APM을 참고한다. level: 3으로 latencyActive를 활성화했기에 3번째 요청을 주로 살펴보겠다.

아래와 같이 Jmeter로 초당 1개의 요청을 가정해 보내봤다.

위 HTTP 요청으로 chaos monkey가 활성 중인지 보거나 활성시킬 수 있고 wathcer나 assaults도 확인 후 활성화 시킬 수 있다.
현재는 아래와 같이 latency assualts만 활성화 중인 상태다.

APM

아래 요청으로 latency 횟수를 변경해본 후(level : 10) 다시 모니터링을 해봤다.

예상대로 avg가 줄어들었다. 다음 포스팅에선 예외 발생 assaults를 활용한 테스트를 진행해보겠다.

참고
http://channy.creation.net/blog/1173 (카오스 엔지니어링의 원칙)
https://codecentric.github.io/chaos-monkey-spring-boot/latest/ (CM4SB doc)
https://www.inflearn.com/course/the-java-application-test/dashboard (더 자바, 애플리케이션을 테스트하는 다양한 방법)

profile
Just Do It!

0개의 댓글