LoginSignup
2

More than 3 years have passed since last update.

ZabbixAgentでプロセス単位のメモリ量を確認する

Last updated at Posted at 2019-05-21

OSのメモリは標準テンプレートで確認できますが、
たとえばphp-fpmのメモリ量だけ確認したいなど、プロセス単位で知りたいとき、
ZabbixでスクリプトとUserParameterを使って確認する方法です。

対象OS

Centos,Debian

カスタムスクリプト作成

※ZabbixAgentがインストールされているサーバで実施

スクリプト用ディレクトリ作成

sudo mkdir /etc/zabbix/script

スクリプト作成

sudo 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

権限変更

sudo chmod 655 /etc/zabbix/script/proc_mem.sh
sudo chmod 655 /etc/zabbix/script/proc_mem.sh

Zabbix Agent UserParameter追加

※ZabbixAgentがインストールされているサーバで実施

sudo vi /etc/zabbix/zabbix_agentd.conf 
*以下を追加 
UserParameter=script.proc.mem[*],/etc/zabbix/script/proc_mem.sh "$1" "$2" "$3" "$4" 

# zabbix agent再起動

Zabbix Serverで値がとれるか確認

※Zabbixサーバで実施

zabbix_get -s zabbix_agentのip -k 'script.proc.mem[プロセス名]'
(例)zabbix_get -s zabbix agentのip -k 'script.proc.mem[nginx]'
16940
値が帰ってくれば、成功。上記例では、nginxが使用しているメモリは16940KBになります

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
2