এটি অনেক আগে জিজ্ঞাসা করা হয়েছিল তবে এটি এখনও কাউকে সহায়তা করতে পারে:
মোঙ্গোডিবি প্রোফাইলার ক্যাপড কালেকশন সিস্টেমে সমস্ত প্রশ্নের লগ করে । এটি দেখুন: ডাটাবেস প্রোফাইলার
- মঙ্গোড উদাহরণটি
--profile=2
বিকল্পের সাহায্যে শুরু করুন যা সমস্ত প্রশ্নগুলিকে লগ করতে সক্ষম করে
অথবা যদি মঙ্গোডের দৃষ্টান্ত ইতিমধ্যে চলমান থাকে, মঙ্গোশেল থেকে, db.setProfilingLevel(2)
ডাটাবেস নির্বাচন করার পরে চালানো । (এটি যাচাই করা যেতে পারে db.getProfilingLevel()
, যা ফিরে আসা উচিত 2
)
- এর পরে, আমি একটি স্ক্রিপ্ট তৈরি করেছি যা এই সিস্টেমটিকে লেজ রাখতে মঙ্গোদব এর টেবিলযোগ্য কার্সারটি ব্যবহার করে pr প্রোফাইল সংগ্রহ এবং একটি ফাইলের এন্ট্রিগুলি লিখুন। লগ আমি এটা লেজ প্রয়োজন দেখতে:
tail -f ../logs/mongologs.txt
। এই স্ক্রিপ্টটি পটভূমিতে শুরু করা যেতে পারে এবং এটি ফাইলের ডিবিতে সমস্ত ক্রিয়াকলাপ লগ করবে।
সিস্টেমের জন্য প্রাপ্য কার্সারের জন্য আমার কোড of প্রোফাইলে সংগ্রহটি নোডজেজে রয়েছে; এটি MyDb এর প্রতিটি সংগ্রহে ঘটে যাওয়া প্রশ্নের পাশাপাশি সমস্ত অপারেশন লগ করে:
const MongoClient = require('mongodb').MongoClient;
const assert = require('assert');
const fs = require('fs');
const file = '../logs/mongologs'
// Connection URL
const url = 'mongodb://localhost:27017';
// Database Name
const dbName = 'MyDb';
//Mongodb connection
MongoClient.connect(url, function (err, client) {
assert.equal(null, err);
const db = client.db(dbName);
listen(db, {})
});
function listen(db, conditions) {
var filter = { ns: { $ne: 'MyDb.system.profile' } }; //filter for query
//e.g. if we need to log only insert queries, use {op:'insert'}
//e.g. if we need to log operation on only 'MyCollection' collection, use {ns: 'MyDb.MyCollection'}
//we can give a lot of filters, print and check the 'document' variable below
// set MongoDB cursor options
var cursorOptions = {
tailable: true,
awaitdata: true,
numberOfRetries: -1
};
// create stream and listen
var stream = db.collection('system.profile').find(filter, cursorOptions).stream();
// call the callback
stream.on('data', function (document) {
//this will run on every operation/query done on our database
//print 'document' to check the keys based on which we can filter
//delete data which we dont need in our log file
delete document.execStats;
delete document.keysExamined;
//-----
//-----
//append the log generated in our log file which can be tailed from command line
fs.appendFile(file, JSON.stringify(document) + '\n', function (err) {
if (err) (console.log('err'))
})
});
}
পাইমঙ্গো ব্যবহার করে পাইথন-এ ট্যাবলযোগ্য কার্সারের জন্য, নিম্নলিখিত কোডটি পড়ুন যা মাই ক্লেক্ল্যাশনের জন্য ফিল্টার করে এবং কেবলমাত্র অপারেশন সন্নিবেশ করান:
import pymongo
import time
client = pymongo.MongoClient()
oplog = client.MyDb.system.profile
first = oplog.find().sort('$natural', pymongo.ASCENDING).limit(-1).next()
ts = first['ts']
while True:
cursor = oplog.find({'ts': {'$gt': ts}, 'ns': 'MyDb.MyCollection', 'op': 'insert'},
cursor_type=pymongo.CursorType.TAILABLE_AWAIT)
while cursor.alive:
for doc in cursor:
ts = doc['ts']
print(doc)
print('\n')
time.sleep(1)
দ্রষ্টব্য: প্রাপ্য কার্সার কেবল ক্যাপড সংগ্রহের সাথে কাজ করে। এটি সরাসরি কোনও সংগ্রহের ক্রিয়াকলাপগুলিতে লগ করতে ব্যবহার করা যাবে না, পরিবর্তে ফিল্টারটি ব্যবহার করুন:'ns': 'MyDb.MyCollection'
দ্রষ্টব্য: আমি বুঝতে পারি যে উপরের নোডেজ এবং পাইথন কোড কারও কারও পক্ষে খুব বেশি সহায়ক হতে পারে না। আমি কেবল রেফারেন্সের জন্য কোডগুলি সরবরাহ করেছি।
আপনার ল্যাঙ্গুয়ার্জ / ড্রাইভারের পছন্দ মোংডোব ড্রাইভারগুলিতে প্রযোজ্য কার্সারের ডকুমেন্টেশন সন্ধান করতে এই লিঙ্কটি ব্যবহার করুন
আরেকটি বৈশিষ্ট্য যা আমি এই লোগ্রোটেটের পরে যুক্ত করেছি ।
mongod -vv
আমার জন্য কাজ করেছেন