前几天奇点的服务器因为 CPU 100% 而被限频了,导致最近服务器的响应非常慢。我一直没有在服务器上做一些最基本的监控服务「比如连续多久 CPU 使用过 95% 就发一封警报邮件」之类的,这次事件让我决定做起这件事情。
我采用的是 Monit 这个开源工具,结合 Mailgun 邮件发送服务。下面就是一份最基础的安装+配置向导。
图为过去一周我的 Server 的 CPU 占用:为何是 25%?因为我用的主机会将长期 CPU 使用超过 100% 的 Server 限制频率为原有的 1/4。
安装 Monit
首先在 Ubuntu 上安装 Monit:
sudo apt install monit
安装成功后,编辑配置文件:
sudo vim /etc/monit/monitrc
我主要做了以下改动,是满足我需求的最小的改动。
配置 Monit
以 60 秒为间隔做一次检查
默认是 120 秒,但我觉得 60 秒这个整数比较好😄
set daemon 60
设置 Mail Server 和目标邮箱
我用的是 Mailgun 的免费档服务,足够给我发 Alert 邮件了。
set mailserver smtp.mailgun.org port 587
username postmaster@HOST password "YOURPASSWORD"
using TLSV1 with timeout 30 seconds
set alert TARGET@HOST
设置 Alert 触发条件
主要条件是:15分钟的负载超过 4,或者 10 次检查的 CPU 使用率超过 95%(也就是 10 分钟),或者内存占用超过 75%,或者 SWAP 使用超过 50%。
这些触发条件设置的相对极端一点,但不一定适合未来,所以要不断调整。
check system $HOST
if loadavg (15min) > 4 then alert
if cpu usage > 95% for 10 cycles then alert
if memory usage > 75% then alert
if swap usage > 50% then alert
如果要监控磁盘剩余空间,那么可以用这个:
check filesystem rootfs with path /dev/hda1
if space usage > 80% for 5 times within 15 cycles then alert
if space usage > 90% for 5 cycles then exec '/try/to/free/the/space'
使用 Monit
配置完成后,在终端重启 Monit,如果一切顺利的话,你就会立刻收到一封 Monti 启动的邮件,没错,默认的规则是会将 Monit 的关闭和启动都会发送邮件的。
sudo systemctl restart monit
如果没有收到邮件,那么一定是哪里配置出了问题,比如邮件服务出问题的话,你可以在 Log 里面看到「Relaying denied」之类的信息,总之查看 Log 即可:
sudo tail -f /var/log/monit.log
图为成功发送邮件的 Monit:
后记
作为一个业余的运维,这样的监控+警报已经能满足我这样单一 Server 的简单需求了,假如 Mailgun 之类的邮件服务已经注册好的话,整个设置也非常简单。
不知道读到最后的你一般采用什么样的方式来监控 Server?欢迎留言。
Prometheus & Grafana. 比較重量級了
谢谢,最近也了解到这个了,确实感觉很重量级,不过非常棒。
NewRelic 本來免費的第三方服務,也挺好用。不過現在新註冊的賬號都要收費才能監控 Server 了
以前写过性能监控和邮件报警的开源项目,可定时检查 CPU、内存、磁盘的使用,而且是跑在docker里的。当时研究这些东西的时候把 sar 啥的都看了一遍,最后发现还不如自己实现更简单。
邮件对Mailgun无爱,最简单的还是去调用SMTP。