monitでメモリとCPUのアラートがあがったときにプロセス一覧を記録する

monitでCPUの負荷やメモリの使用量で負荷があがったとき、一瞬で解決してしまい、何が理由だったかさっぱりわからないときがあります。そのため、記録するために細工をしてみました。

check system $HOST
  if loadavg (1min) > 4 then alert
  if loadavg (5min) > 2 then alert
  if cpu usage > 80% for 10 cycles then alert
  if memory usage > 75% then alert
  if swap usage > 25% then alert

おそらくデフォルトではこんな感じで、メールを受け取るしかないのですが、それだと負荷はわかっても理由がわかりません。

check system $HOST
  if loadavg (1min) > 4 then alert
  if loadavg (5min) > 2 then alert
  if cpu usage > 80% for 10 cycles then alert
  if cpu usage > 80% for 10 cycles then exec "/bin/bash -c 'ps aux --sort -%cpu | head -n 20 | logger -p syslog.info -t [monit]'"
  if memory usage > 75% then alert
  if memory usage > 75% then exec "/bin/bash -c 'ps aux --sort -rss | head -n 20 | logger -p syslog.info -t [monit]'"
  if swap usage > 25% then alert

こんな感じで、複数行書くことができるので、そこにsyslogにプロセス一覧を書き出すようにしてみました。

  PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
22184  5.9 17.3 2777156 1416240 ?     Sl   10:33   4:39 puma: cluster worker 4: 22168 [20201201013214]
22178  6.0 14.6 2514272 1198276 ?     Sl   10:33   4:43 puma: cluster worker 2: 22168 [20201201013214]
22171  2.7 13.6 2579376 1113352 ?     Sl   10:33   2:11 puma: cluster worker 0: 22168 [20201201013214]
22174  3.7 12.3 2251696 1010764 ?     Sl   10:33   2:57 puma: cluster worker 1: 22168 [20201201013214]
22190  3.1 10.0 1863200 824036 ?      Sl   10:33   2:27 puma: cluster worker 5: 22168 [20201201013214]
22181  3.9  6.9 1860052 567664 ?      Sl   10:33   3:05 puma: cluster worker 3: 22168 [20201201013214]
  270  0.0  3.4 507008 281108 ?       S<s  Nov12  12:07 /lib/systemd/systemd-journald
22168  0.0  0.2 101068 20488 ?        Sl   10:33   0:00 puma 4.3.6 (tcp://0.0.0.0:9292) [20201201013214]
25723  0.0  0.1  90364  9760 ?        S    11:51   0:00 smtpd -n smtp -t inet -u -c -o stress= -s 2
 6969  0.0  0.1 100840  8352 ?        Sl   Nov27   0:14 puma 4.3.6 (tcp://0.0.0.0:9293) [20201127004807]
14253  0.0  0.0 321264  7804 ?        S    Nov16   0:24 /usr/lib/postgresql/10/bin/postgres -D /var/lib/postgresql/10/main -c config_file=/etc/postgresql/10/m

24649  0.0  0.0  76644  7380 ?        Ss   11:31   0:00 /lib/systemd/systemd --user
24647  0.0  0.0 107988  7216 ?        Ss   11:31   0:00 sshd: rabbix [priv]
25728  0.0  0.0  89988  6344 ?        S    11:51   0:00 smtp -t unix -u -c
    1  0.0  0.0 225312  5588 ?        Ss   Nov12   2:53 /sbin/init
24726  0.0  0.0  23792  5164 pts/1    S+   11:31   0:00 -su
25726  0.0  0.0  73928  5128 ?        S    11:51   0:00 cleanup -z -t unix -u -c
24701  0.0  0.0  23660  5088 pts/1    Ss   11:31   0:00 -bash
25724  0.0  0.0  73820  4984 ?        S    11:51   0:00 proxymap -t unix -u

こんな感じで見られます。調査が楽ですね。