问题是基本的,因为它很简单...如何在mongodb中的"尾部"日志文件中记录所有查询?
我试过了:
/var/log/mongodb/mongodb.log只显示当前活动连接数...
Kri*_*mbi 241
您可以记录所有查询:
$ 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()
Run Code Online (Sandbox Code Playgroud)
资料来源:http://docs.mongodb.org/manual/reference/method/db.setProfilingLevel/
db.setProfilingLevel(2) 表示"记录所有操作".
Joã*_*lva 81
我最终通过启动这样的mongod来解决这个问题(锤击和丑陋,是的......但是适用于开发环境):
mongod --profile=1 --slowms=1 &
Run Code Online (Sandbox Code Playgroud)
这样可以进行性能分析并将"慢查询"的阈值设置为1ms,从而将所有查询记录为对文件的"慢查询":
/var/log/mongodb/mongodb.log
Run Code Online (Sandbox Code Playgroud)
现在我使用以下命令获得连续的日志输出:
tail -f /var/log/mongodb/mongodb.log
Run Code Online (Sandbox Code Playgroud)
示例日志:
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
Run Code Online (Sandbox Code Playgroud)
bar*_*rak 31
因为它的谷歌第一个答案...
对于版本3
$ mongo
MongoDB shell version: 3.0.2
connecting to: test
> use myDb
switched to db
> db.setLogLevel(1)
Run Code Online (Sandbox Code Playgroud)
http://docs.mongodb.org/manual/reference/method/db.setLogLevel/
xam*_*mir 24
MongoDB具有复杂的剖析功能.日志记录发生在system.profile集合中.日志可以从以下位置看到:
db.system.profile.find()
Run Code Online (Sandbox Code Playgroud)
有3个日志记录级别(源):
要查看运行数据库的概要分析级别,请使用
db.getProfilingLevel()
Run Code Online (Sandbox Code Playgroud)
并查看状态
db.getProfilingStatus()
Run Code Online (Sandbox Code Playgroud)
要更改分析状态,请使用该命令
db.setProfilingLevel(level, milliseconds)
Run Code Online (Sandbox Code Playgroud)
Where level指的是分析级别,并且milliseconds是需要记录查询的持续时间的ms.要关闭日志记录,请使用
db.setProfilingLevel(0)
Run Code Online (Sandbox Code Playgroud)
查询在系统配置文件集合中查找花费超过一秒的所有查询,按时间戳降序排序将是
db.system.profile.find( { millis : { $gt:1000 } } ).sort( { ts : -1 } )
Run Code Online (Sandbox Code Playgroud)
Mar*_*uiz 22
我创建了一个命令行工具来激活探查器活动并以"尾部"方式查看日志:"mongotail".
但更有趣的功能(也是如此tail)是使用该选项查看"实时"的变化-f,并偶尔过滤结果grep以查找特定操作.
请参阅以下网址中的文档和安装说明:https://github.com/mrsarm/mongotail
Fai*_*eef 11
使用后设置性能分析级别db.setProfilingLevel(2).
以下命令将打印上次执行的查询.
您也可以更改限制(5)以查看更少/更多的查询.
$ nin - 将过滤掉配置文件和索引查询
另外,使用查询投影{'query':1}仅查看查询字段
db.system.profile.find(
{
ns: {
$nin : ['meteor.system.profile','meteor.system.indexes']
}
}
).limit(5).sort( { ts : -1 } ).pretty()
Run Code Online (Sandbox Code Playgroud)
仅包含查询投影的日志
db.system.profile.find(
{
ns: {
$nin : ['meteor.system.profile','meteor.system.indexes']
}
},
{'query':1}
).limit(5).sort( { ts : -1 } ).pretty()
Run Code Online (Sandbox Code Playgroud)
探查器数据将写入数据库中的集合,而不是文件.见http://docs.mongodb.org/manual/tutorial/manage-the-database-profiler/
我建议使用10gen的MMS服务,并在那里提供开发分析器数据,您可以在UI中对其进行过滤和排序.
如果要将查询记录到mongodb日志文件中,则必须同时设置日志级别和分析,例如:
db.setLogLevel(1)
db.setProfilingLevel(2)
Run Code Online (Sandbox Code Playgroud)
(请参阅https://docs.mongodb.com/manual/reference/method/db.setLogLevel)
仅设置概要分析不会将查询记录到文件中,因此您只能从
db.system.profile.find().pretty()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
152582 次 |
| 最近记录: |