Apache MySQLなどプロセスのメモリ使用量をZabbixで監視

メモリの監視は安定してシステムを運用するためには欠かすことができません。
またどのプロセスがメモリをどれくらい使用しているかがわかれば対策も取りやすくなります。

標準アイテム「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

自由な働き方をしてみませんか
フリーランスといえばクラウドソーシングが連想されると思います。 しかし「クラウドワークス」や「ランサーズ」調べてみると仕事の単価が非常に安い。 せっかく身につけた技術力がクラウドソーシングでは全く価値がなくなってしまいます。
そこでオススメなのがリモートワークの案件が多く翌月15日報酬として振り込まれる
クラウドテック」です。 掲載案件では平均月60万週3~4日勤務の案件が豊富生活スタイルに合わせた働き方を設計できます。 また福利厚生が充実し旅行、レジャー、家事代行、ヘビーシッター、健康診断など100種類以上を無料で使えます。
  • 97%がリモートのお仕事
  • 週4日、週3日OKのお仕事多数
  • 登録社数74万件業界トップクラス
  • 2〜4週間程度でお仕事決定
まだ間に合います。まずは無料登録をして自分に合った案件がないか確認してみてください。きっと魅力的な案件が見つかることでしょう。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする