ZabbixでCPUやメモリなどのリソーストリガーが発生した時にpsやtopの状態を記録するスクリプト

Zabbixで監視をしている時、リソーストリガーで障害メールを出すようにしていることが多いけれど、
実際午前3時に何のプロセスが動いているのかという事は、
ログを確認したり、実際に起きていないとわからないことのほうが多かった。

そこで、自動的にpsやtopの出力をファイルに書き出すようなスクリプトを作って、
リソーストリガーでメールと、このスクリプトを起動するようなアクションを組んでみた。という備忘録。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/bin/sh
 
TIME=`date +%Y%m%d-%H%M%S`
TXT_DIR='/tmp/zabbix_check_pstop'
UNAME_=`which uname`
OS_=`${UNAME_} -a`
 
# txt directory create
if [ ! -d ${TXT_DIR} ];then
  mkdir ${TXT_DIR}
fi
 
# ps output
/bin/ps auxww >> ${TXT_DIR}/ps_${TIME}.txt
 
# top output and erase
case ${OS_} in
  *FreeBSD*)
    #echo 'FreeBSD'
    /usr/bin/top -b -d 1 60 >> ${TXT_DIR}/top_${TIME}.txt
    # erase old files
    /usr/bin/find ${TXT_DIR} -mtime +30 -type f -exec rm -f {} \;
    ;;
  *)
    #echo 'default'
    /usr/bin/top -b -n 1 >> ${TXT_DIR}/top_${TIME}.txt
    # erase old files
    /usr/sbin/tmpwatch 720 ${TXT_DIR}
    ;;
esac

僕の関わっているシステムはRedhat系LinuxとFreeBSD混在環境が多いため、こんな感じで1つのスクリプトにまとめている。