我已经设置了 Sensu,API 和服务器在一个实例上运行,RabbitMQ 在另一个实例上运行。这对我们来说效果很好;但是,如果服务器或 API 与 RabbitMQ 的连接断开,Sensu 服务器就不会发送任何通知。No keep-alive sent from client in over 120 seconds
在这种情况下,我希望服务器为每个客户端发送通知。就我们目前的设置而言,如果 RabbitMQ 失败(或与它的连接失败),所有监控都会默默失败。
如何配置 Sensu 以在服务器或 API 进程与传输 (RabbitMQ) 失去连接时发送通知?一般来说,监控监控软件的最佳实践是什么?
答案1
我有一个类似的设置,在一个集群层上有 Sensu Server、API 和 Uchiwa、一个 RabbitMQ 节点集群以及一个 Redis 的主/从设置。
我的理解是,所有客户端消息都会进入队列进行处理。如果队列不可用,服务器进程无法到达队列,从而导致其客户端进程无法到达队列。
我解决这个问题的方法(这对于我的公司和环境的属性来说是有意义的)是通过拥有多个 Sensu 集群,每个环境一个,每个集群监视另一个 Redis 集群的关键可用性点,通常是通过访问相反集群的组件负载均衡器端点来实现的。
解决此问题的另一种方法是在 Sensu Server 实例上安装一个小型 RabbitMQ 实例,服务器进程知道该实例,并且 Sensu Server 的 Sensu Client 可以与之通信。(这取决于 Sensu Server 是否能够监视多个队列。)
我对我们的设置很满意,因为它为我们提供了合理的保证,即我们的监控系统至少与它所监控的内容一样可用。如果您有能力启动多个集群,我绝对会鼓励您这样做。(无论使用哪种监控产品,我都建议这样做。)如果没有,但您有工程时间,我建议调查是否可以添加额外的本地 RabbitMQ。