Search
Duplicate

tracelogs 로테이션 시키기

문서번호 : 11-762740

Document Information

최초 작성일 : 2022.06.03
최종 수정일 : 2024.06.10
이 문서는 아래 버전을 기준으로 작성되었습니다.
SinglestoreDB : 7.8

Goal

SingleStoreDB 의 tracelog를 로테이션 시키는 방법을 알아본다.

Solution

SingleStoreDB 의 tracelog 는 아래의 3가지 방법 중 하나를 사용하여 로테이트 할 수 있다.
엔진 변수를 사용하여 log 로테이션을 설정한다.
SingleStoreDB 의 데몬(엔진 프로세스, memsqld)에 SIGHUP 시그널을 전달하여 로테이트 한다.
logrotate 데몬을 사용하여 로테이트 한다.

1. Built-in 기능 (v8.1.25 ~)

SingleStoreDB 의 엔진 변수를 세팅하여 log 로테이션을 설정한다. 변수 tracelog_rotation_size 와 tracelog_rotation_timesdb-admin update-config 명령을 통해서만 설정 할 수 있으며, 전체 노드에 대해 재기동이 필요하다. tracelog_retention_period는 재기동 없이 runtime 중에도 설정이 가능하다.

tracelog rotation 설정 엔진 변수

Setting Name
default
desc.
tracelog_rotation_size
0
log 파일의 사이즈를 설정, 파일 사이즈가 설정한 임계값에 도달하면 tracel log 를 로테이션 시킴
tracelog_rotation_time
0
로테이트가 동작하는 시간(단위: second) 을 설정, 마지막 로테이트 시점 이후 설정한 임계값에 도달하면 tracelog 를 로테이션 시킴 (임계값 도달 후 log 가 적재되는 시점에 로테이트 발생)
tracelog_retention_period
0
tracelog 파일을 보관하는 기간(단위: day)을 지정
보관 기간 경과된 memsql.log 파일의 삭제 보관 기간이 경과된 파일 삭제는 log 로테이트가 발생할 때 동작한다. tracelog_rotation_time에 도달했으나 새로운 log 가 쌓이지 않아서 log 로테이트가 발생하지 않았을 때 또는 tracelog_retention_period 만 설정되어 있을 때는 보관 기간이 경과된 파일이 삭제되지 않는다. 또한 삭제되는 파일의 대상은 다음과 같은 규칙에 부합해야 한다. 1) log 로테이트 에 의해 생성된 파일 2) 파일의 등록 일시가 보관 기간을 경과 3) 파일명을 임의로 변경하지 않은 파일

2. SIGHUP 시그널 전달

log 파일을 move 시킨 후, reopen 한다.
CASE 1 : 하나의 호스트에 하나의 노드만 있을 때
$ cd <node-base-install-dir>/tracelogs $ mv memsql.log memsql.<년월일시분초> $ killall -q -s1 memsqld # 또는 kill -HUP <해당노드 memsqld의 PID>
SQL
복사
CASE 2 : 하나의 호스트에 여러 노드가 있을 때
만약, 다음의 경우라면, 위의 CASE 1 방법으로 모든 데몬에 시그널을 보내도 된다. 1) 대상 노드외의 log 파일에 move, delete 와 이에 준하는 작업이 진행 중이지 않을 때 2) 모든 노드의 log 파일에 대해 move, delete 를 완료하고, 일괄 처리하고자 할 때
반드시, 원하는 노드의 memsqld 에만 시그널을 보내지 않아도 된다. 하지만, 가능하면 선별하여 보내도록 한다.
# 노드구분 문자열 "LF1" 일때 # memsql.cnf 파일이 있는 base install 디렉토리 경로중 일부 $ ps -ef | grep memsql | grep -w memsqld | grep LF1 memsql 2327312 2327304 18 6월02 ? 05:14:50 /opt/singlestoredb-server-7.8.1-f81d4b03e1/memsqld --defaults-file /var/lib/memsql/LF1/memsql.cnf --user 977 memsql 2327321 2327312 0 6월02 ? 00:00:00 /opt/singlestoredb-server-7.8.1-f81d4b03e1/memsqld --defaults-file /var/lib/memsql/LF1/memsql.cnf --user 977 $ sudo kill -HUP 2327312 2327321 # 소유자(memsql) 또는 root의 권한 필요
Bash
복사

3. logrotate 사용

아래 다뤄진 것 보다 상세한 내용은 [References] 단원을 참고한다.
다음은 CentOS 7.9 에서의 예시 이다.
logrotate 패키지 설치
$ sudo yum install logrotate
Bash
복사
logrotate 에 singlestore 설정 등록
$ sudo vi /etc/logrotate.d/singlestore /var/lib/memsql/*/tracelogs/memsql.log /var/lib/memsql/*/tracelogs/query.log /var/lib/memsql/*/tracelogs/command.log { daily rotate 7 maxage 7 dateext compress create missingok sharedscripts postrotate # Send SIGHUP to both memsqld processes killall -q -s1 memsqld endscript }
Bash
복사
파일의 첫 줄 log 경로는 로테이션 대상 log 파일의 경로 나열 (와일드카드 사용 가능)
daily : 매일 로테이션 시킴 (daily, weekly, monthly, yearly 가능)
rotate : 보관할 log 파일 수
maxage : log 파일을 보관하는 일수
dateext : 로테이션된 로그 파일 이름에 날짜를 추가 (기존 파일명 + “-YYYYMMDD)
compress : gzip 압축
create : 로그를 로테이션 시키고, 기존 파일을 새롭게 생성함
missingok : 파일이 없더라도 에러 처리 없이 건너뜀
sharedscripts : 로테이션된 로그 파일마다 postrotate 스크립트를 실행하지 않고, 한번만 실행함
postrotate/endscript: 로테이션 후 실행할 명령어들
기타 옵션 참조 : Link
유의 사항
로테이트 실행 시각 딜레이 발생
/etc/logrotate.d 디렉토리에 등록시 anacron의 동작 기본 설정에 따라 파일 로테이션 시각은 03~22시 사이 00~45분 경에 실행됨
정확한 동작 시각/주기가 필요한 경우 crontab에 직접 등록 필요
-s 옵션 : crontab 실행 유저가 쓰기 가능한 status 파일 경로 지정
-f 옵션 : 강제 로테이션 시킴
>> (리다이렉션) 와 2>&1 (채널변경) : 필요시 실행 로그를 위해 추가
예시 (00시 동작)
0 0 * * * /usr/sbin/logrotate -s /home/sdb/singlestore/singlestore_logrotate.status /home/sdb/singlestore/singlestore_logrotate -f >> /home/sdb/singlestore/singlestore_logrotate.log 2>&1
Bash
복사
(별첨) studio 로그 로테이션 설정 예시
copytruncate 옵션을 사용
studio는 로그파일을 재기동하기 전까지는 닫지 않고 계속 쓰기만 함
그러므로, 이전 로그파일의 복사본을 만든 후 원본 로그 파일을 자름
유의) 파일을 복사하고 자르는 사이에는 아주 작은 시간 간격이 있으므로 일부 로깅 데이터가 손실될 수 있음
/home/sdb/singlestore/singlestoredb-studio-4.0.13-f437ccb117/studio.log { daily rotate 7 maxage 7 dateext compress missingok sharedscripts copytruncate }
Bash
복사

References

History

일자
작성자
비고
2022.06.03
kkh
2024.01.30
mk.Kang
Built-in 기능 추가
2024.06.10
kkh
logrotate 사용 관련 설정 및 유의사항 추가; studio 관련 설정 추가