Sentinela是一个高度可配置的操作系统看门狗,可以根据预先配置的规则采取行动。
项目描述
Sentinela
Sentinela是一个高度可配置的操作系统看门狗,可以根据预先配置的规则采取行动。
最初的动机是创建一个守护进程,用于监控一组日志文件,如果没有任何活动,则关闭操作系统。这对于确保我的ec2实例在指定空闲时间后关闭非常有用。
鉴于Sentinela的模块化特性,您还可以将其扩展以监控网络流量、进程、磁盘使用情况等,并运行任何操作,例如发送电子邮件、发送SNMP警报等。
基本配置
Sentinela使用config/sentinela.cfg文件进行配置,该文件允许您启用将要运行的规则。
规则以Python代码定义,位于rules/目录中。在大多数情况下,规则使用两种不同类型的模块:* modules/monitors/:每分钟从资源读取一次并存储其状态。当需要时,返回True以触发操作。* modules/actions/:操作将运行命令、发送电子邮件或您能想象到的任何其他Python定义的代码。
运行Sentinela
要启动sentinela,您需要运行:text sudo python sentinela.py
您可以通过读取/var/log/sentinela.log文件来监控所有sentinela操作。一个常规的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.log 日志文件在10分钟内处于非活动状态时,将打印出监视器的名称到sentinela的日志文件中。代码如下所示
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行中,我们可以看到 NewLogEntries 监视器如何接受两个参数
要监视的日志文件
它将等待多少分钟的非活动状态,然后返回 True
需要定义 call_every_minute 函数(第8行)以使规则有效。正如其名称所示,此函数将由sentinela每分钟调用一次。您可以在该上下文中定义任何要运行的操作,但我们决定调用监视器的 call_every_minute 方法,并根据其返回值调用动作,并将 apache_log 实例作为参数。
apache_log.call_every_minute() 只有在10分钟内传递给参数的文件没有任何新条目时才会返回 True。
debug_print.do 将打印出作为参数传递的监视器的名称。
启用新规则
一旦您创建了您自己的规则,您必须按照以下步骤运行它们
将您的 .py 文件复制到sentinela安装目录中的 rules/ 目录
更新 config/sentinela.cfg 以包括您的规则名称(不带扩展名)
重新启动sentinela守护进程
示例规则
示例规则可以在本存储库中的 sentinela/rules 目录中找到。
测试新规则
在部署之前测试您的新规则,您可以按照 这些步骤 进行。
报告错误
在 Sentinela的问题跟踪器 中报告您的问题和功能请求,我将非常乐意修复它们。
项目详情
sentinela-0.2.2.tar.gz的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | d588d485f7e06ed0173193965473f8650948ec95b12563a26f3f7e804a0c4596 |
|
MD5 | 6049acc322d26d68e326b8623213d672 |
|
BLAKE2b-256 | 29f69113301db69606de68680dbf97bd200eec319cd95df885c2556aeff5a1f6 |