질문은 간단합니다. 기본적으로 mongodb의 “꼬리”가능한 로그 파일에 모든 쿼리를 어떻게 기록합니까?
나는 시도했다 :
- 프로파일 링 레벨 설정
- 느린 ms 매개 변수 시작 설정
- -vv 옵션을 가진 mongod
/var/log/mongodb/mongodb.log는 현재 활성 연결 수만 계속 표시합니다.
답변
모든 쿼리를 기록 할 수 있습니다.
$ mongo
MongoDB shell version: 2.4.9
connecting to: test
> use myDb
switched to db myDb
> db.getProfilingLevel()
0
> db.setProfilingLevel(2)
{ "was" : 0, "slowms" : 1, "ok" : 1 }
> db.getProfilingLevel()
2
> db.system.profile.find().pretty()
출처 : http://docs.mongodb.org/manual/reference/method/db.setProfilingLevel/
db.setProfilingLevel(2)
“모든 작업 기록”을 의미합니다.
답변
나는 이런 식으로 mongod를 시작하여 이것을 해결했다. (망치고 못생긴, 그래 …하지만 개발 환경에서 작동한다) :
mongod --profile=1 --slowms=1 &
그러면 프로파일 링이 가능하고 “느린 쿼리”에 대한 임계 값을 1ms로 설정하여 모든 쿼리가 파일에 “느린 쿼리”로 기록됩니다.
/var/log/mongodb/mongodb.log
이제 다음 명령을 사용하여 지속적인 로그 출력을 얻습니다.
tail -f /var/log/mongodb/mongodb.log
로그 예 :
Mon Mar 4 15:02:55 [conn1] query dendro.quads query: { graph: "u:http://example.org/people" } ntoreturn:0 ntoskip:0 nscanned:6 keyUpdates:0 locks(micros) r:73163 nreturned:6 reslen:9884 88ms
답변
구글 최초의 답변이기 때문에 …
버전 3
$ mongo
MongoDB shell version: 3.0.2
connecting to: test
> use myDb
switched to db
> db.setLogLevel(1)
http://docs.mongodb.org/manual/reference/method/db.setLogLevel/
답변
MongoDB
정교한 프로파일 링 기능이 있습니다. 로깅은 system.profile
수집 에서 발생합니다 . 로그는 다음에서 볼 수 있습니다.
db.system.profile.find()
3 가지 로깅 레벨 ( source )이 있습니다.
- 레벨 0- 프로파일 러가 꺼져 있고 데이터를 수집하지 않습니다. mongod는 항상 slowOpThresholdMs 임계 값보다 긴 작업을 로그에 씁니다. 이것이 기본 프로파일 러 수준입니다.
- 레벨 1 느린 조작에 대해서만 프로파일 링 데이터를 수집합니다. 기본적으로 느린 작업은 100 밀리 초보다 느린 작업입니다. slowOpThresholdMs 런타임 옵션 또는 setParameter 명령을 사용하여 “느린”작업에 대한 임계 값을 수정할 수 있습니다. 자세한 내용은 느린 작업에 대한 임계 값 지정 섹션을 참조하십시오.
- 레벨 2- 모든 데이터베이스 조작에 대한 프로파일 링 데이터를 수집합니다.
데이터베이스가 실행중인 프로파일 링 레벨을 확인하려면 다음을 사용하십시오.
db.getProfilingLevel()
그리고 상태를 볼 수
db.getProfilingStatus()
프로파일 링 상태를 변경하려면 다음 명령을 사용하십시오.
db.setProfilingLevel(level, milliseconds)
여기서 level
프로파일 링 수준 milliseconds
을 나타내며 쿼리를 기록해야하는 기간 (ms)입니다. 로깅을 끄려면
db.setProfilingLevel(0)
타임 스탬프 내림차순으로 1 초 이상 걸린 모든 쿼리에 대해 시스템 프로필 모음에서 확인할 쿼리는 다음과 같습니다.
db.system.profile.find( { millis : { $gt:1000 } } ).sort( { ts : -1 } )
답변
프로파일 러 활동을 활성화하고 “꼬리”가능한 방식으로 “mongotail” 로그를 확인하는 명령 줄 도구를 만들었습니다 .
그러나보다 흥미로운 기능 (과 같은 tail
)은 옵션을 사용하여 “실시간” 의 변경 사항을보고 -f
때로는 grep
특정 작업을 찾기 위해 결과를 필터링하는 것입니다 .
https://github.com/mrsarm/mongotail 에서 설명서 및 설치 지침을 참조하십시오.
답변
수준을 프로파일 링하면 사용하여 설정됩니다 db.setProfilingLevel(2)
.
아래 명령은 마지막으로 실행 된 쿼리를 인쇄합니다.
더 적거나 더 많은 쿼리를보기 위해 limit (5)를 변경할 수도 있습니다.
$ nin-프로필을 필터링하고 쿼리를 인덱싱합니다.
또한 쿼리 필드를 볼 때만 쿼리 프로젝션 { ‘query’: 1}을 사용하십시오.
db.system.profile.find(
{
ns: {
$nin : ['meteor.system.profile','meteor.system.indexes']
}
}
).limit(5).sort( { ts : -1 } ).pretty()
쿼리 프로젝션 만있는 로그
db.system.profile.find(
{
ns: {
$nin : ['meteor.system.profile','meteor.system.indexes']
}
},
{'query':1}
).limit(5).sort( { ts : -1 } ).pretty()
답변
조회를 mongodb 로그 파일에 로그하려면 다음과 같이 로그 레벨과 프로파일 링을 모두 설정해야합니다.
db.setLogLevel(1)
db.setProfilingLevel(2)
( https://docs.mongodb.com/manual/reference/method/db.setLogLevel 참조 )
프로파일 링 만 설정하면 쿼리가 파일에 기록되지 않으므로 다음에서 얻을 수 있습니다.
db.system.profile.find().pretty()
