如何使用 Sensu 监控 Python 脚本?

How to monitor Python scripts using Sensu?

我想使用 Sensu Core 来监控 python 脚本,但我不知道该怎么做。

根据 Sensu 文档,这需要 Sensu Checks。在提供的示例中 ruby 脚本检查 chef-client 是 运行:

#!/usr/bin/env ruby

# get the current list of processes
processes = `ps aux`

# determine if the chef-client process is running
running = processes.lines.detect do |process|
  process.include?('chef-client')
end

# return appropriate check output and exit status code
if running
  puts 'OK - Chef client process is running'
  exit 0
else
  puts 'WARNING - Chef client process is NOT running'
  exit 1
end

如何针对特定脚本而非应用程序实施此类检查?也就是说,我将如何监控特定的 python 脚本(例如 test.py)而不是一般的 python?

更一般地说,上面的脚本在 运行ning 进程中搜索字符串 chef-client。您可以将其替换为任何其他字符串,例如 test.py,它将检测任何程序 运行ning 的名称中是否包含 test.py。 (如果你运行程序有python test.py,你可能需要匹配子字符串test.py,我不知道ruby。)

我建议你也使用 Sensu process check plugin for a more general function which includes more customization. Look at the other sensu plugins

为什么不监视脚本的预期结果或操作而不是进程本身。通常,我们将设置检查以监视端点,在 Web 应用程序的情况下,或观察到的行为(例如数据库中的消息),以确定应用程序是否 运行。

有时 进程 在技术上是 运行 但由于错误条件或资源问题而不是任何东西。监控预期结果是比观察过程更好的选择。

所以,我已经 运行 为我的 AWS Linux 客户成功地编写了一些 python 脚本,这是我的检查定义的一个很好的例子:

{
 "checks": {
"check-rds-limit": {
  "interval": 86400, 
  "command": "/etc/sensu/plugins/rds-limit-check.py",
  "contacts": [
    "cloud-ops"
  ],
  "occurrences": 1,   
  "subscribers": [
    "cloud-ops-subscription"
  ], 
  "handlers": [
    "email",
    "slack"
  ]
}
  }
}

您的 python 插件可以从定义 shebang 路径开始:

#!/usr/bin/env python
import sys
...
...
//<code condition for warning>
sys.exit(1)
//<code condition for critical>
sys.exit(2)
//<code condition where everything is fine>
sys.exit(0)