dmesg 타임 스탬프가있는 Linux Centos


15

타임 스탬프와 함께 Centos 5.x dmesg를 읽고 싶습니다. 어떻게해야합니까?


나중에 dmesg는 -T 플래그를 지원합니다. dmesg가 지원하는 경우 -T를 사용해보십시오.
ilansch

centos 7+ 지원dmesg -T
rogerdpack

답변:


12

dmesg커널 로그 링 버퍼를 읽습니다. 타임 스탬프를 수행하지 않습니다. syslog를 구성하여 해당 버퍼에서 커널 로그를 가져 와서 파일로 보냅니다 (아직 설정하지 않은 경우). /var/log/messages내가 기억하는 것처럼 기본 CentOS 5.x syslog 구성은 커널 로그를로 보냅니다 .

/var/log/kern.log기본 syslog 데몬을 사용하여 모든 커널 (dmesg) 로그를로 보내 려면 다음과 같은 줄을 추가하십시오./etc/syslog.conf

kern.*                         /var/log/kern.log

4
답변 감사합니다. CentOS 6을 실행하고있는 사람이라면 누구나 발견했습니다./etc/rsyslog.conf
Safado

그러나 CentOS (및 RHEL) 6.x에서는 기본 syslog 데몬을 이전 sysklogd에서 rsyslog로 변경했습니다. RHEL / CentOS 5.x (지원) 패키지로도 제공됩니다.
Christopher Cashell

1
글쎄, 내가 알아낼 것들의 목록에 이것을 가지고 있지만, 지금 당신은 나에게 인터넷 검색을 저장했다
Safado

8

"dmesg / 커널 링 버퍼에 타임 스탬프 활성화"솔루션이 있습니다.

다음을 추가 할 수 있습니다.

printk.time=1

커널 cmdline에.

필자는 꼭두각시가있는 모든 컴퓨터에서 rc.local에 추가했습니다. 나에게 더 쉽다) :

if test -f /sys/module/printk/parameters/time; then
   echo 1 > /sys/module/printk/parameters/time
fi

그것은 나를 위해 작동
c4f4t0r

5
사용하는 rc.local것은 이것을위한 추악한 해결책의 일종입니다 (사용 rc.local은 거의 모든 것에 대한 추악한 해결책입니다). 더 나은 솔루션 넣어하는 것 printk.time = 1으로 /etc/sysctl.conf또는 파일 /etc/sysctl.d/. 이것이이 파일들이 존재하는 이유입니다. 물건을 넣는 것은 rc.local결국 깨지기 쉽고, 복잡하고, 지저분하고 신뢰할 수없는 시작으로 당신을 떠날 것입니다.
Christopher Cashell 2016 년

@ChristopherCashell의 의견에 따르면이 질문에 대한 정답입니다. 실제 답변이 아니라는 것은 부끄러운 일입니다.
Petr

1

이 간단한 스크립트를 작성했습니다. 예, 느립니다. 더 빠른 것을 원한다면 실제로 perl, python 또는 다른 것에 스크립트를 작성하십시오. 이 간단한 스크립트를 통해 계산 방법을 익힐 수 있다고 확신합니다.

타임 스탬프에서. 다음에 각 줄에 등록 된 초 부분을 무시했습니다.

#!/bin/bash
localtime() {
 perl -e "print(localtime($1).\"\n\");";
}

upnow="$(cut -f1 -d"." /proc/uptime)"
upmmt="$(( $(date +%s) - ${upnow} ))"

dmesg | while read line; do
 timestamp="$(echo "${line}" | sed "s/^\[ *\([0-9]\+\).*/\1/g")"
 timestamp=$(( ${timestamp} + ${upmmt} ))
 echo "${line}" | sed "s/^[^]]\+]\(.*\)/$(localtime "${timestamp}") -\1/g"
done

도움이 되길 바랍니다. :)


0

행이 "["로 시작하지 않는 경우 스크립트 수정

#!/bin/bash
localtime() {
 perl -e "print(localtime($1).\"\n\");";
}

upnow=$(cut -f1 -d"." /proc/uptime)
upmmt=$(( $(date +%s) - ${upnow} ))

dmesg \
| while read LINE; do
    if [ "$(echo ${LINE} | egrep -v "^\[")" == "" ] ; then
        timestamp=$(echo "${LINE}" | sed "s/^\[ *\([0-9]\+\).*/\1/g")
        timestamp=$(( ${timestamp} + ${upmmt} ))
        echo "${LINE}" | sed "s/^[^]]\+]\(.*\)/$(localtime "${timestamp}") -\1/g"
    else
        echo "${LINE}"
    fi
done

0

이것은 Plutoid의 제안에 대한 업데이트로 타임 스탬프에서 선행 공백을 제거합니다.

dmesg|perl -ne 'BEGIN{$a= time()- qx!cat /proc/uptime!};s/( *)(\d+)\.\d+/localtime($2 + $a)/e; print $_;' 
  • perl -n은 표준 입력을 읽고 변수 $ _를 읽는 방법입니다.
  • 그런 다음 바디 (BEGIN 섹션이 아님)가 각 라인에 대해 한 번씩 실행됩니다.
  • BEGIN은 {}의 코드를 한 번 실행합니다.
  • $ a는 신기원 이후의 dmesg의 시작입니다 (초)
  • s / ... 명령은 $ _의 값을 가져와 타임 스탬프의 \ s * ##### .. ##### 부분을 dmesg 오프셋의 "localtime"버전 ($ 1)으로 대체합니다. 시스템 시작 시간 ($ a)
  • print $ a는 "부팅 후 초"시간 소인으로 대체 된 로케일 친화적 시간 소인으로 dmesg를 인쇄합니다.

1
그리고 원래 답변과 마찬가지로 설명이 필요합니다. 게시물을 편집하고 분류하여 단계별로 진행할 수 있습니까?
Cory Knutson

-1

아래와 같이 작은 펄 스크립트. 일반적인 방법이며 저자는 아닙니다.

dmesg|perl -ne 'BEGIN{$a= time()- qx!cat /proc/uptime!};s/(\d+)\.\d+/localtime($1 + $a)/e; print $_;'
  • perl -n 표준 입력을 읽고 변수 $ _로 읽는 방법입니다.
  • 그런 다음 바디 (BEGIN 섹션이 아님)가 각 라인에 대해 한 번씩 실행됩니다.
  • BEGIN은 {}의 코드를 한 번 실행합니다.
  • $ a는 시대 이후 dmesg의 시작입니다
  • s / ... 명령은 $ _의 값을 가져와 타임 스탬프의 #####. ###### 부분을 시스템 시작에 추가 된 dmesg 오프셋의 "localtime"버전 ($ 1)으로 대체합니다. 시간 ($ a)
  • print $ a는 "부팅 후 초"시간 소인으로 대체 된 로케일 친화적 시간 소인으로 dmesg를 인쇄합니다.

1
이 답변에는 좀 더 설명이 필요합니다.
kasperd

@kasperd 의미는 다음과 같습니다.-perl -n 표준 입력을 읽고 변수 $ _를 읽는 방법입니다. 그런 다음 바디 (BEGIN 섹션이 아님)가 각 라인에 대해 한 번씩 실행됩니다. -BEGIN은 {}의 코드를 한 번 실행합니다. $ a는 신기원 이후 dmesg의 시작입니다.이 s/...명령은 $ _의 값을 가져와 타임 스탬프의 #####. ###### 부분을 dmesg 오프셋의 "localtime"버전 ($ 1으로 대체 함) )를 시스템 시작 시간 ($ a)에 추가했습니다. - print $a"부팅 후 초"시간 소인으로 대체 된 로케일 친화적 시간 소인으로 dmesg를 인쇄합니다.
dadinck
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.