Pytanie jest tak proste, jak proste ... Jak logować wszystkie zapytania w pliku dziennika w stanie „tail” w mongodb?
Próbowałem:
- ustawienie poziomu profilowania
- ustawienie powolnego uruchamiania parametru ms
- mongod z opcją -vv
/Var/log/mongodb/mongodb.log wyświetla tylko aktualną liczbę aktywnych połączeń ...
mongod -vv
pracował dla mnieOdpowiedzi:
Możesz rejestrować wszystkie zapytania:
Źródło: http://docs.mongodb.org/manual/reference/method/db.setProfilingLevel/
db.setProfilingLevel(2)
oznacza „rejestruj wszystkie operacje”.źródło
db.setProfilingLevel(2,-1)
system.profile
kolekcji.db.system.profile.find().pretty()
nic dla mnie nie dajeSkończyło się na rozwiązaniu tego, zaczynając mongod w ten sposób (młotkowany i brzydki, tak ... ale działa dla środowiska programistycznego):
Umożliwia to profilowanie i ustawia próg dla „wolnych zapytań” na 1 ms, powodując, że wszystkie zapytania są rejestrowane jako „wolne zapytania” w pliku:
Teraz otrzymuję ciągłe dane wyjściowe dziennika za pomocą polecenia:
Przykładowy dziennik:
źródło
profile=1
islowms=1
wierszami/etc/mongodb.conf
?--profile=2
do/etc/mongodb.conf
urzędowych, zgodnie z docs Mongo, wszelkie wszystkie operacje będą rejestrowane.db.setProfilingLevel(level,slowms)
. Na przykład:db.setProfilingLevel(2,1)
ustawi poziom na 2, a próg wolnego zapytania na 1 ms.Ponieważ to pierwsza odpowiedź w Google ...
W wersji 3
http://docs.mongodb.org/manual/reference/method/db.setLogLevel/
źródło
MongoDB
posiada wyrafinowaną funkcję profilowania. Rejestrowanie odbywa się wsystem.profile
kolekcji. Dzienniki można zobaczyć z:Istnieją 3 poziomy logowania ( źródło ):
Aby zobaczyć, na jakim poziomie profilowania działa baza danych, użyj
i zobaczyć status
Aby zmienić stan profilowania, użyj polecenia
Gdzie
level
odnosi się do poziomu profilowania imilliseconds
jest ms, przez jaki czas trwania zapytania muszą być rejestrowane. Aby wyłączyć rejestrowanie, użyjZapytanie mające na celu przeszukanie kolekcji profili systemowych dla wszystkich zapytań, które trwały dłużej niż jedną sekundę, uporządkowane według malejącej sygnatury czasowej, będzie
źródło
Zrobiłem narzędzie wiersza poleceń, aby aktywować aktywność profilera i zobaczyć dzienniki w sposób „ogonowy” : „mongotail” .
Ale bardziej interesującą funkcją (również podobną
tail
) jest oglądanie zmian „ w czasie rzeczywistym” z-f
opcją i od czasu do czasu filtrowanie wyniku wgrep
celu znalezienia określonej operacji.Zobacz dokumentację i instrukcje instalacji na: https://github.com/mrsarm/mongotail
źródło
Po ustawieniu poziomu profilowania za pomocą
db.setProfilingLevel(2)
.Poniższe polecenie wydrukuje ostatnie wykonane zapytanie.
Możesz także zmienić limit (5), aby zobaczyć mniej / więcej zapytań.
$ nin - odfiltruje zapytania dotyczące profili i indeksów
Ponadto użyj projekcji zapytania {'query': 1} tylko do przeglądania pola zapytania
Dzienniki zawierające tylko projekcję zapytań
źródło
jeśli chcesz, aby zapytania były rejestrowane w pliku dziennika mongodb, musisz ustawić zarówno poziom dziennika, jak i profilowanie, na przykład:
(patrz https://docs.mongodb.com/manual/reference/method/db.setLogLevel )
Ustawienie samego profilowania nie spowodowałoby rejestrowania zapytań do pliku, więc można je uzyskać tylko z
źródło
Dane profilera są zapisywane w kolekcji w Twojej bazie danych, a nie do pliku. Zobacz http://docs.mongodb.org/manual/tutorial/manage-the-database-profiler/
Poleciłbym korzystanie z usługi MMS 10gen i przekazywać tam dane programistyczne profilera, gdzie można je filtrować i sortować w interfejsie użytkownika.
źródło
Myślę, że choć nie elegancki, oplog mógłby być częściowo wykorzystany do tego celu: rejestruje wszystkie zapisy - ale nie odczyty ...
Musisz włączyć replikację, jeśli mam rację. Informacje pochodzą z odpowiedzi na to pytanie: Jak nasłuchiwać zmian w kolekcji MongoDB?
źródło
Ustawienie profilinglevel na 2 to kolejna opcja rejestrowania wszystkich zapytań.
źródło
Polecam sprawdzić mongosniff. To narzędzie może zrobić wszystko, co chcesz, a nawet więcej. W szczególności może pomóc zdiagnozować problemy z systemami mongo na większą skalę oraz sposobem kierowania zapytań i ich pochodzeniem, ponieważ działa poprzez nasłuchiwanie interfejsu sieciowego dla całej komunikacji związanej z mongo.
http://docs.mongodb.org/v2.2/reference/mongosniff/
źródło
Napisałem skrypt, który wydrukuje system.profile zaloguj się w czasie rzeczywistym w miarę pojawiania się zapytań. Musisz najpierw włączyć logowanie, jak podano w innych odpowiedziach. Potrzebowałem tego, ponieważ używam podsystemu Windows dla systemu Linux, dla którego ogon nadal nie działa.
https://github.com/dtruel/mongo-live-logger
źródło
Następnie
źródło
Zadano to dawno temu, ale może to komuś pomóc:
Profiler MongoDB rejestruje wszystkie zapytania w ograniczonym kolekcji system.profile . Zobacz to: profiler bazy danych
--profile=2
opcją włączającą logowanie wszystkich zapytań LUB jeśli instancje mongod już działają, z mongoshell uruchomdb.setProfilingLevel(2)
po wybraniu bazy danych. (można to zweryfikować przezdb.getProfilingLevel()
, który powinien zwrócić2
)tail -f ../logs/mongologs.txt
. Ten skrypt można uruchomić w tle i będzie rejestrował wszystkie operacje na bazie danych w pliku.Mój kod dla kursora dostępnego dla kolekcji system.profile jest w nodejs; rejestruje wszystkie operacje wraz z zapytaniami zachodzącymi w każdej kolekcji MyDb:
W przypadku kursora dostępnego w Pythonie korzystającym z pymongo, zapoznaj się z następującym kodem, który filtruje dla MyCollection i tylko operację wstawiania:
Uwaga: Kursor dostępny działa tylko w przypadku kolekcji z ograniczeniami. Nie można go używać do bezpośredniego rejestrowania operacji na kolekcji, zamiast tego użyj filtru:
'ns': 'MyDb.MyCollection'
Uwaga: Rozumiem, że powyższy kod nodejs i Python może nie być zbyt pomocny dla niektórych. Właśnie podałem kody w celach informacyjnych.
Użyj tego łącza, aby znaleźć dokumentację dotyczącą kursora dostępnego w wybranym języku / sterowniku Mongodb Drivers
Kolejna funkcja, którą dodałem po tym logrotate .
źródło
Wypróbuj ten pakiet, aby dostosować wszystkie zapytania (bez operacji oplog): https://www.npmjs.com/package/mongo-tail-queries
(Zastrzeżenie: napisałem ten pakiet dokładnie na tę potrzebę)
źródło