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