지정된 Java 프로세스의 로그 파일에서 마지막 두 줄의 숫자를 비교하고 그 차이를 계산하여 합산합니다.

 


#!/bin/bash

source /home/shell/env.sh


#JavaNames_gc=("대상 프로세스 이름")

total=0

for JavaName in "${JavaNames_gc[@]}"
do

log_file=$MY_HOME_LOG/log_gccount_$JavaName.log

  • 각 Java 프로세스의 로그 파일 경로를 설정
  • MY_HOME_LOG는 환경 변수이며, 로그 파일 이름은 log_gccount_<JavaName>.log 형식입니다.


# 마지막 두 줄 가져오기
LAST_TWO_LINES=$(tail -n 2 $log_file)

  • tail -n 2 명령어로 로그 파일의 마지막 두 줄을 가져와 LAST_TWO_LINES 변수에 저장


# 마지막 줄과 마지막에서 두 번째 줄의 숫자 추출
LAST_LINE_NUM=$(echo "$LAST_TWO_LINES" | tail -n 1 | grep -o '[0-9]\+')

  • echo "$LAST_TWO_LINES"로 마지막 두 줄을 출력하고, tail -n 1으로 마지막 줄을 가져온 후, grep -o '[0-9]\+'로 숫자만 추출하여 LAST_LINE_NUM 변수에 저장

SECOND_LAST_LINE_NUM=$(echo "$LAST_TWO_LINES" | head -n 1 | grep -o '[0-9]\+')

  • echo "$LAST_TWO_LINES"로 마지막 두 줄을 출력하고, head -n 1으로 첫 번째 줄을 가져온 후, grep -o '[0-9]\+'로 숫자만 추출하여 SECOND_LAST_LINE_NUM 변수에 저장


# 두 숫자의 차이 계산
DIFFERENCE=$( (LAST_LINE_NUM - SECOND_LAST_LINE_NUM) )

  • LAST_LINE_NUM과 SECOND_LAST_LINE_NUM의 차이를 계산하여 DIFFERENCE 변수에 저장합니다.


# 차이 출력
total=$(expr $total + $DIFFERENCE)

done

echo $total


 

더보기

#!/bin/bash

source /home/shell/env.sh


#JavaNames_gc=("대상 프로세스 이름")

total=0

for JavaName in "${JavaNames_gc[@]}"
do

log_file=$MY_HOME_LOG/log_gccount_$JavaName.log

# 마지막 두 줄 가져오기
LAST_TWO_LINES=$(tail -n 2 $log_file)

# 마지막 줄과 마지막에서 두 번째 줄의 숫자 추출
LAST_LINE_NUM=$(echo "$LAST_TWO_LINES" | tail -n 1 | grep -o '[0-9]\+')
SECOND_LAST_LINE_NUM=$(echo "$LAST_TWO_LINES" | head -n 1 | grep -o '[0-9]\+')

# 두 숫자의 차이 계산
DIFFERENCE=$( (LAST_LINE_NUM - SECOND_LAST_LINE_NUM) )

# 차이 출력
total=$(expr $total + $DIFFERENCE)

done

echo $total

이 스크립트는 주어진 Java 프로세스들의 GC(Garbage Collection) 카운트를 확인하고, 최대 GC 카운트를 출력하는 작업을 수행합니다.

 


#!/bin/bash

source /home/shell/env.sh


#JAVA_WHERE="/usr/bin"
#JavaNames_gc=("대상 프로세스 이름")

max_GC_COUNT=0
for JavaName in "${JavaNames_gc[@]}"

  • 배열 JavaNames_gc의 각 요소에 대해 루프를 시작

do


# 검색되는 프로세스들의 PID를 추출
pid=$(ps aux | grep $JavaName | grep -v grep | awk '{print $2}')

  • ps aux 명령어로 모든 프로세스를 나열하고, grep $JavaName으로 해당 Java 프로세스 필터링
  • grep -v grep으로 grep 명령 자체를 제외하고, awk '{print $2}'로 PID 추출


# PID가 없을 경우 101 출력 후 종료
if [ -z "$pid" ]; then
    echo 101
    exit 0
fi


# gc 카운트를 출력
GC_COUNT=$("$JAVA_WHERE"/jstat -gcold "$pid" | tail -n 1 | awk '{print $8}')

  • jstat -gcold $pid 명령어로 지정된 PID의 GC 정보를 확인하고, tail -n 1으로 마지막 줄을 추출
  • awk '{print $8}'로 GC 카운트를 추출


if [ $GC_COUNT -gt $max_GC_COUNT ]
then
    max_GC_COUNT=$GC_COUNT
fi

done

echo $max_GC_COUNT

 


더보기

#!/bin/bash

source /home/shell/env.sh


#JAVA_WHERE="/usr/bin"
#JavaNames_gc=("대상 프로세스 이름")

max_GC_COUNT=0
for JavaName in "${JavaNames_gc[@]}"
do


# 검색되는 프로세스들의 PID를 추출
pid=$(ps aux | grep $JavaName | grep -v grep | awk '{print $2}')

# PID가 없을 경우 101 출력 후 종료
if [ -z "$pid" ]; then
    echo 101
    exit 0
fi


# gc 카운트를 출력
GC_COUNT=$("$JAVA_WHERE"/jstat -gcold "$pid" | tail -n 1 | awk '{print $8}')

if [ $GC_COUNT -gt $max_GC_COUNT ]
then
    max_GC_COUNT=$GC_COUNT
fi

done

echo $max_GC_COUNT

이 스크립트는 주어진 로그 경로에서 특정 패턴(예: "error" 또는 "exception")을 포함하는 가장 최근의 로그 파일을 찾아 그 안의 오류 수를 세는 작업을 수행합니다.

 


#!/bin/bash

source /home/shell/env.sh

# 로그 패스 별로 한 개씩 만든다

LOG_PATH_1="/tomcat/logs

  • 로그 파일이 위치한 경로를 변수로 저장

#체크할 로그를 배열로 입력
LOG_NAMES_1=("tomcat*")

  • 체크할 로그 파일 이름 패턴을 배열에 저장
  • 위 경우, "tomcat"으로 시작하는 모든 로그 파일입니다.

checkline_1=1000

  • 로그 파일의 마지막 1000줄만 검사하도록 설정

check_1="error|exception"

  • "error" 또는 "exception" 문자열을 포함한 로그를 검색할 패턴 정의

error_count=0

  • 오류의 총 개수를 저장할 변수 초기화


for LOG_NAME in "${LOG_NAMES_1[@]}"

  • 배열 LOG_NAMES_1의 각 요소에 대해 루프 시작


do

# 로그 경로에서 특정 문구를 포함한 로그 파일 중 가장 최근 것을 불러오는 스크립트
logfile=$(find $LOG_PATH_!1 -type f -name $LOG_NAME -prints '%T@ %p\n' | sort -n | tail -1 | awk '{print $2}')

  • find 명령어를 사용하여 LOG_PATH_1에서 LOG_NAME 패턴에 맞는 파일들을 찾습니다.
  • -type f는 파일만 검색하도록 설정
  • -name $LOG_NAME는 파일 이름 패턴 지정
  • -prints '%T@ %p\n'는 파일의 수정 시간을 포함한 출력 형식 지정
  • sort -n는 시간 순으로 정렬
  • tail -1은 가장 최신 파일을 선택
  • awk '{print $2}'는 파일 이름만 추출


# errors 수 표현
if [ -s "$logfile" ]; then

  • logfile이 비어 있지 않은지 확인

    errors=$(tail -$checkline_1 "$logfile" | grep -iE "$check_1" | wc -l)

  • tail -$checkline_1 "$logfile"는 로그 파일의 마지막 checkline_1줄을 가져옴
  • grep -iE "$check_1"는 대소문자 구분 없이 패턴에 맞는 줄 검색
  • wc -l는 매칭된 줄의 수를 셉니다.

    error_count=$(expr $error_count + $errors)

  • 현재 로그 파일에서 발견된 오류 수를 error_count에 더함

else
    echo 101
    exit 0
fi

done

echo $error_count


 

더보기

#!/bin/bash

source /home/shell/env.sh

# 로그 패스 별로 한 개씩 만든다

LOG_PATH_1="/tomcat/logs
#체크할 로그를 배열로 입력
LOG_NAMES_1=("tomcat*")
checkline_1=1000
check_1="error|exception"

error_count=0

for LOG_NAME in "${LOG_NAMES_1[@]}"
do

# 로그 경로에서 특정 문구를 포함한 로그 파일 중 가장 최근 것을 불러오는 스크립트
logfile=$(find $LOG_PATH_!1 -type f -name $LOG_NAME -prints '%T@ %p\n' | sort -n | tail -1 | awk '{print $2}')

# errors 수 표현
if [ -s "$logfile" ]; then
    errors=$(tail -$checkline_1 "$logfile" | grep -iE "$check_1" | wc -l)
    error_count=$(expr $error_count + $errors)
else
    echo 101
    exit 0
fi

done

echo $error_count

 

이번 작업은 디스크 사용량을 확인할 수 있는 스크립트입니다.

지정된 디스크 경로들의 사용률을 확인하고, 그중 최대 사용률을 출력합니다.

 


#!/bin/bash

source /home/shell/env.sh


# 배열 변수에 디스크 경로 저장
max_disk_usage=0

  • 최대 디스크 사용률을 저장할 변수 초기화


# disk_path가 없을 경우 101 출력 후 종료
if [ -z "$disk_paths" ]; then
   echo 101
   exit 0
fi

  • disk_paths 배열이 비어있는지 확인합니다.
  • 비어있다면 -z 조건이 참
  • disk_paths가 비어있을 경우, 101 출력


# 배열 순회하며 각 디스크의 사용률 확인
for disk_path in "${disk_paths[@]}"

  • disk_paths 배열의 각 요소에 대해 루프


do
   # df 명령어를 사용하여 디스크 사용률 확인
   disk_usage=$(df -h $disk_path | awk '{print $5}' | tail -n 1 | sed 's/%//')

  • df -h 명령어를 사용하여 disk_path의 디스크 사용률 확인
  • awk '{print $5}'는 사용률 컬럼 선택
  • tail -n 1은 마지막 줄 선택
  • sed 's/%//'는 퍼센트 기호 제거

   if [ "${disk_usage}" -ge "${max_disk_usage}" ]

  • 현재 디스크 사용률이 최대 사용률보다 크거나 같은지 확인

   then
      max_disk_usage=$disk_usage

  • 조건이 참이면, 최대 사용률을 현재 디스크 사용률로 업데이트

   fi
done

echo $max_disk_usage


 

더보기

#!/bin/bash

source /home/shell/env.sh


# 배열 변수에 디스크 경로 저장
max_disk_usage=0

# disk_path가 없을 경우 101 출력 후 종료
if [ -z "$disk_paths" ]; then
   echo 101
   exit 0
fi


# 배열 순회하며 각 디스크의 사용률 확인
for disk_path in "${disk_paths[@]}"
do
   # df 명령어를 사용하여 디스크 사용률 확인
   disk_usage=$(df -h $disk_path | awk '{print $5}' | tail -n 1 | sed 's/%//')

   if [ "${disk_usage}" -ge "${max_disk_usage}" ]
   then
      max_disk_usage=$disk_usage
   fi
done

echo $max_disk_usage

 

이번 작업은 CPU사용량에 대한 모니터링 스크립트를 만들어 보겠습니다.

 


# cpu.sh
#!/bin/bash

source /home/shell/env.sh

  •  /home/shell/env.sh 스크립트를 현재 스크립트에 포함
  • 따라서 env.sh 파일에 정의된 변수를 현재 스크립트에서 사용 가능

 

# 쓰레드를 모니터링하고자 하는 프로세스 패턴 문구
# env.sh에서 받아옴
# CpuProcessNames=("tomcat" "httpd" "java")

max_cpu_usage=0
for ProcessName in "${CpuProcessNames[@]}"
do

  • 최대 CPU 사용량을 저장할 변수를 초기화
  • CpuProcessNames 배열에 있는 각 프로세스에 대해 반복


# 검색되는 프로세스들의 PID를 추출
pids=$(ps aux | grep $ProcessName | grep -v grep | awk '{print $2}')

  • 각 프로세스의 PID를 찾음.
  • ps aux 명령으로 프로세스 목록을 가져와서 해당 패턴을 가진 프로세스를 찾고, awk를 사용하여 PID를 추출


# PID가 없을 경우 101 출력 후 종료
if [ -z "$pids" ]; then
   echo 101
   exit 0
fi

  • 만약 PID가 없으면(즉, 해당 프로세스가 실행 중이 아니면) 101을 출력하고 스크립트를 종료

 


# 각 PID의 CPU 사용량 중 최대값을 추출
for pid in $pids
do
cpu_usage=$(ps -p $pid -o %cpu | tail -n +2)

  • 각 PID에 대한 CPU 사용량을 찾음
  • ps 명령어로 CPU 사용량을 가져오고, awk를 사용하여 필요한 정보를 추출


cpu_usage=$(echo $cpu_usage | awk -F. '{print $1}')

  • CPU 사용량을 정수 형태로 변환


if [ "$cpu_usage -gt $max_cpu_usage" ]

  • 현재 CPU 사용량이 최대 CPU 사용량보다 큰지 확인


then
    max_cpu_usgae=$cpu_usage
fi
done

done


# 최대 CPU 사용량을 출력
echo "$max_cpu_usage"

 


 

더보기

#!/bin/bash

source /home/shell/env.sh

# 쓰레드를 모니터링하고자 하는 프로세스 패턴 문구
# env.sh에서 받아옴
# CpuProcessNames=("tomcat" "httpd" "java")

max_cpu_usage=0
for ProcessName in "${CpuProcessNames[@]}"
do

# 검색되는 프로세스들의 PID를 추출
pids=$(ps aux | grep $ProcessName | grep -v grep | awk '{print $2}')

# PID가 없을 경우 101 출력 후 종료
if [ -z "$pids" ]; then
   echo 101
   exit 0
fi

# 각 PID의 CPU 사용량 중 최대값을 추출
for pid in $pids
do
cpu_usage=$(ps -p $pid -o %cpu | tail -n +2)
cpu_usage=$(echo $cpu_usage | awk -F. '{print $1}')
if [ "$cpu_usage -gt $max_cpu_usage" ]
then
    max_cpu_usgae=$cpu_usage
fi
done

done

# 최대 CPU 사용량을 출력
echo "$max_cpu_usage"

'리눅스' 카테고리의 다른 글

모니터링 쉘 스크립트 만들기(4)  (0) 2024.05.23
모니터링 쉘 스크립트 만들기(3)  (0) 2024.05.22
모니터링 쉘 스크립트 만들기(1)  (1) 2024.05.20
nginx 업그레이드  (0) 2024.05.14
GC 로그 및 heap 덤프 설정  (0) 2024.05.13

먼저 env.sh 파일을 만들어 줍니다.

 

env.sh은 이후 만들 쉘 스크립트 파일의 기본 환경 설정을 담고 있는 스크립트입니다.

 


env.sh
#!/bin/bash

#Java  디렉토리 지정
JAVA_WHERE="/usr/bin"

  • JAVA_WHERE: Java가 설치된 디렉토리를 지정

#모니터링 스크립트가 존재하는 위치
MY_HOME="/home/shell"
MY_HOME_LOG="/home/shell/logs"

  • MY_HOME, MY_HOME_LOG: 모니터링 스크립트와 로그가 저장된 경로



# process 변수 (프로세스 그룹 단위로 한 개씩 생성)
# 각각 체크하고자 하는 프로세스 그룹 단위로 구분자 입력
ProcessName1="프로세스 이름"

  • ProcessName1: 모니터링할 프로세스 그룹의 이름


# disk 변수
# 체크할 각 디스크를 배열로 입력
disk_paths=( "/" "/tomcat" )
disk_limit=85

  • disk_paths: 모니터링할 디스크 경로의 배열
  • disk_limit: 디스크 사용량 제한(백분율)


# uptime 변수
# 체크할 프로세스를 배열로 입력
CpuProcessName=("java")
cpu_time_limit=31536000

  • CpuProcessName: CPU 가동 시간을 모니터링할 프로세스의 배열
  • cpu_time_limit: CPU 가동 시간제한(초)


# port 변수
# 체크할 프로세스를 배열로 입력
port_list=("80" "8080")

  • port_list: 모니터링할 포트의 배열


# exception 변수 (디렉토리 별로 한 개 씩 생성)
# 체크할 디렉토리
LOG_PATH_1="/tomcat/logs
#체크할 로그를 배열로 입력
LOG_NAMES_1=("tomcat*")
checkline_1=1000
check_1="exception"

  • LOG_PATH_1: 예외 로그가 저장된 디렉토리
  • LOG_NAMES_1: 예외를 확인할 로그 이름의 배열
  • checkline_1: 로그를 확인할 줄 번호
  • check_1: 예외를 확인할 패턴



# access 변수 (정상 체크 코드가 로그의 몇 번째 인지 수정할 필요가 있음)
# 체크할 디렉토리
LOG_PATH_a1="/tomcat"
# 체크할 로그를 배열로 입력
LOG_NAMES_a1=("access*")
checkline_a1=1000
# 로그에서 에러 코드가 검출될 컬럼의 위치
charNumber_a1=9
check_a1="401|402|403|404|405|501|502|503|504|505"

  • LOG_PATH_a1: 접근 로그가 저장된 디렉토리
  • LOG_NAMES_a1: 접근을 확인할 로그 이름의 배열
  • checkline_a1: 로그를 확인할 줄 번호
  • charNumber_a1: 로그에서 에러 코드의 위치
  • check_a1: 확인할 에러 코드


# fullgc, gcincrease, gc_cron, heap 변수
# 체크할 프로세스를 배열로 입력 (한 개만 특정될 수 있도록 지정)
JavaNames_gc=("tomcat8")

  • GC (Garbage Collection) 관련 프로세스를 체크하기 위해 사용
  • 이 변수에는 GC와 관련된 프로세스의 이름의 배열


# oome 변수
# 체크할 힙 덤프 경로를 배열로 입력
LOG_PATHS_OOME=("/tomcat/logs/gc")
DAYS=3

  • OOME (Out Of Memory Error) 에러를 체크하기 위한 변수
  • OOME이 발생한 경우 힙 덤프가 기록되는 경로를 지정
  • 힙 덤프 경로를 배열로 나타냅니다.
  • OOME 이후 힙 덤프를 유지하는 기간(3일)


# traffic, hang 변수
# 검출 트래픽 배수
# 초기값 : 10, 서비스 특성에 따라 조정
traffic=10
# Hang으로 판단할 로그 미생성 분
# 초기값 60, 서비스 특성에 따라 조정
HANG_TIME=60

  • 트래픽을 검출하는 데 사용되는 변수
  • 초기값은 10으로 설정되어 있으며, 서비스 특성에 따라 조정될 수 있습니다.
  • 로그가 생성되지 않은 상태로 유지되는 시간
  • 초기값은 60분으로 설정되어 있으며, 서비스 특성에 따라 조정될 수 있습니다.

 


# 로그 크기를 확인할 과가 기록 수(1분 단위)
GET_NUM=300

  • 로그 크기를 확인하기 위해 기록된 과거 데이터의 수



# log cron 변수 (로그 경로마다 한 개씩 만든다)
# "Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday" " Sunday"

GCCountStartTime=0
GCCountEndTime=24
GCCountDays=("Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday" " Sunday")

  • GC 이벤트를 세는 데 사용되는 시간대를 설정
  • 여기서는 0부터 24시까지로 설정
  • 이벤트는 매일 모니터링
  • GC 이벤트를 세는 요일을 지정


LogStartTime=6
LogEndTime=20
LogDays=("Monday" "Tuesday" "Wednesday" "Thursday" "Friday")

  • 로그를 확인하는 시간대를 설정
  • 로그를 확인하는 요일을 지정


LOG_PATH_LOG_1="/tomcat/logs"
LOG_NAMES_LOG_1=("tomcat*")

  • 로그 파일이 있는 디렉토리 경로를 지정
  • 체크할 로그 파일의 이름을 지정

 

더보기

env.sh
#!/bin/bash

#Java  디렉토리 지정
JAVA_WHERE="/usr/bin"
#모니터링 스크립트가 존재하는 위치
MY_HOME="/home/shell"
MY_HOME_LOG="/home/shell/logs"

# process 변수 (프로세스 그룹 단위로 한 개 씩 생성)
# 각각 체크하고자 하는 프로세스 그룹 단위로 구분자 입력
ProcessName1="프로세스 이름"



# disk 변수
# 체크할 각 디스크를 배열로 입력
disk_paths=( "/" "/tomcat" )
disk_limit=85


# uptime 변수
# 체크할 프로세스를 배열로 입력
CpuProcessName=("java")
cpu_time_limit=31536000


# port 변수
# 체크할 프로세스를 배열로 입력
port_list=("80" "8080")


# exception 변수 (디렉토리 별로 한 개 씩 생성)
# 체크할 디렉토리
LOG_PATH_1="/tomcat/logs
#체크할 로그를 배열로 입력
LOG_NAMES_1=("tomcat*")
checkline_1=1000
check_1="exception"



# access 변수 (정상 체크 코드가 로그의 몇 번째 인지 수정할 필요가 있음)
# 체크할 디렉토리
LOG_PATH_a1="/tomcat"
# 체크할 로그를 배열로 입력
LOG_NAMES_a1=("access*")
checkline_a1=1000
# 로그에서 에러 코드가 검출될 컬럼의 위치
charNumber_a1=9
check_a1="401|402|403|404|405|501|502|503|504|505"



# fullgc, gcincrease, gc_cron, heap 변수
# 체크할 프로세스를 배열로 입력 (한 개만 특정될 수 있도록 지정
JavaNames_gc=("tomcat8")


# oome 변수
# 체크할 힙 덤프 경로를 배열로 입력
LOG_PATHS_OOME=("/tomcat/logs/gc")
DAYS=3


# traffic, hang 변수
# 검출 트래픽 배수
# 초기값 : 10, 서비스 특성에 따라 조정
traffic=10
# Hang으로 판단할 로그 미생성 분
# 초기값 60, 서비스 특성에 따라 조정
HANG_TIME=60

# 로그 크기를 확인할 과가 기록 수(1분 단위)
GET_NUM=300


# log cron 변수 (로그 경로마다 한 개 씩 만든다)
# "Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday" " Sunday"

GCCountStartTime=0
GCCountEndTime=24
GCCountDays=("Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday" " Sunday")

LogStartTime=6
LogEndTime=20
LogDays=("Monday" "Tuesday" "Wednesday" "Thursday" "Friday")

LOG_PATH_LOG_1="/tomcat/logs"
LOG_NAMES_LOG_1=("tomcat*")

 

'리눅스' 카테고리의 다른 글

모니터링 쉘 스크립트 만들기(3)  (0) 2024.05.22
모니터링 쉘 스크립트 만들기(2)  (0) 2024.05.21
nginx 업그레이드  (0) 2024.05.14
GC 로그 및 heap 덤프 설정  (0) 2024.05.13
jstat 항목별 의미  (0) 2024.05.08

  • 초기 배포는 Blue 작업만 실행되고 100% 운영 트래픽을 사용

 

  • Green 작업이 시작되고 대상 그룹 2에 연결되어 있음.
  • ALB 테스트 트래픽 수신기가 포트 8443에서 테스트 트래픽을 위해 준비되었으며 테스트 트래픽이 전송됨.
  • Target Group 2를 사용하여 Green 작업에 연결
  • 테스트 리스너를 통해 테스트 트래픽이 준비되면 람다 함수(후크)를 추가 가능
  • 람다 함수는 ALB/테스트 수신기 포트 8443에서 일부 기능 테스트를 수행할 수 있으며, "성공" 또는 "실패"를 반환

 

  • 테스트 트래픽 람다 후크가 "성공"을 반환했다고 가정하면 프로덕션 트래픽은 Target Group 2로 라우팅되고 차례로 Green 작업에서 제공
  • ALB prod 리스너 포트 443과 테스트 리스너 포트 8443은 이제 모두 대상그룹 2를 바라본다.
  • CodeDeploy는 CodeDeploy 콘솔이나 CLI/API 호출을 통해 롤백이 가능하도록 사전 구성된 기간동안 Blue 작업을 유지

 

  • 사전 구성된 기간이 경과하면 CodeDeploy는 Bliue 작업을 종료하고 이 시점 이후에는 롤백이 불가능

In-Place

  • 배포 그룹의 각 인스턴스에 있는 애플리케이션이 중지되고 최신 애플리케이션 개정 버전이 설치되며 애플리케이션의 새 버전이 시작되고 유효성 검사
  • 로드 밸런스를 사용하면 배포가 진행될 때 각 인스턴스를 등록 취소한 후 배포가 완료된 후 복원할 수 있음.
  • EC2/온 프레미스 컴퓨팅 플랫폼을 사용하는 배포만 In-place 배포를 사용할 수 있음.

 

Blue/Grren

  • 다운타임 없이 또는 최소한의 위험으로 애플리케이션/소프트웨어의 새 버전을 배포하려는 배포 패턴
  • 유사한 스택을 가져온 다음 이 새 스택에 새 버전의 애플리케이션을 배포
  • 현재 스택(Blue 스택)에서 새 스택(Green 스택)으로 이동

특징

1. 다운 타임 없음.

- 트래픽을 Blue 스택에서 Green스택으로 이동하고 있음.

2. 손쉬운 롤백

- Green 스택이 정상이 아니면 역 프로세스를 따라 트래픽을 Blue 스택으로 다시 이동할 수 있음.

3. 위험 감소

- 프로덕션 라이브 트래픽을 마이그레이션하기 전에 기능 테스트를 실행하여 그린 스택을 검증 가능

 

+ Recent posts