Correlating / var / log / * টাইমস্ট্যাম্পগুলি


20

/var/log/messages, /var/log/syslog, এবং কিছু অন্যান্য লগ ফাইল টাইমস্ট্যাম্প যা চাই, একটি পরম সময় রয়েছে ব্যবহার Jan 13 14:13:10

/var/log/Xorg.0.logএবং /var/log/dmesg, পাশাপাশি আউটপুট $ dmesg, দেখতে এমন একটি বিন্যাস ব্যবহার করুন

[50595.991610] malkovich: malkovich malkovich malkovich malkovich

আমি অনুমান করছি / সংগ্রহ করছি যে সংখ্যাগুলি শুরু থেকে সেকেন্ড এবং মাইক্রোসেকেন্ডগুলিকে উপস্থাপন করে।

যাইহোক, এই দুটি সেট টাইমস্ট্যাম্পগুলির সাথে সম্পর্ক স্থাপনের আমার প্রচেষ্টা (আউটপুটটি ব্যবহার করে uptime) প্রায় 5000 সেকেন্ডের একটি ত্রুটি পেয়েছিল।

এটি প্রায় আমার কম্পিউটারের জন্য স্থগিত করা সময়ের পরিমাণ।

ডেমেজ এবং জর্জ দ্বারা ব্যবহৃত সংখ্যাসূচক টাইমস্ট্যাম্পগুলি পরম টাইমস্ট্যাম্পগুলিতে ম্যাপ করার কি কোনও সুবিধাজনক উপায় আছে?

হালনাগাদ

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

ব্যবহার:

python syslogdriver.py /var/log/syslog | column -nts $'\t'

এক্সপারগেটেড আউটপুট (কলাম সংজ্ঞাগুলির জন্য নীচে দেখুন):

abs              abs_since_boot  rel_time      rel_offset  message
Jan 13 07:49:15  32842.1276569   32842.301498  0           malkovich malkovich

... rel_offsetসব হস্তক্ষেপ লাইনের জন্য 0 ...

Jan 13 09:55:14  40401.1276569   40401.306386  0           PM: Syncing filesystems ... done.
Jan 13 09:55:14  40401.1276569   40401.347469  0           PM: Preparing system for mem sleep
Jan 13 11:23:21  45688.1276569   40402.128198  -5280       Skipping EDID probe due to cached edid
Jan 13 11:23:21  45688.1276569   40402.729152  -5280       Freezing user space processes ... (elapsed 0.03 seconds) done.
Jan 13 11:23:21  45688.1276569   40402.760110  -5280       Freezing remaining freezable tasks ... (elapsed 0.01 seconds) done.
Jan 13 11:23:21  45688.1276569   40402.776102  -5280       PM: Entering mem sleep

... rel_offsetসমস্ত বাকী রেখার জন্য -5280 ...

Jan 13 11:23:21  45688.1276569   40403.149074  -5280       ACPI: Preparing to enter system sleep state S3
Jan 13 11:23:21  45688.1276569   40403.149477  -5280       PM: Saving platform NVS memory
Jan 13 11:23:21  45688.1276569   40403.149495  -5280       Disabling non-boot CPUs ...
Jan 13 11:23:21  45688.1276569   40403.149495  -5280       Back to C!
Jan 13 11:23:21  45688.1276569   40403.149495  -5280       PM: Restoring platform NVS memory
Jan 13 11:23:21  45688.1276569   40403.151034  -5280       ACPI: Waking up from system sleep state S3

... চূড়ান্ত লাইনগুলি আরও কিছুটা নিচে থেকে আউটপুটের শেষে খুব ভাল উপরে রয়েছে। তাদের মধ্যে কেউ কেউ dmesgস্থগিতাদেশ হওয়ার আগে সম্ভবত বিজ্ঞপ্তিযুক্ত বাফারকে লিখেছিলেন এবং কেবল syslogপরে প্রচার করা হয়েছিল। এটি ব্যাখ্যা করে যে কেন তাদের সকলেরই একই সিস্টগ টাইমস্ট্যাম্প রয়েছে।

কলাম সংজ্ঞা:

abs সিস্লোগ দ্বারা লগ করা সময়।

abs_since_bootসিস্টেম সূচনার পর থেকে সেকেন্ডে একই সময়, এর বিষয়বস্তু /proc/uptimeএবং মানটির উপর ভিত্তি করে time.time()

rel_time কার্নেলের টাইমস্ট্যাম্প।

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

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

পরবর্তী:

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


1
আমি মনে করি এটি একটি বাগ হিসাবে যোগ্যতা অর্জন করেছে এবং রিপোর্ট করা উচিত। বিটিডাব্লু সিসলগ-এনজি sortঅজানা স্ক্রিপ্টের জন্য বুদ্ধিমান টাইমস্ট্যাম্পগুলি ব্যবহার করে যা আপনি সাজিয়ে নিতে পারেন , বছর, সময় অঞ্চল ইত্যাদি +
স্ট্রিবিকা

@ স্ট্রিবিকা: এটি কি কার্নেল ইস্যু বা সিসলগ সমস্যা হবে? অথবা উভয়? সিসলগের মতো মনে হয় যে সিস্টেমটি স্থগিত করা হয়েছে তা অবহিত করা দরকার .. সম্ভবত এটি স্থগিত এবং পুনরায় শুরু করা হুক দিয়ে নিজেই এটি করতে পারে।
intuited

আমার কাছে মনে হচ্ছে কার্নেলটি ভুল হয়েছে। সিস্টেমটি স্থগিত করার সময় rel_Time মানগুলি "এড়িয়ে যায় না"। তবে আমি এটি আশ্চর্যজনক মনে করি যে স্থগিতাদেশটি সত্যই ঘটে যাওয়ার আগে স্কিউ শুরু হয়। মানগুলি ইতিমধ্যে ভুল Freezing user space processesযার জন্য পরিষ্কার হওয়ার আগে স্পষ্টভাবে করা হয়।
স্ট্রিবিকা

2
@ স্ট্রিবিকা: আমার এ সম্পর্কে আমার কাজ করার তত্ত্বটি হ'ল যে ঘটনাগুলি পুনরায় শুরু হওয়ার আগ পর্যন্ত সিসলগের বাইরে ধাক্কা দেওয়া হয় না, কারণ সিস্লোগ নিজেই স্থগিতের পরে ঘটেছিল।
intuited

@ স্ট্রিবিকা: এছাড়াও, আপনি কার্নেলটি "দোষে" থাকার বিষয়ে ঠিক বলেছেন: যেমনটি আমি বুঝতে পেরেছি (পুনর্বিবেচনা করার পরে), সিসলোগ ঠিক [12345.6789]..কার্নেলের দ্বারা নির্ধারিত পাঠ্যের (শুরু দিয়ে ) পরম টাইমস্ট্যাম্পের উপসর্গ রেখেছেন , সুতরাং এটি সঠিকভাবে কাজ করছে , আমার শেষ মন্তব্যে সম্বোধিত বিষয়গুলির সাপেক্ষে। আমি নিশ্চিত না যে এখানে কার্নেলটি আসলে কী করা উচিত; এটি সেই সূচনা-আপেক্ষিক টাইমস্ট্যাম্পগুলি বোঝাতে বোঝায় তার উপর নির্ভর করে। চলমান সময় (বুট হওয়ার পরে সময়ের বিপরীতে) কিছু প্রসঙ্গে অর্থবোধক হতে পারে। আমি অনুমান করি আদর্শভাবে সেই দুটি মানেরই একটি নির্ভরযোগ্য রেকর্ড থাকবে।
intuited

উত্তর:


4

আকর্ষণীয় সমস্যা, আমি কখনই এটি করার চেষ্টা করেছি তা নিশ্চিত নয়। তবে আপনি যে টাইমস্ট্যাম্পের কথা বলছেন তা আমি লক্ষ্য করেছি এবং বুটআপ হওয়ার পরে আমি এটি সর্বদা সেকেন্ড হতে বোধ করি।

আমার সিস্টেমে আমার সিস্টেমে আমার রয়েছে:

Jan 10 19:58:55 wdgitial kernel: [    0.000000] Initializing cgroup subsys cpuset
Jan 10 19:58:55 wdgitial kernel: [    0.000000] Initializing cgroup subsys cpu
Jan 10 19:58:55 wdgitial kernel: [    0.000000] Linux version 2.6.32-21-server (buildd@yellow) (gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5) ) #32-Ubuntu SMP Fri Apr 16     09:17:34 UTC 2010 (Ubuntu 2.6.32-21.32-server 2.6.32.11+drm33.2)
Jan 10 19:58:55 wdgitial kernel: [    0.000000] Command line:  root=/dev/xvda1 ro quiet splash

আমি কল্পনা করব এটি বেশিরভাগ লিনাক্স ডিস্ট্রো-এর মধ্যে যথেষ্ট সুসংগত কারণ এটি কার্নেলটি এতে স্টাফ করছে।

এবং এখানে টাইমস্ট্যাম্পের সাথে আমারও তারিখ রয়েছে।


3

আপনি এটি ব্যবহার করে দেখতে পারেন:

প্রথমে, ডেমেসগ ফাইলের টাইমস্ট্যাম্পটি পান (আমার ধারনাটি এটি ডেমেসগের সময় 0 হবে)। আপনি ব্যবহার করবেন

ls -l - টাইম-স্টাইল = +% s

/var/log$ ls -l --time-style=+%s dmesg
-rw-r----- 1 root adm 56181 1294941018 dmesg

আপনি সেকেন্ডগুলিকে মানব-পঠনযোগ্য তারিখে রূপান্তর করতে পারেন

perl -e 'print scalar localtime(1294941018)' 

সুতরাং একটি পঠনযোগ্য ইভেন্টের সময়টি দেখতে, ইভেন্ট থেকে কয়েক সেকেন্ডে dmesg এ জুড়ুন। ডেমসগ ইভেন্টটি 55.290387 সেকেন্ডের মধ্যে থাকলে 55 বা 55.290387 যুক্ত করুন:

perl -e 'print scalar localtime(1294953978 + 55)'

এপোকাল-শিকড়ের সেকেন্ডকে পঠনযোগ্য সময়ে রূপান্তর করার আরেকটি উপায় হ'ল প্রস্তাবিত তারিখ -d ব্যবহার করা। যদি আপনি 'তারিখ' -কে সরবরাহিত সময়ের প্রতিনিধিত্ব করতে বলে থাকেন তবে আপনি ইঙ্গিত দিতে পারবেন যে রূপান্তরিত হওয়ার সময়টি @ ব্যবহার করে সেকেন্ড-সেকেন্ডের মধ্যে।

date -d "@1294953978"

এটি আপনাকে আউটপুট হিসাবে "থু জানু 13 15:26:18 সিএসটি 2011" এর মতো কিছু দেয়।

তারিখ +% s
বর্তমান সময়টি সেকেন্ড-ই-পর্বের বিন্যাসে মুদ্রণ করবে।

শেল ম্যাথ কীভাবে করবেন তা আমি মনে করতে পারি না, তাই আমি সাধারণত পার্ল পদ্ধতিটি উপরের মতো ব্যবহার করি। :)


1
@jgbelacqua: আপনি চান date -d @$((1294953978 + 55)), অন্তত বাশ অধীনে। যাইহোক, কিছু কার্নেল টাইমস্ট্যাম্প স্কিউ হয়, যার মানে হল বার এই পদ্ধতি দ্বারা উত্পাদিত আগে হবে তাদের মধ্যে টাইমস্ট্যাম্প সংশ্লিষ্ট চেয়ে /var/log/syslog। দেখে মনে হচ্ছে এটি স্থগিত-থেকে-র‌্যামের ইভেন্টগুলির ফলস্বরূপ ঘটে, সম্ভবত হাইবারনেশন এবং সম্ভবত কিছু অন্যান্য জিনিস ছাড়াও, কারণ সেই সময়কালে কার্নেলের সময় বাড়ানো হয় না। আরও তথ্যের জন্য প্রশ্ন আপডেট দেখুন।
intuited

2

ডেমেসগ থেকে একটি তারিখ পর্যন্ত নম্বর ম্যাপ করার সহজতম উপায় হল dateপ্রোগ্রামটি ব্যবহার করা ।

date -d "-50595 seconds"

এই কমান্ডটি বর্তমান সময়ের বিয়োগ 50595 সেকেন্ডের জন্য তারিখটি প্রদর্শন করে।

থেকে man date:

-d, --date=STRING
       display time described by STRING, not `now'

সংখ্যাটি চালিত সময়ে সমান, বুট সময় থেকে সময় কেটে যায় না।


2

যেহেতু আপনি স্থগিত / পুনঃসূচনা চলাকালীন সময় স্কিউ পরিবর্তনের বিষয়টি লক্ষ্য করেছেন, আমি নোট করব এটি কমপক্ষে একটি জায়গায় নথিভুক্ত। Dmesg (1) ম্যান পৃষ্ঠাটি বলেছেন:

লগগুলির জন্য ব্যবহৃত সময় উত্সটি সিস্টেম সাসপেন্ড / পুনরায় চালু করার পরে আপডেট হয় না।

কার্নেলটি এই টাইমস্ট্যাম্পগুলি ওয়াল টাইমের সাথে সিঙ্ক করে রাখার কোনও উপায় খুঁজে পেল না।


1

দ্রুত, নোংরা, কাজ।

$ dmesg | grep 3w | perl /root/print_time_offset.pl

Script স্ক্রিপ্টের বিষয়বস্তু:

$ cat /root/print_time_offset.pl

#!/usr/bin/perl

$uptime = `cat /proc/uptime | awk '{print $1}';`;
$boot = time() - $uptime;
chomp $boot;
while (<STDIN>) {
        if ($_ =~ /^\[([\s\d\.]+)\]/) {
                $time_offset = $1;
        }
        $real_time = sprintf scalar localtime($boot + $time_offset);
        $_ =~ s/\[[\s\d\.]+\]/\[$real_time\]/;
        print $_;
}

নমুনা আউটপুট নিম্নরূপ:

[Mon Feb 21 23:06:33 2011] 3ware 9000 Storage Controller device driver for Linux v2.26.02.012.
[Mon Feb 21 23:06:33 2011] 3w-9xxx 0000:03:00.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
[Mon Feb 21 23:06:33 2011] 3w-9xxx 0000:03:00.0: setting latency timer to 64
[Mon Feb 21 23:06:33 2011] scsi4 : 3ware 9000 Storage Controller
[Mon Feb 21 23:06:33 2011] 3w-9xxx: scsi4: Found a 3ware 9000 Storage Controller at 0xfbcde000, IRQ: 16.
[Mon Feb 21 23:06:34 2011] 3w-9xxx: scsi4: Firmware FE9X 4.08.00.006, BIOS BE9X 4.08.00.001, Ports: 4.
[Mon Feb 21 23:06:35 2011] 3w-9xxx: scsi4: ERROR: (0x03:0x0101): Invalid command opcode:opcode=0x85.
[Mon Feb 21 23:06:35 2011] 3w-9xxx: scsi4: ERROR: (0x03:0x0101): Invalid command opcode:opcode=0x85.
[Mon Feb 21 23:06:35 2011] 3w-9xxx: scsi4: ERROR: (0x03:0x0101): Invalid command opcode:opcode=0x85.
[Mon Feb 21 23:06:35 2011] 3w-9xxx: scsi4: ERROR: (0x03:0x0101): Invalid command opcode:opcode=0x85.
[Mon Feb 21 23:06:35 2011] 3w-9xxx: scsi4: ERROR: (0x03:0x0101): Invalid command opcode:opcode=0x85.
[Mon Feb 21 23:06:35 2011] 3w-9xxx: scsi4: ERROR: (0x03:0x0101): Invalid command opcode:opcode=0x85.
[Sat Feb 26 02:01:01 2011] 3w-9xxx: scsi4: AEN: INFO (0x04:0x0029): Verify started:unit=0, subunit=1.
[Sat Feb 26 02:01:01 2011] 3w-9xxx: scsi4: AEN: INFO (0x04:0x0029): Verify started:unit=0, subunit=0.
[Sat Feb 26 16:49:13 2011] 3w-9xxx: scsi4: AEN: INFO (0x04:0x002B): Verify completed:unit=0, subunit=1.
[Sat Feb 26 17:07:19 2011] 3w-9xxx: scsi4: AEN: INFO (0x04:0x002B): Verify completed:unit=0, subunit=0.
[Sat Mar  5 02:00:16 2011] 3w-9xxx: scsi4: AEN: INFO (0x04:0x0029): Verify started:unit=0, subunit=1.
[Sat Mar  5 02:00:16 2011] 3w-9xxx: scsi4: AEN: INFO (0x04:0x0029): Verify started:unit=0, subunit=0.
[Sat Mar  5 18:48:57 2011] 3w-9xxx: scsi4: AEN: INFO (0x04:0x002B): Verify completed:unit=0, subunit=1.
[Sat Mar  5 19:05:17 2011] 3w-9xxx: scsi4: AEN: INFO (0x04:0x002B): Verify completed:unit=0, subunit=0.
[Sat Mar 12 02:00:30 2011] 3w-9xxx: scsi4: AEN: INFO (0x04:0x0029): Verify started:unit=0, subunit=1.
[Sat Mar 12 02:00:30 2011] 3w-9xxx: scsi4: AEN: INFO (0x04:0x0029): Verify started:unit=0, subunit=0.

1
আমি অনুমান করছি আপনি কেবল প্রশ্নের প্রথম অনুচ্ছেদ দুটি পড়ুন। আরও বিশদে এটি আবার পরীক্ষা করে দেখুন। অথবা, বিকল্পভাবে, আপনার স্ক্রিপ্টটি সদ্য লগ হওয়া বার্তাগুলির নিখুঁত টাইমস্ট্যাম্পগুলি সঠিকভাবে রিপোর্ট করেছে কিনা তা পরীক্ষা করার জন্য আপনার কম্পিউটারকে সাসপেন্ড করার এবং পরীক্ষা করার চেষ্টা করুন।
intuited
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.