关于获取远程服务器上虚拟机的开机时间

由于最近工作需要,研究了如何在本地获得远程服务器上虚拟机开机时间的获取。
首先的思路是想用libvirt的virsh命令来取,但是看了一边它的API,没有相应的命令可用。
于是转换思路,考虑linux系统中会有记录系统文件的日志,打算从此处入手,发现存放记录系统时间的目录为/var/log/wtmp.用last -f wtmp 可以查看到时间如下:
    pts/9        :0.0             Wed Aug 10 13:43   still logged in   
    pts/4        :0.0             Wed Aug 10 13:30   still logged in   
    pts/8        :0.0             Wed Aug 10 11:08 - 13:28  (02:20)    
    pts/7        :0.0             Wed Aug 10 09:35 - 10:55  (01:19)    
    pts/6        :0.0             Wed Aug 10 09:32 - 12:46  (03:13)    
    pts/5        :0.0             Wed Aug 10 09:24 - 11:26  (02:02)    
    pts/0        :0.0             Wed Aug 10 09:09 - 14:49  (05:39)    
    tty1         :0               Wed Aug 10 08:59   still logged in   
 reboot system boot  2.6.35.6-45.fc14 Wed Aug 10 08:58 - 15:25  (06:26)    
    pts/6        :0.0             Tue Aug  9 19:17 - 19:42  (00:25)    
    pts/5        :0.0             Tue Aug  9 18:43 - 19:42  (00:59)    
    pts/0        :0.0             Tue Aug  9 18:28 - 19:42  (01:13)    
    tty1         :0               Tue Aug  9 18:28 - down   (01:14)    
reboot   system boot  2.6.35.6-45.fc14 Tue Aug  9 18:28 - 19:43  (01:15)    
    pts/0        :0.0             Tue Aug  9 18:10 - 18:21  (00:10)    
    tty1         :0               Tue Aug  9 18:10 - down   (00:11)    
reboot   system boot  2.6.35.6-45.fc14 Tue Aug  9 18:10 - 18:21  (00:11)    
    pts/10       :0.0             Tue Aug  9 16:22 - 17:56  (01:34)    
    pts/8        :0.0             Tue Aug  9 15:08 - 17:57  (02:48)    
    pts/7        :0.0             Tue Aug  9 15:07 - 15:08  (00:01)    
    pts/6        :0.0             Tue Aug  9 10:41 - 15:07  (04:25)    
    pts/5        :0.0             Tue Aug  9 10:41 - 10:41  (00:00)    
    pts/4        :0.0             Tue Aug  9 10:39 - 10:41  (00:01)    
    pts/0        :0.0             Tue Aug  9 09:24 - 17:57  (08:32)    

可以显示十几天的时间记录。但是这里有个问题,该文件下记录的所有时间里并不包括虚拟机的。不过问题已有端倪。这里pts从0开始,并且每记录一个设备时间就依次加一,可以看到上图pts并不是从0依次到最大,而是中间有间断,于是考虑到缺少的pts号即为虚拟机的pts。
继续用virsh命令来寻找相关帮助,通过virsh dumpxml vmname查看虚拟机配置的xml文件,终于发现存放记录虚拟机时间的文件位置,XML文档部分内容:
<console type='pty' tty='/dev/pts/1'>
      <source path='/dev/pts/1'/>
      <target type='serial' port='0'/>
      <alias name='serial0'/>
    </console>
tty的属性值即为所需,并且/dev/pts/* 随着虚拟机的开机而创建,关机而销毁。用stat 命令可以取得相关信息

[root@nicai pts]# stat 1
  File: `1'
  Size: 0             Blocks: 0          IO Block: 1024   character special file
Device: ah/10d    Inode: 4           Links: 1     Device type: 88,1
Access: (0620/crw--w----)  Uid: (  107/    qemu)   Gid: (    5/     tty)
Access: 2011-08-10 08:58:38.178742005 +0800
Modify: 2011-08-10 08:58:38.178742005 +0800
Change: 2011-08-10 08:58:38.178742005 +0800
 
stat -t  name 可以取到转换成秒的时间。到这里,又一个问题产成了,取到的时间并没有文件创建的时间,只有Access、Modify、Change三个时间,创建时间是linux系统里所未提供的,但是如果不对文件修改,创建时间=修改时间。通过在虚拟机上进行操作验证,发现/dev/pts/*的文件如果不是人为修改,它所记录的Modify是不会发生变化的 ,也就是虚拟机的开机时间。

解决完一个问题的感觉非常好,这里记录一下过程,同时也希望能给其他人一些帮助,如果有什么不足之处也望大家指出,欢迎鲜花和砖头!!!




你可能感兴趣的:(关于获取远程服务器上虚拟机的开机时间)