inotify事件監控工具

2022-08-27 18:51:27 字數 3976 閱讀 8647

inotify事件監控工具

inotify是一種非同步的檔案系統事件監控機制軟體,通過inotify可以監控檔案系統中新增,刪除,修改,移動等各種事件,利用這個核心介面,第三方軟體就可以監控檔案系統性檔案的各種變化情況。

inotify的軟體版本

(1)inotify-tools

(2)sersync

(3)lsyncd

其中sersync版本軟體是rsync與inotify的結合版本

雲yum倉庫安裝

(1)先檢視wget軟體包是否安裝,若沒有則yum安裝wget

# yum -y install wget

(2)# wget -o /etc/yum.repos.d/epel.repo

(3)# yum -y clean all

(4)# yum makecache

inotify安裝步驟

# yum -y install inotify-tools

# which inotifywait

inotifywait引數

含義說明

-r --recursive

遞迴查詢目錄

-q --quiet

列印很少的資訊,僅僅列印監控事件的資訊

-m,--monitor

始終保持事件監聽狀態

--exclude

排除檔案或目錄時,不區分大小寫。

--timefmt

指定時間輸出的格式

--format

列印使用指定的輸出類似格式字串

-e,--event

通過此引數可以指定需要監控的事件,如下乙個列表所示

-e :--event的各種事件含義

events

含義access

檔案或目錄被讀取

modify

檔案或目錄內容被修改

attrib

檔案或目錄屬性被改變

close

檔案或目錄封閉,無論讀/寫模式

open

檔案或目錄被開啟

moved_to

檔案或目錄被移動至另外乙個目錄

move

檔案或目錄被移動到另乙個目錄或從另乙個目錄移動至當前目錄

create

檔案或目錄被建立在當前目錄

delete

檔案或目錄被刪除

umount

檔案系統被解除安裝

人工測試監控事件

開啟兩個視窗

測試create(創新事件)

# inotifywait -mrq --timefmt '%y %m %d %h %m' --format '%t %w %f' -e create /backup

-mrq:-m 進行不間斷持續監聽

-q 只輸入簡短資訊

-r 遞迴監控整個目錄包括子目錄

--timefmt 『』 指定輸出的時間格式

「%y %m %d %h %m」----「年 月 日 小時 分鐘」

--format 『』 輸出的不僅是時間,還有路徑,會按照指定的格式輸出變化的路徑

「%t %w %f」-----「時間 路徑 檔名」

-e 指定監控事件型別,「以create建立事件為例」

/backup 監控的目錄

%w%f 表達的是路徑+檔名,也就是絕對路徑;

若管道符給rsync,就可以實時傳送建立事件

測試delete(刪除事件)

# inotifywait -mrq --timefmt '%y %m %d %h %m' --format '%t %w %f' -e delete /backup

當刪除指定目錄的檔案時,delete事件有更新跟蹤

測試close_write(寫關閉事件)

當在指定目錄中,寫入檔案資訊或建立檔案預備寫入資訊時,寫關閉時間會更新資訊,記錄情況。通常監控「echo」、「touch」、「vim」命令。

# inotifywait -mrq --timefmt '%y %m %d %h %m' --format '%t %w %f' -e close_write /backup

測試moved_to(移動事件)

# inotifywait -mrq --timefmt '%y %m %d %h %m' --format '%t %w %f' -e moved_to /backup

編寫inotify實時監控指令碼

將inotify實時監控放在後台(在命令後面加「&」)

# inotifywait -mrq --timefmt '%y %m %d %h %m' --format '%t %w %f' -e moved_to /backup &

# backup_server=備份伺服器的ip位址

inotify絕對路徑 -mrq --format 『%w%f』 -e create,close_write,delete /data | while read line

關鍵引數調整

在/proc/sys/fs/inotify目錄下有三個檔案,對inotify機制有一定的限制

(1)max_user_watches:設定inotifywait或inotifywatch命令可以監視的檔案數量(單程序)

(2)max_user_instances:設定每個使用者可以執行的inotifywait或inotifywatch命令的程序數

(3)max_queued_events:設定inotify例項事件(event)佇列可容納的事件數量。

inotify優點及缺點

(1)優點

監控檔案系統事件變化,通過同步工具實現實時資料同步。

(2)缺點

a. 併發如果大於200個檔案(10-100k),同步就會有延遲

b. 我們前面寫的指令碼,每次都是全部推送一次,但確實是增量的。也可以只同步變化的檔案,不變化的不理。

c. 監控到事件後,呼叫rsync同步是單程序的,而sersync為多程序同步。

sersync功能多:(inotify+rsync命令)

1)支援通過配置檔案管理

2)真正的守護程序socket

3)可以對失敗檔案定時重傳(定時任務功能)

4)第三方的http介面(例如:更新cdn快取)

5)預設多程序rsync同步

1)inotify(sersync)+

rsync,是檔案級別的。

2)drbd檔案系統級別,檔案系統級別,基於block塊同步,缺點:備節點資料不可用

3)第三方軟體的同步功能:mysql同步(主從複製),oracle,mongodb

4)程式雙寫,直接寫兩台伺服器。

5)利用產品業務邏輯解決(讀寫分離,備份讀不到,讀主)

架構解析:

nfs的單主雙寫模式(當讀取壓力大時使用該架構,但為單點、不可擴容)

使用者上傳的、附件儲存在主nfs中,但是主nfs通過rsync+inotify進行實時同步,同步兩個完全一樣的作為備份:nfs備份1、nfs備份2;同步的目的在於web伺服器讀取資料nfs備份中上傳過來的資料

web伺服器將讀取的壓力不再給主nfs,而是均衡負載到nfs備份1、nfs備份2上。這樣。寫入的壓力給了主nfs,讀取的壓力在nfs備份上,這種方法稱為讀寫分離,可以提高nfs效能(通常,網際網路20%的壓力在寫入,80%的壓力在讀取,相當於多台nfs分擔壓力)。

nfs的雙主雙寫模式(當寫入壓力大時使用該架構)

nfs的雙主雙寫模式(當寫入壓力大時使用該架構)

假設,web伺服器的掛載目錄都有兩個共享目錄(乙個為/backup1,、另乙個為/backup2),把ip1的主nfs伺服器掛載到/backup1上,把ip2的主nfs伺服器掛載到/backup2上,每台web伺服器都將nfs儲存掛載到不同的共享目錄上。開發預設,不論還是附件都先通過/backup1目錄中讀取,若/backup1中沒有讀取到,就去/backup2中讀取,若都為讀取到目標資料,則不存在該目標資料。通常,用來緩解nfs的寫入壓力。

inotify非同步檔案實時監控

inotify是linux核心提供的一組系統呼叫,它可以監控檔案系統操作,比如檔案或者目錄的建立 讀取 寫入 許可權修改和刪除等。inotify使用也很簡單,使用inotify init建立乙個控制代碼,然後通過inotify add watch inotify rm watch增加 刪除對檔案和目...

inotify監控軟體 實時同步

建立乙個檔案描述符,附加乙個或多個監視器 乙個監視器 是乙個路徑和一組事件 然後使用 read 方法從描述符獲取事件。確認epel源可以使用 yum y install inotify tools usr bin inotifywait 監控資料變化命令 預設監控一次 語法結構 inotify 引數...

基於inotify的檔案監控方案

最近在做乙個linux上的檔案監控程式,2.6核心提供了inotify機制,這僅僅是個機制,任何策略都必須自己實現,這一點從inotify不提供遞迴介面就可以看出來,如果我實時監控到目錄被建立,那麼馬上將這個新目錄加入監控表,這個想法是最初的想法,也是最直接的想法,可是仔細推敲一下就會發現這個實現有...