StaveNela是一种高度可配置的操作系统看门狗,它可以根据预先配置的规则采取行动。

sentinela的Python项目详细描述


哨兵

Build Status

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)

源代码分析

通用规则将有一个监视器和一个操作,在这种情况下 NewLogEntriesDebugPrint(第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中报告您的问题和功能请求,我将 非常乐意修理它们。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java例外。Lang.Stringindexoutofboundsexception索引超出范围(0)   java Spring引导Freemarker从2.2.0升级失败   重构Java反模式名称?包含对象的对象包含。。。等   用java处理JDBC可能出现的死锁的最佳方法   java无法访问主线程上的数据库,因为它可能会在很长一段时间内锁定UI   java如何将固定大小的画布包装在边框窗格中的滚动窗格居中?   java解析xsd文件后得到空结果   在html页面中表示XML文件的java   socketjava对象流   sql Java越界异常数据库   JavaJBoss7.1.1不会在Mavericks上启动   Twincat ADS事件驱动读取在一段时间后停止工作(Java)   java MyBatis使用生成的ID插入所有   Mojave上缺少MacOS Java控制面板   JavaGuice:如果多次注入相同的依赖项,是否注入了该依赖项的相同实例?