メモリの監視は安定してシステムを運用するためには欠かすことができません。
またどのプロセスがメモリをどれくらい使用しているかがわかれば対策も取りやすくなります。
標準アイテム「proc.mem」を使用する
標準アイテムである「proc.mem」を使用するとプロセスの使用メモリが取得できます。しかし取得できるのは物理メモリではなく仮想メモリのサイズになります。実際取得してみると物理メモリの容量が2Gなのに対し4G以上の値が記録されていました。
UserParameterを使ってカスタムスクリプトを作成する
物理メモリを見るようにするにはUserParameterを使ってカスタムスクリプトを作成する必要があります。
まずは監視対象のサーバ(ZabbixAgent)にログインしスクリプトを作成します。
vi /etc/zabbix/script/proc_mem.sh
#!/bin/bash [ -z "$1" ] && COMM='.*' || COMM="$1" [ -z "$2" ] && EUSER='.*' || EUSER="$2" [ -z "$3" ] && MODE='sum' || MODE="$3" [ -z "$4" ] && ARGS_PATTERN='.*' || ARGS_PATTERN="$4" PLIST=$( ps -eo rss,comm,euser,args --no-headers ) case "${MODE}" in "min") echo "${PLIST}" \ | awk -v comm="^${COMM}$" -v euser="^${EUSER}$" -v args_pattern="${ARGS_PATTERN}" \ 'BEGIN {MIN=0;CNT=0}{ if (($2 ~ comm) && ($3 ~ euser)){ args=""; for(i=4;i<=NF;i++){args=args""$i}; if (args ~ args_pattern) { if (CNT == 0) { MIN=$1;CNT+=1 } else if ( MIN > $1 ) { MIN=$1 } } } } END {print MIN}' ;; "max") echo "${PLIST}" \ | awk -v comm="^${COMM}$" -v euser="^${EUSER}$" -v args_pattern="${ARGS_PATTERN}" \ 'BEGIN {MAX=0}{ if (($2 ~ comm) && ($3 ~ euser)){ args=""; for(i=4;i<=NF;i++){args=args""$i}; if (args ~ args_pattern) { if (MAX < $1) { MAX=$1 } } } } END {print MAX}' ;; "avg") echo "${PLIST}" \ | awk -v comm="^${COMM}$" -v euser="^${EUSER}$" -v args_pattern="${ARGS_PATTERN}" \ 'BEGIN {SUM=0;CNT=0}{ if (($2 ~ comm) && ($3 ~ euser)){ args=""; for(i=4;i<=NF;i++){args=args""$i}; if (args ~ args_pattern) { SUM+=$1;CNT+=1 } } } END {printf("%d\n", SUM/CNT)}' ;; "sum") echo "${PLIST}" \ | awk -v comm="^${COMM}$" -v euser="^${EUSER}$" -v args_pattern="${ARGS_PATTERN}" \ 'BEGIN {SUM=0}{ if (($2 ~ comm) && ($3 ~ euser)){ args=""; for(i=4;i<=NF;i++){args=args""$i}; if (args ~ args_pattern) { SUM+=$1 } } } END {print SUM}' ;; *) exit 1 ;; esac exit 0
作成したスクリプトの権限を変更します。
chmod 655 /etc/zabbix/script/proc_mem.sh
UserParameter追加
監視対象のサーバに先ほど作成したスクリプトをUserParameterに定義します。
vi /etc/zabbix/zabbix_agentd.conf
# UserParameter= UserParameter=script.proc.mem[*],/etc/zabbix/script/proc_mem.sh "$1" "$2" "$3" "$4"
エージェントを再起動します。
service zabbix-agent restart
Zabbixに設定
プロセス別メモリの値を取得するためにZabbixの管理画面からアイテムを追加します。
プロセス別メモリ監視のテンプレートを作成
いろいろなサーバに設定したいので専用のテンプレートを作成します。
アイテムを作成
先ほど作成したテンプレートを選択しアイテムを追加します。
まずはHTTP用
次にMySQL用
テンプレートを監視サーバに追加
作成したテンプレートを監視サーバに追加します。
設定→ホスト→監視サーバを選択→テンプレート→プロセス別メモリ監視を追加
取得した値を確認する
監視データ→最新データ→アプリケーション選択→プロセス別メモリを選択
参考サイト
https://chirashi-no-ura.tumblr.com/post/84839902327/zabbix%E3%81%A7%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E6%AF%8E%E3%81%AE%E3%83%A1%E3%83%A2%E3%83%AA%E4%BD%BF%E7%94%A8%E9%87%8F%E3%82%92%E7%9B%A3%E8%A6%96%E3%81%97%E3%81%9F%E3%81%84
https://qiita.com/y-araki-qiita/items/4b1ee91581a636e8563c
「クラウドテック」です。


- 97%がリモートのお仕事
- 週4日、週3日OKのお仕事多数
- 登録社数74万件業界トップクラス
- 2〜4週間程度でお仕事決定
