일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- Container
- Shift + ESC
- 넷크래프트
- recon-ng
- 계정 탈취
- Mac
- SecurityMetric
- Chrome 작업관리자
- cgroups
- 무선채널
- 프로젝트
- dnsenum
- 보안
- AttackGraph
- Social Network in Game
- 액티브스캐닝
- 공격그래프
- NMAP
- ip forwarding
- OpenID Connect
- 화이트해커
- davtest
- 패시브스캐닝
- decap
- 강의
- OIDC
- airdecap-ng
- 대학원
- Mimikatz
- Kublet
- Today
- Total
네른
[logrotate] 로그 로테이션 본문
로그 로테이션. 말 그대로 로그를 회전시키는 것.
로그 파일의 크기가 너무 커지는 것을 방지하기 위해, 로그 파일을 분산/갱신 하는 과정을 의미한다.
Spring과같은 다양한 애플리케이션들은 기본적으로 로그 로테이션 방법을 내부적으로 지니고 있다.
그런데 만약 없다면?? 예를들어 database들
그런 것들을 위해 사용되는거이 리눅스의 기본 패키지 중 하나인 logrotate이다.
logrotate는 cron을 기반으로 돌아간다고 생각하면 되는데, 당연하게도 주기적으로 로그를 갱신해야되므로 필요하다.
간단하게 구조를 보면
cron의 동작을 기술하는 부분 중, cron.daily 폴더 내부를 보면 logrotate파일이 있는 것을 볼 수 있다.
그리고, 해당 파일의 내부에는 /etc/logrotate.d 폴더 내의 파일들을 사용하라고 되어있다.
그래서! 그 폴더에 가보면, 기본적으로 nginx 와 관련된 디폴트 파일이 있다.
여기에 별도의 파일들을 생성해서 기록해두면 logrotate가 해당 파일의 설정값을 읽어 cron과 함께 동작하게 되는 것.
간단하게 사용했던 내용을 확인해보면 다음과 같다.
/var/tmp/test/*.log {
su root root # 로테이션 작업을 수행할 사용자를 지정
daily # 작업의 주기 지정
missingok # 로그파일이 없다면 생성
rotate 52 # 최대 저장할 파일의 수
compress # 지난 로그들은 gzip으로 압축
delaycompress # 로그를 우선 저장하고, 이후에 압축. 압축중에 파일이 추가되는것을 방지하기 위함.
notifempty # 로그파일이 비어있다면 로테이션하지 않음
create 644 root root # 새 로그파일을 만들 때의 소유자 정보
sharedscripts # 대상이 되는 로그파일이 여러개라도, 스크립트는 단 한번만 실행
postrotate # 로테이션 이후 실행할 스크립트의 내용
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}
위 파일은 nginx 파일을 대체한 부분인데 관련 내용은 주석을 보면 된다.
한 가지 별도로 설명할건 postrotate 스크립트의 내용인데,
nginx가 기존에 아카이브된 로그파일에 계속 이어서 로그를 쓰려하는 성격이 있어서 nginx한테 그거 그만쓰고 새 로그에 기록하도록 재시작 시키는 것.
/경로/mariadb.log /경로/mariadb.err{
su mysql mysql
create 644 mysql mysql
notifempty
daily
rotate 20
missingok
compress
delaycompress
postrotate
if test -n "`ps acx|grep mysqld`"; then
/usr/bin/mysqladmin flush-logs -u root -p$MYSQL_ROOT_PASSWORD
fi
endscript
}
mariadb에 대해서 사용할때는 이런식으로 사용하면 된다.
다른점이라면 로그 소유주나 생성자 등등을 mysql로 해서 권한문제가 없게 하는 것과 postrotate에서 마찬가지로 새 로그에 기록하도록 하는 부분.
'DevOps' 카테고리의 다른 글
[Kubernetes] Security Context (0) | 2022.05.13 |
---|---|
[Kubernetes] Service Account & Role (0) | 2022.05.13 |
[ElasticSearch] 번외 - ILM 적용 (0) | 2022.05.11 |
[Kubernetes] EFK 적용 과정 (Elasticsearch, Fluentd, Kibana) - 2 (0) | 2022.05.11 |
[Kubernetes] EFK 적용 과정 (Elasticsearch, Fluentd, Kibana) - 1 (0) | 2022.05.10 |