由於最近工作需要,研究了如何在本地獲得遠程伺服器上虛擬機器開機時間的擷取。
首先的思路是想用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是不會發生變化的 ,也就是虛擬機器的開機時間。
解決完一個問題的感覺非常好,這裡記錄一下過程,同時也希望能給其他人一些協助,如果有什麼不足之處也望大家指出,歡迎鮮花和磚頭!!!