시스템 로그를 살펴봅시다

시스템로그는 시스템 활동상황을 기록해 놓은 것입니다.
/var/log/*에 저장되며…
중요한 로그로서는 dmesg, syslog, boot.log, kern.log등이 있습니다.

[b:3pstbpq7]gnome-system-log를 실행하면… 시스템로그 목록이 나오고 이것을 볼 수 있습니다.
[/b:3pstbpq7]
그런데… dmesg의 경우 시간을 날짜형식으로 기록하지 않고, timestamp로 기록합니다.
시스템이 시작된 시점을 기준으로 얼마나 지났느냐로 기록하는 것이죠.
그리고, syslog나 kern.log등에 기록된 날짜는 Jan 7 12:24:30 이런 형식으로 기록되서, 눈에 잘 안들어 옵니다.

그래서, timestamp와 영문형식의 날짜형식을 바꿔서 출력해주는 스크립트를 짜봤습니다.
또한, syslog와 kern.log에서는 로그서비스 시작 시점을 표시하기 위해 구분선을 넣어, 구분하기 쉽게 만들었습니다.

[code:3pstbpq7]
#!/usr/bin/perl
use strict;
use warnings;

my $important = "=" x 80 . "\n";

my $now = time();

my $uptime = cat /proc/uptime | cut -d"." -f1;
my $t_now = $now - $uptime;

my $file=$ARGV[0];
$file="/var/log/syslog" if not $file;
$_=$file;
my $log_type=$1 if s,^./?(syslog|kern|dmesg).,$file,gx;

print "=" x 30 ." ". $file . " " . "=" x 30 . "\n";

my $f;
my $is_backup=0;
if (m/gz/) {
$is_backup=1;
open $f,"-|","zcat $file" or die("cannot open file:$file");
}
else {
open $f,"<",$file or die("cannot open file:$file");
}

while (<$f>) {
chomp;
SWITCH: {
$log_type eq "syslog" && do {
s/^/"$important"/eg if m/rsyslog/ and m/(signal 15|start)/;
reformat_logtime();
last SWITCH;
};
$log_type eq "kern" && do {
s/^/"$important"/eg if m,(Kernel logging (proc) stopped|/proc/kmsg started).$,;
reformat_logtime();
last SWITCH;
};
$log_type eq "dmesg" && do {
reformat_timestamp();
last SWITCH;
}
}

print $_&#46;&quot;\n&quot;;

}
close $f;

sub timestamp2date {
my @time = localtime $_[0];
$time[4]+=1; # Adjust Month
$time[5]+=1900; # Adjust Year
return sprintf ‘%4i-%02i-%02i %02i:%02i:%02i’, @time[reverse 0..5];
}

sub reformat_timestamp {
return if $is_backup;
if( m/^([^&#91;])&#91;\s(\d+)&#46;(\d+)&#93;(.*)$/gi ) {
# now - uptime + sekunden
my $t_time = timestamp2date( $t_now + $2 );
$_=$1."[$t_time] $4";
}
}

sub reformat_logtime {
if ( m/([a-zA-z]{3} {1,2}\d{1,2} \d{2}:\d{2}:\d{2}) / ) {
my $s=$1;
my $d=date +&quot;%F %T&quot; -d &quot;$s&quot;;
chomp($d);
s/$s/"[$d]" /eg;
}
}

[/code:3pstbpq7]

만드신후 chmod +x 스크립트파일명 하여 실행권한을 부여하세요.
사용법은
logformat.pl /var/log/syslog.1 이런 형태로 사용하시면 됩니다.

그리고, 부팅정보를 보여주는 boot-info-script라는 프로그램도 유용합니다.

[code:3pstbpq7]sudo apt-get install boot-info-script

sudo boot_info_script[/code:3pstbpq7]

오… 강의 꾸준히 올려주시네요. 도움이 많이 됩니다.