本文目錄
Wazuh 叢集有時候會遇到這種狀況:某個 worker 節點已經移除、甚至整台重灌了,事後被問「這台 node2 以前到底有沒有加入過叢集?」。設定目錄已經被清掉,能拿來證明的就只剩下記錄檔與資料庫了。
這篇整理幾個查詢方法,從最直接的叢集記錄開始,一路到 agent 的節點歸屬紀錄。
查詢叢集記錄
Wazuh 叢集的連線紀錄會寫在 master 節點的記錄裡。最簡單的方法是一行指令遞迴整個記錄目錄,包含已經輪替封存的年月子目錄:
grep -rHi "node2" /var/ossec/logs/
-r:遞迴所有子目錄-H:印出命中的檔名,方便看是哪一天的記錄-i:不分大小寫
叢集相關的訊息集中在 /var/ossec/logs/cluster.log,只想查叢集記錄的話可以縮小範圍:
grep -i "node2" /var/ossec/logs/cluster.log
命中的話,就代表 node2 曾經連上過 master,記錄裡會有它連線、同步的時間。
已經輪替的舊記錄會依年月壓縮存放在 /var/ossec/logs/ 底下的子目錄,壓縮檔要改用 zgrep:
find /var/ossec/logs/ -name "*.gz" -exec zgrep -Hi "node2" {} +
注意:Wazuh 的記錄會依設定輪替並清除舊檔,如果時間已經很久,記錄可能早就被清掉了,這時就要靠下面的 agent 歸屬紀錄佐證。
查詢 agent 的節點歸屬
如果記錄已經清掉,剩下的間接證據是 agent 的歸屬紀錄:曾經連到 node2 的 agent,會留下它所連接的節點名稱。
叢集還在運作時,用官方的 cluster_control 查最方便,它會列出每個 agent 連在哪個節點:
/var/ossec/bin/cluster_control -a
順便確認目前叢集裡有哪些節點:
/var/ossec/bin/cluster_control -l
如果要查歷史資料,可以直接查 master 上的全域資料庫,找出節點名稱是 node2 的 agent:
sqlite3 /var/ossec/queue/db/global.db \
"SELECT id, name, node_name FROM agent WHERE node_name LIKE '%node2%';"
注意:直接查資料庫請只做查詢,不要修改任何內容,避免影響 Wazuh 的運作。執行前也可以先把 global.db 複製一份出來查。
查詢順序建議
- 先跑
grep -rHi,通常就有答案了 - 沒有命中的話,用
zgrep查已經壓縮的舊記錄 - 記錄都清掉了,再查 agent 的節點歸屬紀錄
結論
節點移除之後,設定目錄是最先消失的,但記錄與資料庫通常還會留一段時間。這類「事後追查」的需求,最好的做法其實是平常就把 Wazuh 自己的記錄也送到 Graylog 這類集中記錄平台保存,就不用擔心記錄被輪替清掉、找不到證據了。
參考資料
- Wazuh 官方文件:Wazuh server cluster
https://documentation.wazuh.com/current/user-manual/manager/wazuh-server-cluster.html - Wazuh 官方文件:cluster_control
https://documentation.wazuh.com/current/user-manual/reference/tools/cluster-control.html - Wazuh 官方文件:cluster 設定參考
https://documentation.wazuh.com/current/user-manual/reference/ossec-conf/cluster.html



