服務器日誌查看,是開發人員和服務器運維人員在工作中經常會遇到的一件事情,只有一臺服務器時,比較好辦,直接登錄服務器使用tail -f file-path
命令就可以實時查看到日誌文件的輸出。當有負載的需要,服務器多了之後,就會比較麻煩,爲了查找一個問題的日誌可能需要登錄多臺服務器。今天給大家介紹一種藉助sshfs,非常簡單的日誌文件掛載方案,可以方便大家查看服務器日誌文件。
sshfs介紹
sshfs是基於fuse構建的ssh文件系統客戶端程序,通過它遠程主機的配置無需作任何改變,就可以透過SSH協議來掛載遠程文件系統了,非常方便及安全。
sshfs的安裝,在centOS中的安裝命令如下:
yum -y install sshfs
掛載
sshfs的遠程文件掛載,需要結合ssh免密碼登錄一起實施。假設現在有A、B、C三臺服務器的日誌,需要掛載到D服務器。首先需要將D服務器的公鑰寫入A、B、C三臺服務器。配置方法參見我之前的文章。
把遠程服務器的 /mydata/logs/
目錄下的所有文件,掛載到D服務器,在D服務器的/mydata/logs/
目錄下爲每個服務器建一個目錄。(ip_address_A代表A服務器的ip地址,需要自行替換)
//把A服務器的 /mydata/logs/ 目錄 掛載到 D服務器的 /mydata/logs/A/ 目錄 sshfs root@ip_address_A:/mydata/logs/ /mydata/logs/A/
其他兩臺服務器的掛載方法一樣。掛載成功後,可以使用 mount命令查看掛載情況:
mount -l
可以看到掛載的情況:
root@ip_address_A:/mydata/logs/on /mydata/logs/A type fuse.sshfs (rw,nosuid,nodev) root@ip_address_B:/mydata/logs/on /mydata/logs/B type fuse.sshfs (rw,nosuid,nodev) root@ip_address_C:/mydata/logs/on /mydata/logs/C type fuse.sshfs (rw,nosuid,nodev)
也可以使用df -h
命令查看磁盤的掛載情況。另外,想要開機自動掛載目錄,可以編輯/etc/fstab
文件,加入以下幾行:
sshfs#root@ip_address_A:/mydata/logs/ /mydata/logs/A fuse defaults,auto,allow_other 0 0 sshfs#root@ip_address_B:/mydata/logs/ /mydata/logs/B fuse defaults,auto,allow_other 0 0 sshfs#root@ip_address_C:/mydata/logs/ /mydata/logs/C fuse defaults,auto,allow_other 0 0
其中,allow_other
參數代表該設置對其他用戶也生效。也必須先把ssh自動登錄配置好了,讓root用戶能夠使用root身份登錄遠程主機。配置方法參見我之前的文章。
掛載成功後,就可以在服務器D直接查看所有服務器的日誌了,在D服務器的/mydata/logs/
目錄輸入以下命令。(假設A、B、C三臺服務器的/mydata/logs/
目錄下都有log.txt這個文件)
tail -f */log.txt
日誌的輸出中,會標出日誌是在哪臺服務器的,例如:
==> A/log.txt <== get log message from A
假如只想查看日誌中包含關鍵字 a b c
的日誌,可以這樣查看
tail -f */log.txt | grep 'a b c'
日誌的輸出會有一定的延時。 需要注意的是,取消掛載時,不要直接刪除掛載目錄,請使用以下命令取消掛載:
fusermount -u /mydata/logs/A
或者直接使用umount
命令取消掛載。