কোনও লগ ফাইলকে এক ধরণের সার্কুলার বাফারে পরিণত করা


22

লোকেরা, লগ ফাইলটিকে একটি বিজ্ঞপ্তি বাফার হিসাবে কাজ করে এমন কোনও * নিক্স সমাধান রয়েছে? উদাহরণস্বরূপ, আমি লগ ফাইলগুলিকে সর্বাধিক 1 গিগাবাইট ডেটা সঞ্চয় করতে এবং সীমাটি পৌঁছে দেওয়ার পরে পুরানো এন্ট্রিগুলি বাতিল করতে চাই।

এটা কি আদৌ সম্ভব? লগ ফাইলটি কোনও বিশেষ ডিভাইসে রূপান্তরিত করা উচিত তা অর্জন করার জন্য আমি বিশ্বাস করি ...

পিএস আমি বিবিধ লোগ্রোটেটিং সরঞ্জামগুলি সম্পর্কে সচেতন তবে এটি আমার প্রয়োজন তা নয়। লোগ্রোটটিংয়ের জন্য প্রচুর আইও দরকার হয়, সাধারণত "রানটাইম" সমাধানের প্রয়োজন পরে দিনে একবার হয়।


3
আমি নিশ্চিত না আপনি কেন ভাবেন যে লগ রোটেশনে প্রচুর আইও দরকার হবে। 10 লগফিলগুলি ঘোরানো হ'ল 10 পুনর্নবীকরণের ক্রিয়াকলাপ এবং পরিষেবার একটি এইচপি। ঠিক হত্যাকারী অপারেশন নয় ... এবং এটি আপনার সমস্যার স্ট্যান্ডার্ড সমাধান :)
pehrs

2
কেউ স্ক্রিপ্ট চালানো হতে পারে / এক্সিকিউটেবল যা এইচুপের সাথে ভাল খেলেন না।
স্কট

1
এটি আপনার প্রশ্নের জন্য অন্য ব্যবহারের কেস সরবরাহ করা। আমার একটি অসুরগীত সংগীত প্লেয়ার রয়েছে। আমি দৈর্ঘ্যের বেশ কয়েকটি লাইন চাই, যাতে আমি কী খেলছি এবং এর আগে কী খেলেছে তা দেখতে পাচ্ছি। এ tail -f somefileতা করবে। আমি কেবল ঘোরানো লগগুলি দিয়ে চেষ্টা করেছি এবং tail -fসেগুলি নিয়ে কাজ করি না।
ভোরাক

উত্তর:


14

লিনাক্সের একটি কার্নেল রিং বাফার রয়েছে। আপনি ব্যবহার করতে পারেন dmesgথেকে এটি প্রদর্শন

অথবা এখানে একটি লিনাক্স কার্নেল মডিউল রয়েছে যা প্রদর্শিত হতে পারে to

এম্লগ কী?

ইমলগ একটি লিনাক্স কার্নেল মডিউল যা কোনও প্রক্রিয়া থেকে সর্বাধিক সাম্প্রতিক (এবং কেবলমাত্র অতি সাম্প্রতিক) আউটপুট অ্যাক্সেস করতে সহজ করে তোলে। এটি কোনও লগ ফাইলে "লেজু-ফ" এর মতোই কাজ করে, কেবলমাত্র স্টোরেজটি কখনই বৃদ্ধি পায় না। এটি এম্বেড থাকা সিস্টেমে কার্যকর হতে পারে যেখানে সম্পূর্ণ লগ ফাইলগুলি রাখার জন্য পর্যাপ্ত মেমরি বা ডিস্কের স্থান নেই তবে সর্বাধিক সাম্প্রতিক ডিবাগিং বার্তাগুলি কখনও কখনও প্রয়োজন হয় (উদাহরণস্বরূপ, কোনও ত্রুটি দেখা যাওয়ার পরে)।

ইমলগ কার্নেল মডিউল সাধারণ অক্ষর ডিভাইস ড্রাইভার প্রয়োগ করে। ড্রাইভার নামকৃত পাইপের মতো কাজ করে যাতে একটি সীমাবদ্ধ, বিজ্ঞপ্তিযুক্ত বাফার থাকে। বাফারের আকারটি সহজেই কনফিগারযোগ্য। বাফারে আরও ডেটা লেখা হওয়ার সাথে সাথে প্রাচীনতম ডেটা বাতিল করা হয়। ইমলোগ ডিভাইস থেকে পড়া একটি প্রক্রিয়া প্রথমে বিদ্যমান বাফারটি পড়বে, তারপরে "টেল-ফ" ব্যবহার করে কোনও লগ ফাইল নিরীক্ষণের অনুরূপ নতুন লেখাটি যেমন লেখা হবে তেমনটি দেখতে পাবে। (অ-ব্লকিং রিডগুলিও সমর্থিত, যদি কোনও প্রক্রিয়া নতুন ডেটার জন্য অপেক্ষা না করে অবরুদ্ধ না করে লগের বর্তমান বিষয়বস্তুগুলি পাওয়ার প্রয়োজন হয়))


1
লিঙ্কের জন্য ধন্যবাদ! বিটিডাব্লু, ইমলগ হোম পেজে ইউলগুফডের একটি লিঙ্ক রয়েছে যা সম্ভবত আমার জন্য আরও উপযুক্ত সমাধান।
পাচঙ্গ

Emlog কার্নেল মডিউল এখন GitHub উপর বজায় রাখা হয়: github.com/nicupavel/emlog
dbernard

4

সবচেয়ে কাছের জিনিসটি যা আমি ভাবতে পারি তা হ'ল আরআরডিটুলস, তবে সম্ভবত আপনি যা খুঁজছেন তা তা নয়। আর একটি সমাধান হ'ল লগ ফাইলটি নিরীক্ষণ করা (প্রতিটি সেকেন্ডে বা ইনোটিফাইযুক্ত লিনাক্সে বলুন), যেমন আপনি কোনও স্ক্রিপ্ট লিখে থাকেন:

while :; do
  if [[ $(stat -c %s $FILE) -gt 10000 ]]; then
    # rotate the log
  fi
  sleep 1
done

ইনোটাইফাই সহ:

while :; do
  if inotifywait [some options] $FILE; then
    # check size and rotate the file
  fi
done

রিং ডেটা স্ট্রাকচার লগিংয়ের আসল উদাহরণ, আরআরডি টোল উল্লেখ করার জন্য +1।
Cory J

উদাহরণস্বরূপ ইনোটিফাইয়েট শেল কমান্ডের ব্যবহার দেখানোর জন্য ধন্যবাদ
পাচঙ্গ

4

আপনি ব্যবহার করতে পারেন multilog djb এর Daemontools থেকে। আপনি পাইপ আপনার লগ আউটপুট মধ্যে এটি। হ্যাঁ এটি লগ রোটেশন, তবে আবর্তনগুলি কেবলমাত্র:

ln current $tai64nlocaltimestamp

যে কোনও আধুনিক লিনাক্স ফাইল সিস্টেমে একটি সুপার ফাস্ট অপারেশন। আপনি কতগুলি লগ ফাইল চান তা নির্দিষ্ট করতে পারেন, কত বড় আপনি চান তা। 10 x 1024mb ফাইল তৈরি করুন এবং আপনার 1 জিবি রিং বাফার পাবেন।

দ্রষ্টব্য, যেহেতু স্বয়ংক্রিয় ঘূর্ণনের কারণে, এটি মাল্টলগ উদাহরণ অনুসারে একটি উত্স। তবে আপনি নেটকাট দিয়ে বা হাতে হাতে একটি সাধারণ মোড়কের লিখন লিখে কাজ করতে পারেন।


টিপ জন্য ধন্যবাদ! আমি অবশ্যই মাল্টলগ এ যাব।
পাচাঙ্গা

1

আপনি একটি ফিফো পাইপ তৈরি করতে পারেন এবং তারপরে এটি কোনও স্ক্রিপ্ট ব্যবহার করে পড়ুন যা কোনও ডাটাবেজে সন্নিবেশ করায়। যখন কাউন্টারটি 1,000 এ পৌঁছে যায় তখন ডাটাবেসে প্রবেশ করা আইডি নম্বরটি পুনরায় চালু করুন। অবশ্যই আকারের জন্য কাজ করবে না, তবে আপনি এটি উদাহরণ হিসাবে ব্যবহার করেছেন, তাই আমি ধরে নিচ্ছি এটি একটি তাত্ত্বিক প্রশ্ন।


1

আকর্ষণীয় প্রশ্ন; আপনি সাধারণত এটি ডিজাইন হিসাবে দেখেন না। আমার কাছে এমন একটি প্রোগ্রাম রয়েছে যা ইতিহাস রেকর্ড করার জন্য একটি চমকপ্রদ অনুরূপ কৌশল ব্যবহার করে তবে এটি বাইনারি বিন্যাস ব্যবহার করে। 'লগ ফাইল' এর চারটি অংশ রয়েছে, সবই একটি মেশিন-নিরপেক্ষ বিন্যাসে রেখে দেওয়া হয়েছে:

  1. ব্যবহৃত শিরোনামে জাদু নম্বর এবং সর্বাধিক (সর্বাধিক) সংখ্যার প্রবেশের সংখ্যা, পরবর্তী ইতিহাসের প্রবেশের ক্রম সংখ্যা, ব্যবহৃত তালিকায় প্রবেশের প্রকৃত সংখ্যা, বিনামূল্যে তালিকায় প্রবেশের প্রকৃত সংখ্যা রয়েছে , এবং ফাইলের দৈর্ঘ্য (যার প্রত্যেকটি 4 বাইট)।
  2. ব্যবহৃত তালিকা, প্রতিটি এন্ট্রি একটি অফসেট এবং একটি দৈর্ঘ্য দেয় (প্রতিটি প্রবেশের প্রতিটি অংশের জন্য 4 বাইট)।
  3. বিনামূল্যে তালিকা, ব্যবহৃত তালিকা এন্ট্রি অনুরূপ প্রতিটি এন্ট্রি।
  4. প্রধান ডেটা, প্রতিটি ইতিহাসের রেকর্ডে নাল টার্মিনেটর বাইট দ্বারা সমাপ্ত বাইটের সংমিশ্রিত সেট থাকে।

যখন একটি নতুন রেকর্ড বরাদ্দ করা হয়, যদি ফ্রি তালিকায় স্থান থাকে, তবে এটি সেখানে একটি এন্ট্রিটিকে ওভাররাইট করে (অগত্যা এটি সমস্ত ব্যবহার করে না - যে ক্ষেত্রে খণ্ডটি মুক্ত তালিকায় থাকে)। যখন ফ্রি তালিকায় কোনও স্থান নেই, তখন শেষে নতুন স্থান বরাদ্দ করা হয়। পুরানো রেকর্ডটি ঘোরার সময়, এর স্থানটি ফ্রি তালিকায় স্থানান্তরিত হয় এবং কোনও সংলগ্ন নিখরচায় রেকর্ডের সাথে মিলিত হয়। এটি এসকিউএল স্টেটমেন্টগুলি হ্যান্ডেল করার জন্য ডিজাইন করা হয়েছে যাতে রেকর্ডগুলি অনেক লাইনে ছড়িয়ে যায়। এই কোডটি একটি নির্দিষ্ট সংখ্যক রেকর্ডে কাজ করে। এটি প্রতি সেটের জন্য ফাইলের আকার সীমাবদ্ধ করে না (যদিও এটি এটি করা কঠিন হবে না)।

মূল কোড ইতিহাসের কোডটি দুটি ফাইলের মধ্যে রয়েছে, ইতিহাসের কোড এবং ইতিহাসের এইচএসএলসিএমডি প্রোগ্রামের উত্স থেকে পাওয়া যায় (আমার সংস্করণ, মাইক্রোসফ্টের নয়; মাইক্রোসফ্টের এক দশক বা তারও বেশি আগে আমার অস্তিত্ব ছিল), যা থেকে ডাউনলোড করা যেতে পারে আন্তর্জাতিক ইনফর্মিক্স ব্যবহারকারী গ্রুপের সফ্টওয়্যার সংরক্ষণাগার । এছাড়াও একটি হিস্ট্রি ফাইল ডাম্প প্রোগ্রাম (হিস্টডম্প.সি) এবং একটি ইতিহাস পরীক্ষক রয়েছে (হিস্টেস্ট.সি - এটি ইএসকিউএল / সি বলে দাবি করে তবে এটি সত্যই সি কোড; এটি যে সমর্থনকারী ফাংশন বলে তার মধ্যে কিছু ইনফর্মিক্স ইএসকিউএল / সি ব্যবহার করে) গ্রন্থাগার ফাংশন)। আপনি যদি ইনফর্মিক্স ইএসকিউএল / সি ব্যবহার না করে পরীক্ষা করতে চান তবে আমার সাথে যোগাযোগ করুন - আমার প্রোফাইল দেখুন। এটির নকশা মিলিয়িউর বাইরে হিস্টেস্ট সংকলন করার জন্য কিছু তুচ্ছ পরিবর্তন রয়েছে, এছাড়াও আপনার একটি মেকফাইল প্রয়োজন।


0

আমি আপনার প্রশ্নে pehrs 'মন্তব্য সাথে একমত। লগ ঘূর্ণন যে কঠিন নয়। আপনার লগ ফাইলটি পর্যায়ক্রমে আপনার লগ ফাইলটি পরীক্ষা করতে আপনি লোগ্রোটেট বা অন্য কোনও স্ক্রিপ্ট সেট আপ করতে পারেন, এমনকি আপনি যদি চান তবে প্রতি মিনিটেও প্রায়শই। এটি যখন আপনার ফাইলটি 1 গিগাবাইট আকারে পৌঁছেছে তা সনাক্ত করে, এটি কেবল একটি নাম পরিবর্তন করে, যা I / O এর পরে লাগে না। নাম পরিবর্তনের সময় প্রক্রিয়াটি লগ ফাইলটি লিখতে থাকে। লগ চক্রকার তারপর (আপনার ডেমন আপনার syslog- র ডেমন করার জন্য একটি hup পাঠাতে পারেন হয় , syslog- র মাধ্যমে লগ-ইন ডান? যদি তা না হয়, এটা hup সংকেত সমর্থন করা উচিত এটা ভালো করে লেখা যদি ...) এটা মূল ফাইল পাথ পুনরায় খুলতে আছে । এই মুহুর্তে এটি মূল পথে নতুন ফাইলে লেখা শুরু করবে এবং আপনি ঘোরানো সংস্করণ মুছতে পারেন।

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