Sentinela 是一個高度可配置的作業系統看門狗,它可以根據預先配置的規則採取行動。
最初的動機是建立一個守護程式來監視一組日誌文件,如果不存在任何活動,則關閉作業系統。這對於確保我的 ec2 實例在指定的空閒時間後關閉非常有用。
鑑於 Sentinela 的模組化特性,您還可以擴展以監控網路流量、進程、磁碟使用情況等,並執行任何操作,例如發送電子郵件、發送 SNMP 警報等。
Sentinela 使用config/sentinela.cfg
檔案進行配置,該檔案可讓您啟用將要執行的規則。
規則是在 python 程式碼中定義的,可以在rules/
目錄中找到。在大多數情況下,規則使用兩種不同類型的模組: * modules/monitors/
:每分鐘從資源讀取一次並儲存其狀態。需要時返回True
以觸發操作。 * modules/actions/
:操作將執行命令、發送電子郵件或您可以想像的任何其他 python 定義的程式碼。
要啟動 Sentinela,您需要運行: text sudo python sentinela.py
您可以透過讀取/var/log/sentinela.log
檔案來監視所有 Sentinela 操作。常規的哨兵日誌檔案如下所示:
[2013-03-29 11:41:20,440][INFO] 啟動成功 [2013-03-29 11:41:20,441][DEBUG]導入rules.apache_shutdown [2013-03-29 12:51:50,480][DEBUG] Sentinela 還活著 …… [2013-03-29 12:58:34,009][DEBUG] 將執行指令「shutdown now -h」。
建立您自己的規則很容易,假設我們要建立一個規則,當/var/log/apache2/access.log
日誌檔案在10 分鐘內處於非活動狀態時,將監視器的名稱列印到sentinela 的日誌檔案中。程式碼如下所示:
1:從modules.monitors.new_log_entries導入NewLogEntries 2:從modules.actions.debug_print導入DebugPrint 3: 4: apache_log = NewLogEntries('/var/log/apache2/access.log', 10) 5: debug_print = 偵錯列印() 6: 7: 8: def call_every_month(): 9: 如果 apache_log.call_every_month(): 10: debug_print.do(apache_log)
通用規則將有一個監視器和一個操作,在本例中為NewLogEntries
和DebugPrint
(第 1 行和第 2 行)。
它們都需要在模組層級實例化(第 4 行和第 5 行)以便能夠保持狀態。如果您在call_every_minute
內建立監視器或操作實例,則每次都會建立新實例,並且不會保留任何狀態。
監視器和操作可以有參數,在第 4 行中,我們看到NewLogEntries
監視器如何採用兩個參數:
True
需要定義call_every_minute
函數(第 8 行)才能使規則有效。這個函數,如名字所示,將被哨兵每分鐘呼叫一次。您可以定義要在此上下文中執行的任何操作,但我們決定呼叫監視器的call_every_minute
方法,並根據其傳回值以apache_log
實例作為參數呼叫該操作。
只有當作為參數傳遞的檔案在 10 分鐘內沒有任何新條目時, apache_log.call_every_minute()
才會傳回True
。
debug_print.do
將列印作為參數傳遞的監視器的名稱。
建立自己的規則後,您必須按照以下步驟執行它們:
.py
檔案複製到 Sentinela 安裝中的rules/
目錄config/sentinela.cfg
以包含您的規則名稱(不含副檔名)範例規則可以在此儲存庫的 sentinela/rules 目錄中找到。
為了在部署新規則之前對其進行測試,您可以按照以下步驟操作。
在 Sentinela 的問題追蹤器中報告您的問題和功能請求,我將非常樂意修復它們。