MongoDB 로그 수집 / 분석

MongoDB 모니터링 전략

  • 데이터베이스 활동을 실시간 리포팅하는 유틸리티 활용
    (MongoDB 다운로드 패키지에 포함된 유틸리티)
  • 데이터베이스 명령 활용
    (현재 데이터베이스의 상태에 대한 통계 확인 가능)
  • MMS 모니터링 서비스 활용
    MMS : MongoDB Management Service
    데이터에 대한 시각화 및 경고 등을 제공하는 무료 서비스

MongoStat

  • MongoDB가 동작하는 내부 상황에 대한 정보를 확인하기 위한 툴
  • 1초에 한번씩 mongod, mongos의 성능을 측정
  • MongoDB 내에서 일어나는 다양한 이벤트 ( insert, find, update, delete )에 대한 정보와
    메모리 상태 ( mapped, vsixe, res, faults, locked )등의 정보 확인 가능
  • MongoStat 사용방법 : cmd에서 "mongostat" 이라고 입력
  • rowcount를 통해 출력될 데이터 row 수를 지정 가능
    ( 만약 이 값을 지정하지 않는다면 계속해서 관련 정보를 출력 )
    ex ) mongostat -rowcount 50

* 이벤트

레이블 의미
inserts 초당 insert 수
query 초당 query 수
update 초당 update 수
delete 초당 delete 수
getmore 초당 발생 작업 수
command Slave를 포함하여 초당 실행되는 명령어 수
flushe 초당 fsync flush 되는 수

 

* 메모리 상태

레이블  의미
mapped 메모리상 매핑되는 메모리 크기 단위 (MB)
vsize 프로세스 가상 크기 (MB)
res 프로세스의 resident 크기 (MB)
*faults 초당 발생하는 페이지 폴트 수
*locked 글로벌 Write 락이 발생하는 전체 시간에 대한 비율 (단위 퍼센트)
ldx miss Btree index를 로드하며 인덱스를 읽을 때 페이지 폴트가 나는 비율 (단위 퍼센트)
*qr 몽고디비 인스턴스로부터 Data 읽기를 기다리기 위한 client의 queue 길이
qw 몽고디비 인스턴스로부터 Data 쓰기를 기다리는 client의 queue 길이
ar 읽기 작업을 수행중인 Active 클라이언트 수
aw 쓰기 작업을 진행중인 Active 클라이언트 수
netln 몽고디비로 receivec된 네트워크 트래픽 양
netOut 몽고디비에서 밖으로 sent된 네트워크 트래픽 양
conn 접속된 connection 수
set Replica 이름
repl 리플리케이션 유형
M : Master
SEC : Secondary
REC : Recovering
UNK : Unknown
SLV : Slave

MongoTop

  • mongotop은 컬렉션 단위의 응답 속도 확인이 가능
  • db.serverStatus()나 mongostat에 나오는 요청 건 수와 같이 계산하거나,
    참고 지표정도로 확인
  • mongostat에서 중요한 지표는 page fault, qr, locked 등
  • 갑자기 page fault가 증가하고 서비스가 지연된다면,
    full scan 쿼리를 날렸을 가능성이 높음
  • 쓰기 요청이 많아질 경우 qr 수치가 높아지고 그만큼 읽기 대기 중인 상태가 많아지므로
    체감상 서비스가 지연된다고 느낄 수 있음
  • mongotop은 리눅스에서 시스템 상황을 실시간(설정에 따라) 확인할 수 있는 top와 유사
  • mongostat과 다른점은 몽고디비 인스턴스 내 모든 컬렉션에 대한 read/write를 확인 가능
  • mongotop 명령어 뒤에 붙은 숫자는 5초마다 데이터를 refresh 하라는 명령
  • mongostat처럼 몇 가지 데이터 컬럼이 존재하는데 stat처럼 복잡하지 않아 한눈에 보기 쉬움
  • ex ) mongotop 5
레이블 의미
Ns 데이터베이스명 + 컬렉션명
Db 데이터베이스명
(v2.2 이상에서 -locks옵션을 사용한다면 출력되지 않음)
Total mongod 프로세스가 해당 컬렉션에서 수행한 총 작업 시간
Read mongod 프로세스가 해당 컬렉션에서 읽기 작업을 수행한 총 시간
Write mongod 프로세스가 해당 컬렉션에서 쓰기 작업을 수행한 총 시간
시간 분석 결과를 반환한 시간

웹 모니터링 도구

  • 앞선 도구들은 데이터베이스라면 대부분 지원하는 기본적인 명령
  • MongoDB는 웹상에서 MongoDB의 상황을 모니터링할 수 있는 환경 제공
  • NoSQL 솔루션의 특성상 한 대 이상의 서버에서 사용할 수도 있기에 접근성이 높은 웹 모니터링 환경을 기본적으로 제공
  • 웹 모니터링 기능을 활성화하고 싶다면 mongodb 데몬을 실행할 때 -rest 옵션을 주면 됨
  • ex ) mongod -dbpath c:\mongodb\var --rest

http://localhost:28017


Log 수집

  • 실시간으로 MongoDB의 상태를 확인하는 것도 중요하지만
    모든 서버를 실시간으로 체크한다는 것은 불가능함
  • 로그 데이터나 상태 정보가 필요한 경우 장애가 발생했을 경우 이거나
    아니면 정기적인 점검 과정에서 필요
  • 따라서 MongoDB에서 일어나는 상황을 파일로 저장할 필요가 있음
  • logpath 옵션을 몽고디비 실행 시 사용한다면 몽고디비의 로그를 저장 가능한 상태가 됨
  • 꽤 많은 정보를 저장하기 때문에 log 파일명을 일정 시간 단위로 바꿔줄 필요가 있음
  • ex ) mongod --path c:\mongodb\var -logpath c:\mongodb\testlog.txt


MongoDB 로그 수집 / 분석 방법

mongostat - mongod, mongos 성능 측정

  • mongostat 30 / 30초 주기 측정
  • mongostat -rowcount 20 1 / 1초 주기  체크, 20개의 row를 20번 출력 후 종료
  • mongostat -n 20 1 / 1초 주기  체크, 20개의 row를 20번 출력 후 종료


mongotop - Read/Write/Total I/O 정보 조회

  • mongotop 30
  • mongotop --locks / 데이터베이스의 lock 상황 조회 / 옵션 --locks는 MongoDB 2.x에만 유용

 

+ Recent posts