문서번호 : 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_time는 sdb-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 기능 추가 |