我有超过100个使用apc运行php应用程序的web服务器实例,我们偶尔(整个车队每周一次)会看到其中一个缓存损坏,这会导致独特的错误日志消息。
一旦发生这种情况,应用程序就会在该节点上停止运行,路由到该节点的任何事务都将失败。
我已经围绕tail -F编写了一个简单的包装器,它可以在日志文件中出现模式时随时发现它,并(使用bash eval)评估shell命令的反应。我使用salt-stack中的salt-call命令来触发处理一个自定义模块,该模块关闭nginx服务器,预热(刷新)缓存,当然,还会重新启动web服务器。(实际上我有两种形式的包装器,bash和Python)。
这很好,而且事件的频率很高,不太可能成为问题。然而,我的老板非常合理地担心共模故障模式……正则表达式可能会同时出现在太多的日志中,并占据整个站点。
我的第一个想法是将我的salt-call封装在redis检查中(我们已经有了一个用于缓存和某些其他数据结构的Redis基础设施)。这将被实现为一个整数,并有一个过期时间。检查将调用INCR,检查结果,如果返回的值超过N(或者Redis服务器不可访问),则休眠。如果结果低于阈值,则将调度salt-call,并在服务器重新启动并运行后调用减量。( Redis密钥的到期可能会在一天甚至几个小时后消除任何过时的增量...我们的警报系统已经通知我们服务器宕机了,并且我们的响应时间对于这样的时间框架来说已经足够了)。
然而,我正在阅读有关Saltstack事件处理功能的文章,并且想知道是否使用它会更好。(优点是,节点既没有redis-cli命令工具,也没有Python Redis库,但显然,salt-call已经提供了必要的支持)。因此,使用Salt中的某些东西将最大限度地减少向这些系统添加额外的包和依赖项的需要。(或者,我可以将所有Redis处理编写为一个单独的PHP命令行实用程序,然后让我的shell脚本调用它)。
有没有编写简单的Saltstack模块的方法?这些文档似乎没有任何方向地深入到引用细节中。即使是一些关于要搜索哪些术语的建议也会有所帮助(因为它们对柱子、谷物、爪牙等术语的使用似乎有些不透明)。
发布于 2014-09-09 02:47:07
编写Salt模块的主要文档在这里:http://docs.saltstack.com/en/latest/ref/modules/index.html
Salt附带的许多模块可能会对灵感有所帮助。你可以在这里找到它们:https://github.com/saltstack/salt/tree/develop/salt/modules
要记住的一件事是,盐小黄人不会做任何事情,除非你让它做一些事情。因此,您可以创建一个模块来检查您提到的错误模式,但您需要将其添加到Salt Scheduler或cron中,以确保其频繁运行。
如果你需要更多帮助,你可以在IRC上的#salt on freenode中找到有帮助的人。
https://stackoverflow.com/questions/21794302
复制相似问题