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 的问题跟踪器中报告您的问题和功能请求,我将非常乐意修复它们。