Sensu 说:当检查结果表明状态发生变化时,将创建 Sensu 事件。
是否可以创建不是检查结果的自定义事件?
Sensu API 没有创建事件的命令:https ://sensuapp.org/docs/latest/api-events 。
是的,但它会在 Uchiwa 中查看 - 尽管没有在 sensu 中定义。
请参阅此页面:https ://sensuapp.org/docs/0.16/external_result_input
在我运行的客户端(linux)上;
echo '{ "name": "my_check", "output": "some output", "status": 0 }' > /dev/tcp/localhost/3030
它神奇地出现在该客户的检查清单下的Uchiwa中。
然后我再次运行它,状态字段设置为 1:
echo '{ "name": "my_check", "output": "some output", "status": 1 }' > /dev/tcp/localhost/3030
而宇智波则将其作为警告显示。
我第三次以状态 2 运行它,正如预期的那样,它变成了关键。以状态 0 再次运行它会使其恢复正常。
因此,根据您想要实现的目标,您可以在客户端上的 PHP/Python/Whatever 中执行此操作,然后在您的 sensu 服务器上为它定义一个处理程序以执行您需要执行的任何操作。只需将处理程序名称添加到 JSON,以及您要传递的任何其他数据。
例如:
echo '{ "name": "trickyCheck", "output": "cake is delicious", "status": 0, "handler": "handlerOfDoom", "link": "http://cats.com" }' > /dev/tcp/localhost/3030
处理程序:
{
"handlers": {
"handlerOfDoom": {
"type": "pipe",
"command": "doSomethingCool.rb",
"severities": ["warning","critical"]
}
}
}
}
ruby 脚本将可以访问 JSON 中的所有内容;输出,链接,状态等......所以做你需要在那里做的事情。
要在 Windows 上使用 Sensu 实现相同的功能,可能需要另一个工具将数据发送到 localhost 上的 tcp 端口。 https://serverfault.com/questions/629682/send-text-string-to-a-socket-in-windows