参考文章
http://john88wang.blog.51cto.com/2165294/1579158
https://github.com/zbal/zabbix/blob/master/scripts/zabbix_php-apc_check.sh
1.监控原理
将APC源码包中的apc.php放到/usr/local/bin/ 目录下
添加nginx子配置文件php-apc_status.conf
server
{
listen 80;
server_name 127.0.0.1;
access_log off;
client_max_body_size 5m;
autoindex off;
location / {
root /usr/local/zabbix/bin/;
index index.php;
autoindex off;
}
location ~ \.php$ {
root /usr/local/zabbix/bin/;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
include fastcgi_params;
}
}
通过links这个命令可以在命令行下方为HTML页面
links 127.0.0.1/apc.php -dump 2>/dev/null
如果没有这个命令可以用过yum -y install links 安装
2.编写PHP-APC状态信息获取脚本
php-apc_status.sh
#!/bin/bash
#This script is used to get php apc cache data from apc.php page
#you need put nginx sub-config file php-apc_status.conf under conf/conf.d/ directory
apc_metric=$1
apc_status_url="http://127.0.0.1/apc.php"
apc_status_file=/tmp/php-apc_status.txt
/usr/bin/links $apc_status_url -dump 2>/dev/null > $apc_status_file
#echo $apc_status
#we need to convert GBytes,Mbytes,KBytes to Bytes
#echo "308.345 * 1024 * 1024 * 1024"|bc|cut -f1 -d.
#331082922721
convert_size() {
value=$1
unit=$2
echo $value | grep -E '^[0-9.]+$' 2>&1 > /dev/null
if [ $? -ne 0 ]; then
echo "$value is not number"
exit 1
fi
case $unit in
Bytes)
echo "$value"
;;
KBytes)
echo "$value * 1024" | bc | cut -f1 -d.
;;
MBytes)
echo "$value * 1024 * 1024" | bc | cut -f1 -d.
;;
GBytes)
echo "$value * 1024 * 1024 * 1024" | bc | cut -f1 -d.
;;
esac
}
#get apc metric data
case $apc_metric in
version)
cat $apc_status_file|grep "APC Version"|awk '{print $3}'
;;
cached_files_count)
cat $apc_status_file|grep "Cached Files"|head -1|awk '{print $3}'
;;
cached_files_size)
convert_size $(cat $apc_status_file|grep "Cached Files"|awk '{print $4 " " $5}'|sed -e 's/(//' -e 's/)//')
;;
hits)
cat $apc_status_file|grep "Hits"|head -1|awk '{print $2}'
;;
phits)
cat $apc_status_file|grep "Free"|head -1|awk '{print $7}'|sed -e 's/(//' -e s'/)//' -e 's/%//'
;;
misses)
cat $apc_status_file|grep "Misses"|head -1|awk '{print $2}'
;;
request_rate)
cat $apc_status_file|grep "Request Rate"|head -1|awk '{print $5}'
;;
hit_rate)
cat $apc_status_file|grep "Hit Rate"|head -1|awk '{print $3}'
;;
miss_rate)
cat $apc_status_file|grep "Miss Rate"|head -1| awk '{print $3}'
;;
insert_rate)
cat $apc_status_file|grep "Insert Rate"|head -1| awk '{print $3}'
;;
cache_full_count)
cat $apc_status_file|grep "Cache full count"|head -1|awk '{print $4}'
;;
shm_size)
#apc.shm_size can be 400M or 2G , convert M or G to Bytes
shm=$(cat $apc_status_file|grep "apc.shm_size"|head -1| awk '{print $2}')
if [ $(echo "$shm"|grep 'M$') ];then
size=$(echo $shm|sed 's/M//')
echo "$size * 1024 * 1024"|bc
elif [ $(echo "$shm"|grep 'G$') ];then
size=$(echo $shm|sed 's/G//')
echo "$size * 1024 * 1024 * 1024"|bc
fi
;;
mem_free)
convert_size $(cat $apc_status_file|grep "Free"|head -1|awk '{print $2 " " $3}')
;;
mem_used)
convert_size $(cat $apc_status_file|grep "Used"|head -1|awk '{print $2 " " $3}')
;;
mem_pused)
cat $apc_status_file|grep "Used"|head -1|awk '{print $4}'|sed -e 's/(//' -e 's/)//' -e 's/%//'
;;
fragmentation)
cat $apc_status_file|grep "Fragmentation:"|head -1|awk '{print $2}'|sed -e 's/%//'
;;
*)
echo "please input the right parameter"
;;
esac
3.添加zabbix 子配置文件php-apc_status_zabbix.conf
UserParameter=php-apc[*],/usr/local/zabbix/bin/php-apc_status.sh $1
4.创建zabbix的PHP-APC 模板
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。