最近阿里云老是短信通知我,说我拿他们的服务器挖矿。我怀疑是服务器中病毒了,偷偷用postgres用户运行什么程序,导致CPU长时间处于高负载状态。一劳永逸的解决办法是把postgres从用户组中删掉,但这样postgres应用也不能用了。我想了一个办法,在prometheus里增加一条规则,在CPU高负载时邮件通知我,我来把进程kill掉。后来我又想到,可以直接在prometheus关联的alertmanager里加一个webhook,当规则触发,告警的同时去触发webhook,而webhook是我写的可以执行shell命令的,在服务器内运行的Web程序,可以kill此时CPU占用最高的那个进程。这么一来CPU长时间高负载就不需要我出手了,服务器会自己处理。我觉得这个过程挺有意思的,可以自己定义服务器出现异样时的后续行为。
在实际工作中,我们可以定义当告警出现时,去拉取系统的状态、应用的日志信息,保留“案发现场”,也可以写一些简单的措施,如重启应用,甚至可以用webhook将人事系统关联起来,当告警发生时,给值班的程序员自动提交加班申请(嘿嘿)……