쓰기도 애매하지만, VM (linux) 에서 GCS로 자동으로 로그 파일을 업로드하고, VM에 있는 기존 파일은 제거하는 요구사항이 생겨서 진행
목적 : Instance 에서 지속적으로 파일이 대량 생성되고 있어, 이것을 GCS로 저장하는 방안 중 하나
조건은 각 instance를 구분하기 위해 GCS상에 호스트명별로 디렉토리가 생성되며, GCS에 업로드 되고 난 뒤 최신의 파일을 제외하고서는 기존 instance내 파일은 삭제처리
GCS로 보내는거라 고민을 했는데, 다행인지 gcloud 명령어에 storage rsync가 있어 진행했다.
아.. 물론 엔딩은 rsync가 아닌 데몬으로 보내야한다고 해서 결국 Fluent Bit로 전환
- GCS에 호스트명대로 저장하고, gcp rsync로 저장한 뒤 10개의 파일만 남기고 삭제하는 스크립트
#!/bin/bash
# 환경설정
# 호스트명
HOSTNAME=$(hostname)
# gcs에서 호스트명대로 디렉토리 생성
GCS_PATH="gs://gcp-storage명/$HOSTNAME"
# 백업 디렉토리 설정
BACKUP_DIR="/home/result_os-performance"
# 남겨둘 파일 수
MAX_FILES=10
# gcloud rsync로 백업 수행
gcloud storage rsync "$BACKUP_DIR" "$GCS_PATH" --recursive
# 백업 디렉토리로 이동
cd "$BACKUP_DIR" || exit
# 각 디렉토리를 대상으로 반복
for dir in "$BACKUP_DIR"/*/; do
# 디렉토리 내 파일 목록을 최신 수정 시간 순으로 정렬하여 배열로 저장
files=$(ls -t "$dir")
# 최신 파일을 제외하고 삭제
i=0
for file in $files; do
if [ $i -ge $MAX_FILES ]; then
rm -f "${dir}${file}"
fi
i=$((i+1))
done
done
- 위의 스크립트는 압축을 안하기 때문에, 파일이 많으면 색인도 그렇고 어려워서
log파일들을 압축하고, GCS로 전송 후 삭제하는 스크립트도 작성하였다.
#!/bin/bash
#환경설정
HOSTNAME=$(hostname)
# gcs에서 호스트명대로 디렉토리 생성
GCS_PATH="gs://gcp-storage명/$HOSTNAME"
# 백업 디렉토리 설정
BACKUP_DIR="/home/result_os-performance"
# 삭제할 파일 수
MAX_FILES=5
# 압축할 파일 수
COMPRESS_LIMIT=5
# 압축 파일 이름
ARCHIVE_NAME="backup_$(date +%Y-%m-%d_%H-%M-%S).tar.gz"
# 압축 파일 디렉토리
ARCHIVE_DIR="/tmp"
# 백업 디렉토리로 이동
cd "$BACKUP_DIR" || exit
#스크립트 동작
for dir in */; do
# 디렉토리 내 파일 갯수를 세어 COMPRESS_LIMIT와 비교하여 처리
file_count=$(find "$dir" -maxdepth 1 -type f | wc -l)
# 파일 갯수가 COMPRESS_LIMIT를 초과하면 압축하여 전송
if [ "$file_count" -gt "$COMPRESS_LIMIT" ]; then
# 압축 파일 생성
tar -czf "${ARCHIVE_DIR}/${ARCHIVE_NAME}.gz" "$dir"
# 압축된 파일을 GCS로 전송
gcloud storage rsync "${ARCHIVE_DIR}" "${GCS_PATH}"
# 압축된 파일 삭제
rm -f "${ARCHIVE_DIR}/${ARCHIVE_NAME}"
# 압축 후 디렉토리 비우기
rm -rf "$dir"/*
fi
done
GCP gcloud 명령어 중 rsync는 아래 링크를 참조하였다.
- gcloud storage rsync
https://cloud.google.com/sdk/gcloud/reference/storage/rsync
'Cloud > GCP' 카테고리의 다른 글
Front Proxy (Squid)를 사용하여, 내부보안 향상하기 (0) | 2024.03.25 |
---|---|
[GCP] 2단계(MFA) 인증을 조직 단위로 설정하기 (0) | 2024.03.25 |
무료 도메인으로 Google Cloud 다양하게 테스트하기 (0) | 2024.03.21 |
[GCP/OS] 단일 instance에서 다중 Network interface 설정 (0) | 2024.01.28 |
GCP에서 3-Tire 구성 - Part.2 (0) | 2024.01.16 |
[GCP] SSL - Load balancing 인증서 발급과 테스트 방안 (0) | 2024.01.15 |
[GCP] On-Premise to GCP VPN구성 (0) | 2024.01.15 |