GNU/Linux >> Linux の 問題 >  >> Linux

dmesg タイムスタンプ付きの Linux Centos

解決策 1:

dmesg カーネル ログ リング バッファを読み取ります。タイムスタンプは行いません。すべきことは、そのバッファからカーネルログを取得してファイルに送信するように syslog を構成することです (そうするようにまだ設定されていない場合)。 CentOS 5.x のデフォルトの syslog 設定では、カーネル ログが /var/log/messages に送信されることに注意してください。

すべてのカーネル (dmesg) ログを /var/log/kern.log に送信したい場合 、デフォルトの syslog デーモンを使用して、次のような行を /etc/syslog.conf に追加します

kern.*                         /var/log/kern.log

解決策 2:

「dmesg/Kernel Ring Buffer のタイムスタンプを有効にする」という解決策があります

以下を追加できます:

printk.time=1

カーネルコマンドラインへ。

私に関しては、パペットを備えたすべてのマシンで rc.local に追加しました。私にとっては簡単です) :

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

解決策 3:

この簡単なスクリプトを書きました。はい、遅いです。より高速なものが必要な場合は、実際に 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

お役に立てば幸いです。 :)


Linux
  1. Linuxツール:dmesgを使用してメッセージを出力する

  2. CentOS7にLinuxカーネル5.0をインストールする方法

  3. Linux –異なるLinux / UNIXカーネルは交換可能ですか?

  1. -O3 最適化を使用した GNU/Linux のコンパイル

  2. QEMU を使用した Linux カーネルのデバッグ

  3. Linuxで正規表現を使用してファイルの名前を変更する

  1. Linuxカーネルをftraceで分析する

  2. Linuxdmesgコマンド-カーネルリングバッファの印刷

  3. デフォルトのカーネルを変更 (古いカーネルで起動) – CentOS/RHEL/OEL 7