Search
Duplicate

tracelogs 로테이션 시키기

문서번호 : 11-762740

Document Information

최초 작성일 : 2022.06.03
최종 수정일 : 2024.01.30
이 문서는 아래 버전을 기준으로 작성되었습니다.
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/MA/tracelogs/memsql.log /var/lib/memsql/MA/tracelogs/query.log /var/lib/memsql/CA/tracelogs/memsql.log /var/lib/memsql/CA/tracelogs/query.log /var/lib/memsql/LF1/tracelogs/memsql.log /var/lib/memsql/LF1/tracelogs/query.log /var/lib/memsql/LF2/tracelogs/memsql.log /var/lib/memsql/LF2/tracelogs/query.log { daily rotate 7 missingok compress sharedscripts postrotate # Send SIGHUP to both memsqld processes killall -q -s1 memsqld endscript }
Bash
복사
파일의 첫 줄 log 경로는 로테이션 대상 log 파일의 경로 나열
daily : 매일 로테이션 시킴
rotate : 보관할 log 파일 수
missingok : 파일이 없더라도 에러 처리 없이 건너뜀
compress : gzip 로 압축
기타 옵션 참조 : Link

References

History

일자
작성자
비고
2022.06.03
kkh
2024.01.30
mk.Kang
Built-in 기능 추가