国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Go造運維之文件系統(tǒng)監(jiān)控

IT那活兒 / 1072人閱讀
Go造運維之文件系統(tǒng)監(jiān)控


運維場景中,有時候需要對某個配置文件,或者某個目錄進行watch監(jiān)控,當(dāng)發(fā)生變更行為時候能獲取變更信息進行下一步處理。

 基于開源項目https://github.com/fsnotify/fsnotify我們可以實現(xiàn)對文件系統(tǒng)監(jiān)控功能。

fsnotify可以支持跨平臺文件系統(tǒng)watcher實現(xiàn),在不同平臺基于不同的調(diào)度器實現(xiàn),目前已經(jīng)實現(xiàn)的調(diào)度器有

Adapter

OS

Existing Implementation

inotify

Linux, Android

支持

kqueue

BSD, macOS, iOS*

支持

ReadDirectoryChangesW

Windows

支持


各個調(diào)度器實現(xiàn)的op
  • inotify

fsnotify Op

EVFILT_VNODE

Description

Delete

IN_DELETE_SELF

監(jiān)視文件/目錄本身被刪除

Rename

IN_MOVE_SELF

監(jiān)視文件/目錄本身被移動


IN_ACCESS

訪問(讀取)文件

Chmod

IN_ATTRIB

元數(shù)據(jù)更改了——權(quán)限、時間戳、擴展屬性、鏈接計數(shù)、UID或GID


IN_CLOSE_WRITE

打開待寫的文件已關(guān)閉


IN_CLOSE_NOWRITE

未打開待寫入的文件已關(guān)閉

Create

IN_CREATE

在watcher目錄中創(chuàng)建的文件/目錄


IN_MOVED_TO

當(dāng)文件重命名時,為包含新文件名的目錄生成


IN_OPEN

文件打開

Remove

IN_DELETE

從watch目錄中刪除文件/目錄

Write

IN_MODIFY

文件被修改

Rename

IN_MOVED_FROM

重命名文件時,為包含舊文件名的目錄生成

  • kqueue

fsnotify Op

EVFILT_VNODE

Description

Remove

NOTE_DELETE

對描述符所引用的文件調(diào)用unlink()系統(tǒng)調(diào)用

Write

NOTE_WRITE

描述符引用的文件發(fā)生了寫操作


NOTE_EXTEND

描述符引用的文件被擴展。(大小增加)

Chmod

NOTE_ATTRIB

描述符引用的文件的屬性發(fā)生了變化.


NOTE_LINK

文件上的鏈接數(shù)改變了

Rename

NOTE_RENAME

描述符引用的文件被重命名


NOTE_REVOKE

對文件的訪問被撤銷,或者底層文件系統(tǒng)被卸載

Create

N/A

fsnotify使用ioutil,ReadDir來模擬inotify檢測目錄監(jiān)視創(chuàng)建的文件的能力.


linux環(huán)境要實現(xiàn)對文件系統(tǒng)的watcher還需要確認以下linux內(nèi)核參數(shù)是否配置

# 通過sysctl -a 獲取內(nèi)核參數(shù), max_user_watches>=8192 ,max_queued_events>=16384fs.inotify.max_queued_events = 16384fs.inotify.max_user_instances = 128fs.inotify.max_user_watches = 8192
#也可以訪問 /proc/sys/fs/inotify 路徑查看


基于fsnotify可以實現(xiàn)的功能

  • 文件修改,刪除,讀取監(jiān)控

  • 目錄下新增,修改,刪除,讀取監(jiān)控

  • 結(jié)合4A/安全堡壘設(shè)備,告警平臺 實現(xiàn)對敏感文件/目錄操作的溯源,告警


附代碼實現(xiàn)對文件監(jiān)控

代碼實現(xiàn)了對文件進行watcher監(jiān)控,當(dāng)對文件繼續(xù)增刪改的時候會觸發(fā)響應(yīng)的events,實際環(huán)境中對這些觸發(fā)的events可將event信息傳遞給kafka這類消息隊列,本段代碼只是一個示例

另外當(dāng)文件被recreate時候,watcher會丟失文件描述符信息,需要在代碼層實現(xiàn)對文件的重新watcher。

package main
import (    "fmt"    "log"    "os"    "time"
    "github.com/fsnotify/fsnotify")
func main() {    monitorDir()}
func monitorDir() {    watcher, err := fsnotify.NewWatcher()
    if err != nil {        log.Fatal(err)    }
    defer watcher.Close()
    go func() {        for {            select {            case event := <-watcher.Events:                fmt.Printf("New watch File: %s ", event.Name)                switch event.Op {                case fsnotify.Create:                    log.Printf("Create File:%s ", event.Name)                case fsnotify.Write:                    log.Printf("Write File:%s ", event.Name)                case fsnotify.Remove, fsnotify.Rename:                    log.Printf("Remove or Delete File:%s ", event.Name)                    //重新添加watch log.Printf("Add Watch File:%s ", event.Name) // 文件被remove后會丟失描述符,需要重新watcher才能重新獲取 err = watcher.Add(event.Name)
if err != nil { log.Fatal(err) } case fsnotify.Chmod: log.Printf("Chmod File:%s ", event.Name) } case err := <-watcher.Errors: log.Println(err) } } }()
// log.Printf("Add New Watch File:%s") // 對/etc/shadow /etc/passwd 文件進行watcher fileArray := [2]string{"/etc/shadow", "/etc/passwd"}
for _, f := range fileArray { fmt.Printf("Add Watch FIle:%s ", f) watcher.Add(f) }
// waiting select {}}


END



文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/129968.html

相關(guān)文章

  • 高德地圖基于阿里云MaxCompute的最佳實踐

    摘要:目前,高德主要有地圖導(dǎo)航兩個產(chǎn)品,以及地圖,同時還開放了服務(wù),方便移動開發(fā)者更好地為用戶提供高質(zhì)量基于位置的服務(wù)。另外,高德經(jīng)常有大型活動,用戶訪問量會在某個階段激增,這時就需基于阿里云的彈性伸縮服務(wù),就能實現(xiàn)快速擴展的基礎(chǔ)設(shè)施。 摘要: 云計算帶來的變革不言而喻,作為一種新型的IT交付模式,切實為企業(yè)節(jié)省IT成本、加快IT與企業(yè)業(yè)務(wù)結(jié)合效率、提升創(chuàng)新能力、加強管理水平以及增強系統(tǒng)本身...

    masturbator 評論0 收藏0

發(fā)表評論

0條評論

IT那活兒

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<