মঙ্গোডিবি সব প্রশ্নের লগইন করছে


169

প্রশ্নটি যতটা সহজ ততটা মৌলিক ... আপনি কীভাবে সমস্ত প্রশ্নগুলিকে একটি "লেজ" সক্ষম লগ ফাইলে মোংডবায় লগ করবেন?

আমি চেষ্টা করেছি:

  • প্রোফাইলিং স্তর নির্ধারণ
  • ধীর এমএস প্যারামিটার সেট করে
  • -vv বিকল্প সহ মঙ্গোদ

/Var/log/mongodb/mongodb.log সক্রিয় সংযোগগুলির কেবলমাত্র বর্তমান সংখ্যাটি দেখায় ...


mongod -vvআমার জন্য কাজ করেছেন
fguillen

উত্তর:


259

আপনি সমস্ত প্রশ্নের লগ করতে পারেন:

$ 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/references/method/db.setProfilingLevel/

db.setProfilingLevel(2) "সমস্ত ক্রিয়াকলাপ লগ" এর অর্থ।


3
এক নজরে দেখে মনে হচ্ছে এটি গৃহীত উত্তরের চেয়ে উত্তম উত্তর।
এহতেশ চৌধুরী 22

2
আরও ভাল নয়, প্রশ্নগুলি একটি প্রাপ্য লগ ফাইলের জন্য জিজ্ঞাসা করে, তবে অবশ্যই কার্যকর, আপনি লগ ফাইলগুলিতে অ্যাক্সেস না পেয়ে কেবলমাত্র মঙ্গো শেল, আমাকে এখানে আনার মতো :)
ইনোলাস্কো

11
আমি প্রোফাইলিং স্তরটি 2 এ সেট করার চেষ্টা করেছি তবে আমার দ্বিতীয় প্যারামিটারটি -1 db.setProfilingLevel(2,-1)
তেও

4
লগগুলি যেখানে যায় তাদের আগ্রহীদের জন্য ডকটি বলেছে: মংডোড system.profileসংগ্রহে ডাটাবেস প্রোফাইলারের আউটপুট লিখেছেন ।
টটিমেডলি

5
db.system.profile.find().pretty()আমার জন্য কিছুই দেয় না
নোড_সাইনী

84

আমি মঙ্গোদ শুরু করে এটি সমাধান করে শেষ করেছি (হামাগুড় এবং কুশ্রী, হ্যাঁ ... তবে উন্নয়নের পরিবেশের জন্য কাজ করে):

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

6
এটি কি যুক্ত profile=1এবং slowms=1লাইনগুলির সমতুল্য হওয়া উচিত /etc/mongodb.conf?
অ্যান্ড্রু ম্যাগি

আমি /var/log/mongodb/mongodb.log খুঁজে পাইনি তবে এটি কনসোলে লগইন করছিল, যা আমার প্রয়োজন ছিল। ধন্যবাদ
অহুমান

4
আপনি কেবল অফিশিয়াল মঙ্গো ডক্স অনুযায়ী যোগ --profile=2করতে পারেন /etc/mongodb.conf, যে কোনও ক্রিয়াকলাপ লগ করা হবে।
টসকে

1
@auhuman "লেজ -ফ /var/log/mongodb/mongodb.log" কমান্ড কোথায় লিখবেন ??
হাফ ব্লাড প্রিন্স

5
আপনি কেবল ব্যবহার করতে পারেন পুনরায় চালু করার দরকার নেই db.setProfilingLevel(level,slowms)। উদাহরণস্বরূপ: db.setProfilingLevel(2,1)স্তরটি 2 এবং স্লো ক্যোয়ারির থ্রোহোল্ড 1 মিমিতে সেট করবে set
অভিষেক গুপ্ত


25

MongoDBপ্রোফাইলিংয়ের একটি অত্যাধুনিক বৈশিষ্ট্য রয়েছে। লগিং system.profileসংগ্রহে ঘটে । লগগুলি থেকে দেখা যায়:

db.system.profile.find()

লগিংয়ের 3 টি স্তর ( উত্স ) রয়েছে:

  • স্তর 0 - প্রোফাইলারটি বন্ধ, কোনও ডেটা সংগ্রহ করে না। মংডোড সবসময় তার লগের জন্য স্লোঅপট্রেসোল্ডহোল্ডার প্রান্তিকের চেয়ে বেশি সময় ধরে ক্রিয়াকলাপ লেখায়। এটি ডিফল্ট প্রোফাইলার স্তর।
  • স্তর 1 - কেবল ধীর অপারেশনের জন্য প্রোফাইলিং ডেটা সংগ্রহ করে। ডিফল্টরূপে ধীর ক্রিয়াকলাপগুলি 100 মিলিসেকেন্ডের চেয়ে ধীর। আপনি স্লোঅপট্রেসোল্ডসোল্ড রানটাইম বিকল্প বা সেটপ্যারামিটার কমান্ড দিয়ে "স্লো" ক্রিয়াকলাপের জন্য প্রান্তিককরণটি পরিবর্তন করতে পারেন। আরও তথ্যের জন্য স্লো অপারেশনগুলির জন্য প্রান্তিককরণ নির্দিষ্ট করুন বিভাগটি দেখুন।
  • স্তর 2 - সমস্ত ডাটাবেস ক্রিয়াকলাপের জন্য প্রোফাইলিং ডেটা সংগ্রহ করে।

ডাটাবেসটি কোন প্রোফাইলের স্তরে চলছে তা দেখতে, ব্যবহার করুন

db.getProfilingLevel()

এবং অবস্থা দেখতে

db.getProfilingStatus()

প্রোফাইলিংয়ের স্থিতি পরিবর্তন করতে কমান্ডটি ব্যবহার করুন

db.setProfilingLevel(level, milliseconds)

যেখানে levelপ্রোফাইলিং স্তরটিকে বোঝায় এবং কোয়ালিটির millisecondsকোয়েরিগুলিকে লগ করা প্রয়োজন তা এমএস। লগিং বন্ধ করতে, ব্যবহার করুন

db.setProfilingLevel(0)

টাইমস্ট্যাম্প অবতরণ দ্বারা অর্ডার করা এক সেকেন্ডের চেয়ে বেশি সময় নিয়েছে এমন সমস্ত প্রশ্নের জন্য সিস্টেম প্রোফাইল সংগ্রহের সন্ধানের ক্যোয়ারী হবে

db.system.profile.find( { millis : { $gt:1000 } } ).sort( { ts : -1 } )

1
ডকুমেন্টেশন মতে, Loglevel 0 করে না মানে "কোন লগিং" কিন্তু এটি ধীর প্রশ্নের লগ: "। প্রোফাইলার বন্ধ আছে, সংগ্রহ করা কোন তথ্য নেই mongod সবসময় তার লগে slowOpThresholdMs থ্রেশহোল্ড চেয়ে দীর্ঘতর অপারেশন লিখেছেন।" এসসিআর
টিউটোরিয়াল

23

আমি প্রোফাইলার ক্রিয়াকলাপটি সক্রিয় করতে এবং "লেজ" সক্ষম উপায়ে লগগুলি দেখতে একটি কমান্ড লাইন সরঞ্জাম তৈরি করেছি : "মঙ্গোটেল"

তবে আরও আকর্ষণীয় বৈশিষ্ট্যটি (এছাড়াও পছন্দ করা tail) হ'ল বিকল্পটির সাথে "রিয়েল টাইম" এর পরিবর্তনগুলি দেখা এবং নির্দিষ্ট ক্রিয়াকলাপ -fসন্ধানের জন্য মাঝে মাঝে ফলাফলটি ফিল্টার করা grep

ডকুমেন্টেশন এবং ইনস্টলেশন নির্দেশাবলী এতে দেখুন: https://github.com/mrsarm/mongotail


2
এটি ওপিতে সর্বাধিক সম্পূর্ণ প্রতিক্রিয়া। ESP। 'লেজ-সক্ষম' প্রয়োজনীয়তা সম্পর্কে।
লুক ডাব্লু

11

একবার প্রোফাইলিং স্তরটি ব্যবহার করে সেট হয়ে যায় db.setProfilingLevel(2)

নীচের কমান্ডটি শেষ সম্পাদিত ক্যোয়ারী প্রিন্ট করবে।
কম / আরও কোয়েরি দেখতে আপনি সীমা (5) পরিবর্তন করতে পারেন।
in n - প্রোফাইল এবং সূচি ক্যোয়ারী ফিল্টার করবে
এছাড়াও, কেবলমাত্র ক্যোয়ারী ক্ষেত্র দেখার জন্য ক্যোয়ারী প্রজেকশন {'কোয়েরি': 1 use ব্যবহার করবে

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()

10

আপনি যদি প্রশ্নগুলি মঙ্গডব লগ ফাইলে লগ করতে চান তবে আপনাকে লগ স্তর এবং প্রোফাইল উভয়ই সেট করতে হবে, উদাহরণস্বরূপ:

db.setLogLevel(1)
db.setProfilingLevel(2)

( https://docs.mongodb.com/manual/references/method/db.setLogLevel দেখুন )

শুধুমাত্র প্রোফাইলিং সেট করার ক্ষেত্রে ফাইলগুলিতে কোয়েরি করা লগইন করতে হবে না, তাই আপনি কেবল এটি থেকে তা পেতে পারেন

db.system.profile.find().pretty()

7

প্রোফাইলার ডেটা আপনার ডিবিতে কোনও সংকলনে লেখা হয়েছে, ফাইল করার জন্য নয়। Http://docs.mongodb.org/manual/tutorial/manage-the-database-profiler/ দেখুন

আমি 10gen এর এমএমএস পরিষেবা ব্যবহার করার পরামর্শ দিচ্ছি এবং সেখানে উন্নত প্রোফাইলের ডেটা ফিড করব, যেখানে আপনি ফিল্টার করে এটি ইউআইতে বাছাই করতে পারেন।


1
হ্যাঁ, স্তর 2 প্রোফাইল সক্রিয় করার পরে, একটি সংগ্রহ ডাটাবেসে যুক্ত করা হয়েছে। যাইহোক, আমি যখনই ডিবাগিং করি প্রতিবারই একটি গুই পুনরায় লোড করা বা একটি কমান্ড চালানো হ'ল দিন শেষে পিটা হ'ল ... কেন আমি একটি লগইন ফাইল চাইছি ts
জোও রোচা দা সিলভা

4

আমি মনে করি মার্জিত না হলেও ওপ্লগটি পারে আংশিকভাবে এই উদ্দেশ্যে ব্যবহার করা পারে: এটি সমস্ত লেখায় লগ করে - তবে কাছে নয় ...

আমি ঠিক থাকলে আপনাকে রেপ্লিক্যাটুন সক্ষম করতে হবে। এই প্রশ্নের এই উত্তর থেকে তথ্যটি রয়েছে : একটি মঙ্গোডিবি সংগ্রহে পরিবর্তনগুলি কীভাবে শুনবেন?


4

সমস্ত প্রশ্নের লগ করার জন্য প্রোফাইলিংলেভেল 2 তে সেট করা অন্য বিকল্প।


3

আমি মঙ্গোসনিফ পরীক্ষা করার পরামর্শ দিচ্ছি। এই সরঞ্জামটি আপনার পছন্দসই এবং আরও অনেক কিছু করতে পারে। বিশেষত এটি বৃহত্তর আকারের মঙ্গো সিস্টেমগুলি এবং কীভাবে প্রশ্নগুলি রুট করা হচ্ছে এবং কোথা থেকে আসছে সেগুলি সম্পর্কিত সমস্যাগুলি নির্ণয় করতে সহায়তা করতে পারে কারণ এটি সমস্ত মঙ্গো সম্পর্কিত যোগাযোগের জন্য আপনার নেটওয়ার্ক ইন্টারফেস শুনে শুনে কাজ করে।

http://docs.mongodb.org/v2.2/reference/mongosniff/


পৃষ্ঠাটি অনুসারে, এটি কেবল ইউনিক্স এনভিরোয়াসে কাজ করে, এবং উইন্ডোতে আমার ডিনে এটি নেই। কোন প্রস্তাবিত উইন্ডোজ সমতুল্য?
প্রচারিত

আপনি কি কোনও রিমোট উইন্ডোজ সার্ভারে (অ্যাজুরি ক্লাউড ইত্যাদি) চালিয়ে যাচ্ছেন বা আপনার পিসিতে স্থানীয়ভাবে? এটি যদি স্থানীয়ভাবে থাকে তবে ওয়্যারশার্ক পর্যাপ্ত পরিমাণের চেয়ে বেশি হবে। উইন্ডোগুলিতে এটি ইনস্টল করতে আপনাকে মঙ্গোসনিফ.এক্সই তৈরি করতে হবে যা কিছুটা অনস্বীকার্য। আপনি লিনাক্স নির্দেশাবলী অনুসরণ করেন তবে আপনার উইনপ্যাক্যাপের বিকাশ সংস্করণ ইনস্টল করতে হবে।
ড্যানিয়েল উইলিয়ামস

উত্তরের জন্য ধন্যবাদ. আমি মঙ্গো প্রোফাইলারের বাইরে আমার প্রয়োজনীয় তথ্য পেতে সক্ষম হয়েছি, তবে আরও গুরুতর কিছু যদি আবার আসে তবে আমি পকেটে ওয়্যারশার্ক রাখব।
প্রচারিত

1

আমি একটি স্ক্রিপ্ট লিখেছিলাম যা সিস্টেমে মুদ্রণ করবে qu প্রশ্নগুলি আসার সাথে সাথেই রিয়েল টাইমে প্রোফাইলে লগ করুন other অন্যান্য উত্তরে বর্ণিত হিসাবে আপনাকে প্রথমে লগিং সক্ষম করতে হবে। আমার এটি দরকার কারণ আমি লিনাক্সের জন্য উইন্ডোজ সাবসিস্টেম ব্যবহার করছি, যার জন্য লেজ এখনও কাজ করে না।

https://github.com/dtruel/mongo-live-logger


1
db.adminCommand( { getLog: "*" } )

তারপর

db.adminCommand( { getLog : "global" } )

5
স্ট্যাক ওভারফ্লোতে স্বাগতম! যদিও এই কোডটি কোনও ব্যাখ্যা সহ প্রশ্নটি সমাধান করতে পারে তবে আপনার পোস্টের মান উন্নত করতে সত্যই সহায়তা করে।
শ্রী

1

এটি অনেক আগে জিজ্ঞাসা করা হয়েছিল তবে এটি এখনও কাউকে সহায়তা করতে পারে:

মোঙ্গোডিবি প্রোফাইলার ক্যাপড কালেকশন সিস্টেমে সমস্ত প্রশ্নের লগ করে । এটি দেখুন: ডাটাবেস প্রোফাইলার

  1. মঙ্গোড উদাহরণটি --profile=2বিকল্পের সাহায্যে শুরু করুন যা সমস্ত প্রশ্নগুলিকে লগ করতে সক্ষম করে অথবা যদি মঙ্গোডের দৃষ্টান্ত ইতিমধ্যে চলমান থাকে, মঙ্গোশেল থেকে, db.setProfilingLevel(2)ডাটাবেস নির্বাচন করার পরে চালানো । (এটি যাচাই করা যেতে পারে db.getProfilingLevel(), যা ফিরে আসা উচিত 2)
  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'

দ্রষ্টব্য: আমি বুঝতে পারি যে উপরের নোডেজ এবং পাইথন কোড কারও কারও পক্ষে খুব বেশি সহায়ক হতে পারে না। আমি কেবল রেফারেন্সের জন্য কোডগুলি সরবরাহ করেছি।

আপনার ল্যাঙ্গুয়ার্জ / ড্রাইভারের পছন্দ মোংডোব ড্রাইভারগুলিতে প্রযোজ্য কার্সারের ডকুমেন্টেশন সন্ধান করতে এই লিঙ্কটি ব্যবহার করুন

আরেকটি বৈশিষ্ট্য যা আমি এই লোগ্রোটেটের পরে যুক্ত করেছি


0

সমস্ত প্যাকেজটি (ওপলগ অপারেশন ব্যতীত) জিজ্ঞাসা করার চেষ্টা করুন: https://www.npmjs.com/package/mongo-tail-queries

(অস্বীকৃতি: আমি এই প্রয়োজনের জন্য ঠিক এই প্যাকেজটি লিখেছি)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.