문서번호 : 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_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/*/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/ore-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 관련 설정 추가 |