Information Security Study

240228 컨테이너별로 로그 수집 디렉토리 분리하기, 로그로테이트 본문

네트워크 캠퍼스/1차 프로젝트

240228 컨테이너별로 로그 수집 디렉토리 분리하기, 로그로테이트

gayeon_ 2024. 2. 28. 22:19

 

https://gayeon-l.tistory.com/337

 

240227 각 컨테이너의 메모리 상태, cpu 사용량을 로그 수집 서버로 전송하기

worker1 부터 #!/bin/bash # 현재 시간을 포맷팅하여 파일 이름에 사용 CURRENT_TIME=$(date +"%Y%m%d_%H%M%S") # 로그 파일 이름에 현재 시간과 송신 서버 이름을 포함 LOG_FILE="${CURRENT_TIME}_system_usage_${HOSTNAME}.log" #

gayeon-l.tistory.com

 

 

컨테이너별로 로그 수집 디렉토리 분리하기

 

 

어떤 컨테이너에서 보낸 로그인지 구별하기 쉽게

컨테이너별로 디렉토리를 생성해서 각 디렉토리에 한 컨테이너의 로그만 저장되도록 수정했다.

 

 

 

로그로테이트

 

 

로그로테이트를 하기 위해 logrotate를 설치했다.

 

 

 

설치가 되면 logrotate 설정 파일을 /etc/logrotate.d/ 디렉토리에 생성했다.

worker1의 로그 파일을 관리할 것이기 때문에 설정 파일 이름은 worker1로 했다.

 

 

주어진 디렉터리 내의 로그 파일을 매일 회전시키고 이전 로그 파일을 7개까지 유지할 것이다.

회전된 로그 파일은 날짜가 포함된 확장자가 붙어서 보관된다.

 

/home/storage/log/worker1/*.log {
	su storage storage
    rotate 7
    daily
    compress
    delaycompress
    missingok
    notifempty
    create 644 storage storage
    dateext
    dateformat -%Y%m%d_%H%M%S
}

 



- `su storage storage`: 로그 파일을 회전할 때 사용할 사용자와 그룹을 storage로 지정한다.


- `rotate 7`: 7개의 로그 파일을 유지한다.


- `daily`: 매일 로그를 회전한다.


- `compress`: 로그 파일을 압축한다.


- `delaycompress`: 압축을 지연시킨다.


- `missingok`: 해당 파일이 없어도 에러를 출력하지 않는다.


- `notifempty`: 파일이 비어있는 경우에만 회전한다.


- `create 644 storage storage`: 새로운 로그 파일을 생성할 때의 권한 및 소유자를 지정한다.


- `dateext`: 회전된 로그 파일에 날짜 확장자를 추가한다.


- `dateformat -%Y%m%d_%H%M%S`: 날짜 형식을 지정하여 날짜를 로그 파일 이름에 추가한다.

 

 

 

 

그리고나서 storage 계정에 들어가 크론탭에서

송신 서버에게 받은 로그 파일(2024로 시작하는 파일)의 내용을 cat으로 읽어 로그 수신 서버에 logrotate.log 파일에 추가한다.

 

find 명령어로 2024로 시작하는 파일을 찾고

exec 옵션으로 찾은 각파일에 대해 지정된 명령(cat)을 수행한다.

{}은 찾은 파일을 나타낸다.

\;은 exec 옵션의 끝을 의미한다.

 

매분마다 2024로 시작하는 파일의 내용을 logrotate.log에 붙여넣는다면 중복될 것이기 때문에 >>이 아닌 덮어쓰는 기호인 >를 사용해야 한다.

 

 

 

다시 root로 빠져나와 위 명령어로 로그로테이트를 수행하고 

 

 

 

storage 계정에 들어와 worker1 디렉토리를 확인하면 logrotate.log가 생긴 것을 볼 수 있다.

 

 

 

cat logrotate.log로 cpu와 memory의 사용량을 볼 수 있다.

 

 

그런데 날짜와 시간이 없어 언제의 사용량인지 구분하기 힘들다.

 

 

송신 서버인 worker1에서 log_script.sh를 수정했다.

기존 코드에서 echo "Time: $CURRENT_TIME" >> "$LOG_FILE" 만 추가해서

cpu, 메모리 사용량이 출력되기 전에 날짜와 시간이 출력되도록 했다.

 

 

 

성공!