MongoDB регистрирует все запросы
вопрос-как это просто... Как вы регистрируете все запросы в файле журнала"хвост" в mongodb?
Я пробовал:
- настройка уровня профилирования
- установка медленного запуска параметра ms
- mongod с опцией-vv
в /var/журнал/в MongoDB/MongoDB в.журнал продолжает показывать только текущее количество активных соединений...
11 ответов
Вы можете регистрировать все запросы:
$ 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 &
это позволяет профилировать и устанавливает порог для " медленных запросов "как 1 мс, в результате чего все запросы регистрируются как" медленные запросы " к файлу:
/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
потому что его первый ответ google ...
Для версии 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/
Я сделал инструмент командной строки для активации активности профилировщика и просмотра журналов в "хвост"в состоянии путь: "mongotail".
но более интересная функция (также как tail
), чтобы увидеть изменения в "реального времени" С -f
опция, и иногда фильтровать результат с grep
чтобы найти конкретную операцию.
см. документацию и инструкции по установке в: https://github.com/mrsarm/mongotail
MongoDB
имеет сложную функцию профилирования. Регистрация происходит в system.profile
коллекция. Журналы можно увидеть из:
db.system.profile.find()
есть 3 уровня ведения журнала (источник):
данные профилировщика записываются в коллекцию в вашей БД, а не в файл. См.http://docs.mongodb.org/manual/tutorial/manage-the-database-profiler/
Я бы рекомендовал использовать 10gen MMS service и feed данных профилировщика разработки там, где вы можете фильтровать и сортировать его в пользовательском интерфейсе.
после того, как уровень профилирования установлен с помощью 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()
журналы только с проекцией запроса
db.system.profile.find(
{
ns: {
$nin : ['meteor.system.profile','meteor.system.indexes']
}
},
{'query':1}
).limit(5).sort( { ts : -1 } ).pretty()
Я думаю, что в то время как не элегантный,oplog может частично использоваться для этой цели:он регистрирует все записи, но не считывает...
вы должны включить replicatoon, если я прав. Информация от ответ отсюда вопрос: как прослушать изменения в коллекции MongoDB?
Я рекомендую проверить mongosniff. Этот инструмент может сделать все, что вы хотите и больше. Особенно это может помочь диагностировать проблемы с более масштабными системами mongo и как маршрутизируются запросы и откуда они поступают, поскольку он работает, прослушивая ваш сетевой интерфейс для всех связанных с mongo коммуникаций.
Я написал сценарий, который распечатает систему.профиль войти в режиме реального времени, как запросы приходят. Сначала необходимо включить ведение журнала, как указано в других ответах. Мне это нужно, потому что я использую подсистему Windows для Linux, для которой tail все еще не работает.