如何監(jiān)控文件變化,比如密碼修改導(dǎo)致 shadow 文件變化
原始需求是如果系統(tǒng)的密碼被修改,或者創(chuàng)建了新用戶(hù),就告警出來(lái)。本質(zhì)上,只需要監(jiān)控?/etc/shadow
?文件變化即可。但是在指標(biāo)監(jiān)控體系里,這個(gè)事情就比較棘手,只能把文件的 mtime 作為指標(biāo)的值上報(bào),服務(wù)端再利用 delta 或者 increase 函數(shù)來(lái)判斷 mtime 是否發(fā)生了變化。告警出來(lái)的文本也會(huì)比較簡(jiǎn)陋。
使用 catpaw 搭配 FlashDuty 則可以很好的解決這個(gè)問(wèn)題。告警的樣例效果如下:

下面我們來(lái)看看如何實(shí)現(xiàn)。
1. 下載 catpaw
最新版本是 0.6.0,下載地址是:https://download.flashcat.cloud/catpaw-v0.6.0-linux-amd64.tar.gz?目前只提供了 linux-amd64 版本,如有其他版本的需求可以聯(lián)系我。
解壓后可以看到如下內(nèi)容:
其中?catpaw
?是二進(jìn)制文件,conf.d
?目錄下是各個(gè)插件的配置文件,scripts
?目錄下是一些示例腳本。
2. 主配置
這里最核心的配置是conf.d/config.toml
,需要配置一下 flashduty.url,您需要先注冊(cè)?FlashDuty,注冊(cè)地址是:https://console.flashcat.cloud/signup。
FlashDuty?是一個(gè)事件 OnCall 中心,可以聚合各類(lèi)監(jiān)控系統(tǒng)的事件,比如 Zabbix、Prometheus、PagerDuty、云監(jiān)控、藍(lán)鯨、Nightingale、Elastalert 等等,然后統(tǒng)一進(jìn)行事件聚合降噪、排班、認(rèn)領(lǐng)、升級(jí)等等。
注冊(cè) FlashDuty 之后,系統(tǒng)會(huì)引導(dǎo)你創(chuàng)建協(xié)作空間,您可以在協(xié)作空間下面添加一個(gè)自定義集成:

完事點(diǎn)擊這個(gè)自定義集成,就可以拿到 url 了,拷貝一下 url,貼到 catpaw 的?conf.d/config.toml
?中即可。
3. 配置插件
監(jiān)控文件變化,可以使用 filechange 插件,配置文件在?conf.d/p.filechange/filechange.toml
,樣例如下:
4. 啟動(dòng) catpaw
我這里簡(jiǎn)單測(cè)試,使用 nohup 啟動(dòng),如果生產(chǎn)環(huán)境,自然是建議 systemd 或者 supervisor 托管:
nohup ./catpaw &> stdout.log &
5. 測(cè)試
手工創(chuàng)建個(gè)用戶(hù),比如?sudo useradd qinxiaohui
,就會(huì)導(dǎo)致?/etc/shadow
?文件發(fā)生變化,進(jìn)而產(chǎn)生告警,大家可以自行嘗試一下。效果如下:

擴(kuò)展閱讀
太卷了,史上最簡(jiǎn)單的監(jiān)控系統(tǒng) catpaw 簡(jiǎn)介 (?https://flashcat.cloud/blog/catpaw-introduce/ )
告警聚合降噪、告警升級(jí)、告警認(rèn)領(lǐng)、告警排班、告警協(xié)同,一網(wǎng)打盡(?https://flashcat.cloud/blog/flashduty-intro/ )