获取dmesg 时间戳
最简单的一条命令搞定:
# dmesg -T | head -10
[Sat Nov 2 19:11:54 2019] Initializing cgroup subsys cpuset
[Sat Nov 2 19:11:54 2019] Initializing cgroup subsys cpu
[Sat Nov 2 19:11:54 2019] Initializing cgroup subsys cpuacct
[Sat Nov 2 19:11:54 2019] Linux version 3.10.0-957.10.1.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) ) #1 SMP Mon Mar 18 15:06:45 UTC 2019
[Sat Nov 2 19:11:54 2019] Command line: BOOT_IMAGE=/boot/vmlinuz-3.10.0-957.10.1.el7.x86_64 root=UUID=e508d892-2819-4968-944c-fe90bcf1345e ro console=tty0 console=ttyS0,115200n8 crashkernel=auto console=ttyS0,115200 LANG=en_US.UTF-8
[Sat Nov 2 19:11:54 2019] e820: BIOS-provided physical RAM map:
[Sat Nov 2 19:11:54 2019] BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable
[Sat Nov 2 19:11:54 2019] BIOS-e820: [mem 0x000000000009fc00-0x000000000009ffff] reserved
[Sat Nov 2 19:11:54 2019] BIOS-e820: [mem 0x00000000000f0000-0x00000000000fffff] reserved
[Sat Nov 2 19:11:54 2019] BIOS-e820: [mem 0x0000000000100000-0x00000000bffd9fff] usable
复杂一点的脚本转换
[84679.822059] Out of memory: Kill process 40170 (named) score 3 or sacrifice child
[84679.822108] Killed process 40170 (named) total-vm:1876408kB, anon-rss:214440kB, file-rss:0kB, shmem-rss:0kB
在dmes日志中,时间戳 84679.822059 表示为系统启动到事件发生的时间差,这个值可以转换为时间戳;
dmesg_time=`echo "$(date +%s) - $(cat /proc/uptime | cut -f 1 -d' ') + 84679.822059" | bc`
echo $dmesg_time
/proc/uptime 第一列表示为系统开机时间,根据这个值和当前时间可以获取到dmesg日志中时间发生的时间
时间戳的转换为时间
[root@site1 ~]# date -d "@${dmesg_time}" '+%Y-%m-%d %H:%M:%S'
2019-01-03 11:10:54