StaveNela是一种高度可配置的操作系统看门狗,它可以根据预先配置的规则采取行动。
sentinela的Python项目详细描述
哨兵
sentinela是一个高度可配置的操作系统看门狗,它可以 根据预先配置的规则执行操作。
最初的动机是创建一个守护进程来监视一个集合 如果不存在任何活动,则关闭操作 系统。这对于确保我的ec2实例 在指定的空闲时间后关闭。
考虑到sentinela的模块化特性,您还可以将其扩展到monitor 网络流量、进程、磁盘使用率等,并运行任何操作,如 发送电子邮件、发送SNMP警报等。
基本配置
使用config/sentinela.cfg文件配置sentinela,该文件 允许您启用将要运行的规则。
规则在python代码中定义,并在^{tt2}中找到$ 目录。在大多数情况下,规则使用两种不同类型的模块:* modules/monitors/:每分钟从资源和存储读取一次 这是地位。需要时返回True以触发操作。* modules/actions/:操作将运行命令、发送电子邮件或任何 您可以想象的其他python定义的代码。
运行sentinela
要启动sentinela,您需要运行:text sudo python sentinela.py
你可以通过阅读 /var/log/sentinela.log文件。常规的sentinela日志文件看起来像 这个:
[2013-03-29 11:41:20,440][INFO] Successfully started [2013-03-29 11:41:20,441][DEBUG] Imported rules.apache_shutdown [2013-03-29 12:51:50,480][DEBUG] Sentinela is alive ... [2013-03-29 12:58:34,009][DEBUG] Going to execute command "shutdown now -h".
创建自己的规则
简介
创建自己的规则很容易,假设我们要创建一个规则 当 /var/log/apache2/access.loglogfile在10分钟内处于非活动状态。 代码将如下所示:
1: from modules.monitors.new_log_entries import NewLogEntries 2: from modules.actions.debug_print import DebugPrint 3: 4: apache_log = NewLogEntries('/var/log/apache2/access.log', 10) 5: debug_print = DebugPrint() 6: 7: 8: def call_every_minute(): 9: if apache_log.call_every_minute(): 10: debug_print.do(apache_log)
源代码分析
通用规则将有一个监视器和一个操作,在这种情况下 NewLogEntries和DebugPrint(第1行和第2行)。
它们都需要在模块级实例化(第4行和第5行) 为了能够保持状态。如果创建监视器或操作 call_every_minute中的实例新实例将是 每次创建时都不会保留任何状态。
监视器和操作可以有参数,在第4行中我们看到 NewLogEntriesmonitor有两个参数:
- 监视更改的日志文件
- 在返回True
需要为 规则有效。如名称所示,此函数将被调用 每分钟都有哨兵。您可以定义要在其中运行的任何操作 这个上下文,但是我们决定调用监视器的call_every_minute 方法并根据其返回值调用 apache_log实例作为参数。
apache_log.call_every_minute()仅当文件 作为参数传递的在10分钟内没有任何新项。
debug_print.do将打印作为 参数。
启用新规则
一旦您创建了自己的规则,就必须遵循以下步骤 运行它们:
- 将.py文件复制到sentinela安装中的rules/目录
- 更新config/sentinela.cfg以包含规则名(不带扩展名)
- 重新启动sentinela守护进程
示例规则
示例规则可以在 sentinela/rules 此存储库中的目录。
测试新规则
为了在部署新规则之前测试它们,您可以遵循 these steps。
报告错误
在Sentinela’s issue tracker中报告您的问题和功能请求,我将 非常乐意修理它们。