목표
중앙 집중식 로그 서버를 구축하여, 통계를 만들어낸다.
전체 로깅 시스템
일일 단위 로깅
실제로 각각의 서버에서 임시로 저장되는 로그 파일 (7~30d적절하다고 생각)
디버깅 시 해당 파일을 이용하여 사용
파일 경로는 다음과 같은 형식
tail -F /var/log/nginx/access/daily/20240513/example.com.log
5분 단위 로깅
해당 로그 파일은 중앙 집중식 로그 서버 구축하여 전달하기 위한 파일
tail -F /var/log/nginx/access/5m/1.1.1.1_20240513-1425A_example.com.log
crontab 을 이용해서 5분마다 파일이 전달되도록 설정
*/5 * * * * * /opt/gzip_and_send_log_to_server.sh 2.2.2.2
해당 실행 파일은 다음과 같은 순서를 가진다.
- 약 3초 정도의 sleep (로그 파일이 안정적으로 쓰기를 종료)
- 5m 폴더의 로그 파일 메타데이터를 API로 전달 (서버로 전달될 로그 파일의 갯수 및 해시)
- gzip으로 압축 (네트워크 비용 감소)
- FTP 등을 이용해서 로그파일 업로드
로깅 시스템 에러 발생 시 복구
중앙 서버에서 FTP 트리거를 이용하여 gzip 파일을 받아서 ungzip 이후 메타데이터와 비교 (정상적으로 전달이 됐는지 확인)
5분 뒤 API를 이용해서 받은 로그파일 갯수와 FTP로 전송받은 로그 파일 갯수 확인
파일 갯수가 다르면 알림 발생
분석 솔루션 시작 (5분 이내로 분석이 완료되도록 스케일 아웃 필요)