LoginSignup
0
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になります
0
2
0

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
  3. You can use dark theme
What you can do with signing up
0
2