k8s(eks) deployment 상태 확인 스크립트
2024. 11. 19. 08:42ㆍ기타/scripts
728x90
SMALL
- 개요
k8s(eks) deployment 상태 확인 스크립트
- 세부기능
k8s(eks) context list, switch
namespace list
awslogs group list
결과를 파일로 저장
- 스크립트
#!/usr/bin/env bash
# 사용법 함수
usage() {
echo "에러: 입력값이 잘못 됐습니다."
echo "사용법: $0 [로그스트림이름]"
echo "로그스트림이름은 선택사항입니다."
exit 1
}
# 로그 그룹 선택 함수
select_log_group() {
echo "사용 가능한 로그 그룹 목록:"
groups=($(awslogs groups))
if [ ${#groups[@]} -eq 0 ]; then
echo "사용 가능한 로그 그룹이 없습니다."
exit 1
fi
echo "로그 그룹을 선택하세요:"
select LOG_GROUP in "${groups[@]}"; do
if [ -n "$LOG_GROUP" ]; then
break
else
echo "올바른 번호를 선택하세요."
fi
done
echo "선택된 로그 그룹: $LOG_GROUP"
}
# 시간 입력 함수
input_time() {
while true; do
echo "시간을 입력하세요 (형식: YYYY-MM-DD HH:MM:SS):"
read TARGET_TIME
# 형식 검사
if ! [[ "$TARGET_TIME" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}[[:space:]][0-9]{2}:[0-9]{2}:[0-9]{2}$ ]]; then
echo "올바른 시간 형식이 아닙니다."
continue
fi
# 현재 시간과 비교
current_ts=$(date +%s)
if [ "$(uname)" = "Darwin" ]; then
input_ts=$(date -j -f "%Y-%m-%d %H:%M:%S" "$TARGET_TIME" "+%s" 2>/dev/null)
else
input_ts=$(date -d "$TARGET_TIME" "+%s" 2>/dev/null)
fi
# 날짜 변환 실패 확인
if [ $? -ne 0 ]; then
echo "유효하지 않은 날짜입니다."
continue
fi
# 미래 날짜 확인
if [ "$input_ts" -gt "$current_ts" ]; then
echo "미래 날짜는 입력할 수 없습니다."
continue
fi
break
done
}
# 시간 범위 입력 함수
input_time_range() {
while true; do
echo "조회할 시간 범위를 입력하세요 (분 단위, 기본값: 5):"
read TIME_RANGE
if [ -z "$TIME_RANGE" ]; then
TIME_RANGE=5
break
elif [[ "$TIME_RANGE" =~ ^[0-9]+$ ]]; then
break
else
echo "올바른 숫자를 입력해주세요."
fi
done
}
# grep 패턴 입력 함수 추가
input_grep_pattern() {
echo "필터링할 패턴을 입력하세요 (선택사항):"
read GREP_PATTERN
}
# 파일 저장 옵션 입력 함수
ask_save_to_file() {
while true; do
echo "파일로 저장하시겠습니까? (y/n):"
read SAVE_TO_FILE
case $SAVE_TO_FILE in
[Yy]* )
# 로그 그룹명의 '/' 를 '-' 로 변경하고 앞뒤 '-' 제거
SAFE_LOG_GROUP=$(echo "$LOG_GROUP" | tr '/' '-' | sed 's/^-//;s/-$//')
OUTPUT_FILE="${SAFE_LOG_GROUP}-$(date +%Y-%m-%d_%H-%M-%S).log"
echo "$OUTPUT_FILE"
return 0
;;
[Nn]* ) return 1;;
* ) echo "y 또는 n을 입력해주세요.";;
esac
done
}
# 메인 로직 시작
LOG_STREAM=$1
# 로그 그룹 선택
select_log_group
# 시간 입력
input_time
# 시간 범위 입력
input_time_range
# 시간 범위를 초 단위로 변환
SECONDS_RANGE=$((TIME_RANGE * 60))
# OS 확인 및 시간 계산
if [ "$(uname)" = "Darwin" ]; then
# macOS
center_ts=$(date -j -f "%Y-%m-%d %H:%M:%S" "$TARGET_TIME" "+%s" 2>/dev/null)
start_time=$(date -j -f "%s" $((center_ts - SECONDS_RANGE/2)) "+%Y-%m-%d %H:%M:%S")
end_time=$(date -j -f "%s" $((center_ts + SECONDS_RANGE/2)) "+%Y-%m-%d %H:%M:%S")
else
# Linux
center_ts=$(date -d "$TARGET_TIME" "+%s" 2>/dev/null)
start_time=$(date -d "@$((center_ts - SECONDS_RANGE/2))" "+%Y-%m-%d %H:%M:%S")
end_time=$(date -d "@$((center_ts + SECONDS_RANGE/2))" "+%Y-%m-%d %H:%M:%S")
fi
echo "조회 시간 범위: $start_time ~ $end_time (총 ${TIME_RANGE}분)"
# grep 패턴 입력
input_grep_pattern
# 파일 저장 옵션 입력
ask_save_to_file
SAVE_OPTION=$?
# awslogs 명령어 실행
execute_logs() {
if [ -n "$LOG_STREAM" ]; then
# 로그스트림이 지정된 경우
if [ -n "$GREP_PATTERN" ]; then
awslogs get "$LOG_GROUP" \
--start="$start_time" \
--end="$end_time" \
--timestamp \
--log-stream-name="$LOG_STREAM" | grep -i --color=auto "$GREP_PATTERN"
else
awslogs get "$LOG_GROUP" \
--start="$start_time" \
--end="$end_time" \
--timestamp \
--log-stream-name="$LOG_STREAM"
fi
else
# 로그스트림이 지정되지 않은 경우
if [ -n "$GREP_PATTERN" ]; then
awslogs get "$LOG_GROUP" \
--start="$start_time" \
--end="$end_time" \
--timestamp | grep -i --color=auto "$GREP_PATTERN"
else
awslogs get "$LOG_GROUP" \
--start="$start_time" \
--end="$end_time" \
--timestamp
fi
fi
}
if [ $SAVE_OPTION -eq 0 ]; then
# 파일로 저장
execute_logs > "$OUTPUT_FILE"
else
# 화면에 출력
execute_logs
fi
728x90
LIST
'기타 > scripts' 카테고리의 다른 글
awslogs를 이용해서 cloudwatch logs를 시간대 별로 쿼리하는 방법 (0) | 2024.11.14 |
---|---|
ECR lifecycle policy 전체 repository 적용 (0) | 2023.06.28 |
ip address location 확인하는 방법 (0) | 2023.06.09 |
tg_attr_deg_delay.sh (0) | 2022.12.07 |
elb_attr_delete_protection.sh (0) | 2022.12.07 |