MongoDB 로그 수집 및 분석하기
1. MongoDB 로그 수집/분석
* MongoDB 모니터링 전략
1. DB활동을 실시간 리포팅하는 유틸리티 활용
2. DB명령 활용(현재 DB상태에 대한 통계확인가능)
3. MMS 모니터링 서비스(MMS Monitoring Service) 활용
: 데이터에 대한 시각화 및 경고등을 제공하는 무료 서비스
* MongoStat
: MongoDB가 동작하는 내부 상황에 대한 정보를 확인하는 툴
: CRUD와 메모리 상태 등의 정보를 확인
: 1초에 한번씩 mongod, mongos 성능을 측정
: 커맨드 라인에서 mongostat이라고 입력
: rowcount를 통해 row 수 지정 가능
> mongostat -rowcount 50
* MongoStat 명령어
- 레이블 (*)중요표시
: inserts, query, update, delete : 초당 해당 작업 수
: getmore : 초당 발생 작업 수
: command : Slave를 포함하여 초당 실행되는 명령어 수
: flushe : 초당 fsync flush 되는 수
: mapped : 메모리상에 매핑되는 메모리 크기 단위 (MB)
: vsize : 프로세스의 가상 크기 (MB)
: res : 프로세스의 resident 크기 (MB)
: *faults : 초당 발생하는 페이지 폴트 수
: *locked : 글로벌 write락이 발생하는 전체시간에 대한 비율 (%)
: Idx miss : Btree index를 로드하며 인덱스를 읽을 때 페이지 폴트가 나는 비율(%)
: *qr : MongoDB인스턴스로부터 Data를 읽기를 기다리기 위한 client의 queue 길이
: qw : MongoDB인스턴스로부터 Data를 쓰기를 기다리기 위한 client의 queue 길이
: ar : 읽기 작업을 수행중인 Active 클라이언트 수
: aw : 쓰기 작업을 진행중인 Active 클라이언트 수
: netIn : MongoDB로 received된 네트워크 트래픽 양
: netOut : MongoDB에서 밖으로 sent된 네트워크 트래픽 양
: conn : 접속된 connection 수
: set : Replica 이름
: repl : 리플리케이션 유형
: mongotop 은 컬랙션 단위의 응답 속도 확인이 가능함
: 갑자기 page fault가 증가하고 서비스가 지연된다면, full scan쿼리를 날렸을 가능성이 높음
: 쓰기 요청이 많을 경우 qr수치가 높아지고 읽기 대기중인 상태가 많아져 지연된다고 느껴진다.
: 이로써 발생하는 원인을 추정하고 대비하자.
* MongoTop
: 리눅스에서 시스템 상황을 확인할 수 있는 Top과 유사
: DB 인스턴스 내 모든 콜랙션에 대한 read/write 확인 가능
: Mongostat 처럼 몇가지 데이터 컬럼이 존재하는데 stat처럼 복잡하지 않아서 한눈에 알아보기 쉬움
> mongotop 5 // 5초마다 refresh 하라는 뜻
- 레이블
: Ns : DB명 + 컬랙션 명
: Db : DB명
: Total : Mongod프로세스가 해당 콜랙션에서 수행한 작업 총 시간
: Read : Mongod 프로세스가 해당 콜랙션에서 읽기 작업을 수행한 총 시간
: Write : Mongod 프로세스가 해당 콜랙션에서 쓰기 작업을 수행한 총 시간
: 시간 : 분석 결과를 반환한 시간
* 웹 모니터링 도구
: 위의 도구들은 DB라면 제공하는 기본 명령어
: 웹상에서 모니터링 할수있는 환경을 제공함
: 활성화 시키고 싶다면, mongodb 데몬을 실행할때 -rest옵션을 주면됨.
> mongod --dbpath 경로 --rest
> http://localhost:28071 접근 // 웹에서 확인
* Log 수집
: 장애가 발생했을 경우나 정기적인 점검과정에서 필요
: MongDB 데몬 실행시 logpath 옵션을 사용하면, MongoDB 로그를 저장가능한 상태가 됨
: 많은 정보를 저장하기 때문에 log파일명을 일정시간 단위로 바꾸어 주어야 한다.
> mongod --dbpath 경로 --logpath 경로/testlog.txt // textlog.txt에 로그가 저장됨
2. MongDB 로그 수집/분석 방법
* mongostat
: mongod, mongos 성능 측정
> mongostat
> mongostat 30 // 30초 주기 측정
> mongostat --rowcount 20 1 // 20개의 row를 1초 주기로 측정
> mongostat -n 20 1 // 1초주기로 20번 출력하고 종료
* mongotop
: Read / Write / Total I/O 정보 조회
> mongotop
> mongotop 30 // 30초 주기로 조회
> mongotop --locks // DB의 Lock상황을 조회