php怎么监控varnish缓存服务器状态?

发布时间:2021-01-15编辑:脚本学堂
有关php监控varnish缓存服务器状态的一段代码,varnish作为前端缓存服务器,对于实时状态的监控很有必要,这里分享一段php实现的状态监控代码。

varnish和网站部署在同一台服务器上时,随时登录服务器查看varnish的命中率是件奢侈的事,可以参考本文给出的php代码,用网页查看varnish命中率。

系统:centos 5.x
软件:varnish-3.0.x

注意,3.0以下的版本可以通过Socket连接到Varnish管理端口,通过stat命令查看,3.0以上没有stat命令,只能通过以下方法解决了。

例子:
 

复制代码 代码示例:
<?php
$outfile=shell_exec("/usr/bin/varnishstat -x");
$xml=simplexml_load_string($outfile);
echo $xml->getName() . "<br />";
foreach($xml->children() as $child)
{
//$tmpName="";
foreach($child->children() as $subChild)
{
if ($subChild->getName() =="name" )
 {
$tmpName=$subChild;
}
elseif ($subChild->getName() =="value" )
{
if ($tmpName!="")
{
 $arys["$tmpName"]=$subChild;
 $tmpName="";
}
}
else
 {
continue;
}
}
}
function byteReduce($bytes)
{
if ($bytes>1099511627776)
{
return round($bytes/1099511627776)."TB";
}
else if ($bytes > 1073741824)
{
return round($bytes/1073741824)."GB";
}
else if ($bytes>1048576)
{
return round($bytes/1048576)."MB";
}
else if ($bytes>1024)
{
return round($bytes/1024)."KB";
}
else
{
return $bytes."B";
}
}
echo "client_conn: ".$arys["client_conn"] . "<br />";
echo "client_req: ".$arys["client_req"] . "<br />";
echo "cache_hit: ".$arys["cache_hit"] . "<br />";
echo "cache_miss: ".$arys["cache_miss"] . "<br />";
echo "Cache hit rate: ".round(($arys["cache_hit"]/$arys["client_req"])*100)." % <br/>";
echo "LRU nuked objects: ".$arys[n_lru_nuked]."<br/>";
echo " ".byteReduce($arys["s_bodybytes"]+$arys["s_hdrbytes"])." Acc Content (".byteReduce($arys["s_hdrbytes"])." header ".byteReduce($arys["s_bodybytes"])." Body)";
?>

效果,如下图:
php监控varnish缓存服务器状态

备注,为了查看实时情况,可以在在监控页加个html定时刷新,可以随时查看varnish缓存服务器状态。