Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- hive
- ci/cd
- 계정 관리
- nginx
- aws ec2
- DAG
- redis
- Django
- 오블완
- soft delete
- Locust
- node exporter
- slack
- prometheus
- 티스토리챌린지
- docker
- Next.js
- logstash
- hard delete
- unique constraint
- 물리삭제
- NoSQL
- 로그 백업
- elasticsearch
- Hadoop
- Airflow
- grafana
- AWS
- JWT
- 논리삭제
Archives
- Today
- Total
먹수의 개발일지
[Crontab] log backup to S3 본문
Intro
서버에 남겨지는 로그 파일들을 주기적인 배치작업으로 S3에 백업하고자 했다. 간단하게 linux 환경에서 사용할 수 있는 crontab을 사용했다. 로그 작성할때마다 S3에 보내는것 보다는, 서버에 바로 로그를 남기고 몇일에 한번씩 해당 파일들을 백업해서 옮기는 것이 운영서버에 성능 부하를 덜 발생시킬 것이라고 생각했다.
서버 환경
- AWS amazon linux2 EC2
우선 수동으로 python으로 작성한 backupLog 파일을 실행해본다.
sudo python /home/path/backupLog_to_s3.py
백업 파일은 직접 구현한, S3 API를 사용하여 파일을 저장하는 StorageS3 모듈을 사용한다.
# -*- coding: utf-8 -*-
from core.s3 import StorageS3
import os
def backup_logs_to_s3():
"""서버 로컬 log AWS S3에 백업
"""
logs_directory = "logs/"
# logs 폴더의 파일들을 순회
for file_name in os.listdir(logs_directory):
# 로그 파일 이름이 'service.log.날짜' 형식인지 확인
if file_name.startswith("service.log."):
file_path = os.path.join(logs_directory, file_name)
# 파일이 실제 파일인지 확인
if os.path.isfile(file_path):
# S3로 파일 업로드
with open(file_path, 'rb') as file:
s3 = StorageS3(media_root="logs/")
file_name += '.txt' #txt 확장자 추가
file_path = s3.upload(file, f"{file_name}")
파일이 정상적으로 잘 실행된다면, cron 파일 생성 및 작성한다.
#파일 편집하기
sudo vi /etc/crontab
cron 스케줄링 주기 설정에 맞게 작성한다.
sh 파일 실행하고 backup_log_output.log에 cron 실행 로그를 남기는 예시이다.
#매주 일요일 새벽 4시에 실행
0 4 * * 0 root sh /home/path/backup_log.sh >> /home/path/backup_log_output.log 2>&1
cron 예시
30 10,22 * * * /home/user/test.sh
- 매일 오전 10시 30분, 오후 10시 30분에 /home/user/test.sh 를 수행.
*/10 * * * * /home/user/test.sh
- 10분 마다 /home/user/test.sh 를 수행.
##0 8 * * 1-5 /home/user/test.sh
- 평일(월~금요일) 8:00 시에 /home/user/test.sh 를 수행.
마지막으로, cron 파일을 수정 후에 cron 서비스를 재시작 합니다.
sudo systemctl restart crond
'back-end > Monitoring' 카테고리의 다른 글
로그 파일 Logstash + ElasticSearch와 연동 (Docker) (0) | 2024.11.18 |
---|---|
[tcpdump] 네트워크 패킷 캡쳐하기 (0) | 2024.11.13 |
Docker Kafka 토픽 생성, 메시지 Producer 및 Consumer (0) | 2024.11.11 |
Django Prometheus + Grafana + Node exporter (0) | 2024.11.08 |
Comments