首页 » Linux »

简单API方式实现监控lighttpd服务器当前IP数等,并以json数据返回给PHP调用

某个网站的附件服务器是采用lighttpd,
想实现客户端根据服务器当前的连接及数进行分流

刚开始思路是基于snmp,获取IP数,但是snmp经常超时

所以换个思路,弄一个api,返回json数据方便调用:
1 lighttpd服务器绑定一个端口到存放json文件的目录
2 写个shell脚本用corntab执行定时任务,每5分钟收集一次TCP的连接信息
3 shell脚本将获取到的数据写入虚拟主机目录下的json文件
4 客户端需要分流时,去请求这个地址的文件,获取数据信息进行处理,实现分流

由于lighttpd附件服务器已经在线,就不写怎么安装了,参照我以前的文章

一 配置虚拟机
新建一个目录放文件

mkdir -p /srv/www/vhosts/ipcount

修改主配置文件
先备份一个配置文件:

cd /etc/lighttpd/
cp -a lighttpd.conf lighttpd20180313backup.conf

如果修改后错误,快速用备份的配置还原:

cp lighttpd20180313backup.conf lighttpd.conf

修改配置文件

vi /etc/lighttpd/lighttpd.conf

按键盘shift + G vi光标跳转到配置文件末尾(顺便说下跳转到配置起始点命令为在非insert模式下按gg)
加入以下配置

#修改以下内容中的static.xxx.com:666为当前文件服务器实际绑定的域名及端口,也可以使用IP
$SERVER["socket"] == "static.xxx.com:666" {
server.document-root = "/srv/www/vhosts/ipcount/"
}

意思是服务器收到该端口的tcp请求,指定响应的根目录为/srv/www/vhosts/ipcount/

拓展内容:Lighttpd绑定一个端口一般都是下面的方法. 备忘一下
server.port = 80
如果需要绑定多个端口, 可以这样.
$SERVER["socket"] == "0.0.0.0:82" {
server.document-root = "/oldyzzt_s2/webroot/game/"
}
$SERVER["socket"] == "0.0.0.0:83" {
server.document-root = "/oldyzzt_s3/webroot/game/"
}

接着验证lighttpd.conf是否正确,避免重启失败影响线上业务:
重要:重启前验证配置文件是否正确!!

lighttpd -t -f /etc/lighttpd/lighttpd.conf

lighttpd重新启动

systemctl restart lighttpd

添加防火墙规则并重启防火墙

firewall-cmd --permanent --add-port=12316/tcp  && firewall-cmd --reload

测试下虚拟主机是否工作

touch /srv/www/vhosts/ipcount/index.html
echo 111 >> /srv/www/vhosts/ipcount/index.html

浏览器访问http://static.xxx.com:666/index.html
应该能显示111,如果需要启用SSL的话百度lighttpd的SSL配置

到这里,咱们的api接口第一步完成

二 shell脚本

#!/bin/bash
#统计服务器当前的established IP
establishedIP=`netstat -na|grep -i "80"|grep ESTABLISHED|wc -l`
TXpre=$(cat /proc/net/dev | grep eth0 | tr : " " | awk '{print $10}')
sleep 1
TXnext=$(cat /proc/net/dev | grep eth0 | tr : " " | awk '{print $10}')
bandwidth=$((${TXnext}-${TXpre}))
echo '{"establishedIP":"'$establishedIP'","bandwidth":"'$bandwidth'"}' > /srv/www/vhosts/ipcount/index.json

将该脚本命名为ServerIPcount.sh放入系统目录,这里以/tools为例
新建脚本

touch /tools/ServerIPcount.sh

编辑内容

vi /tools/ServerIPcount.sh

将上面脚本内容写入这个脚本,然后添加执行权

chmod +x /tools/ServerIPcount.sh

设定执行周期(参看http://xiaohost.com/1265.html)
每五分钟获取一次数据

crontab -e
*/5 * * * * /tools/ServerIPcount.sh

返回数据示例:
简单API方式实现监控lighttpd服务器当前IP数等,并以json数据返回给PHP调用

三 php 读取json信息

<?php 
// 从文件中读取数据到PHP变量 
$json_string = file_get_contents('http://static.xxx.com:666/index.json'); 
 
// 把JSON字符串转成PHP数组 
$data = json_decode($json_string, true); 
 
// 显示出来看看 
var_dump($data); 
?>

值返回
简单API方式实现监控lighttpd服务器当前IP数等,并以json数据返回给PHP调用

实现:某时间段内,连接数超过多少就替换下载服务器
先把时间段的code记录下,明天继续写
用php判断当前时间是否在每天的某一时间区域内?比如: 9:00-18:00

function get_curr_time_section() 

    $checkDayStr = date('Y-m-d ',time()); 
    $timeBegin1 = strtotime($checkDayStr."09:00".":00"); 
    $timeEnd1 = strtotime($checkDayStr."18:00".":00"); 
    
    $curr_time = time(); 
    
    if($curr_time >= $timeBegin1 && $curr_time <= $timeEnd1) 
    { 
        return 0; 
    } 
      
    return -1; 

 
    $result = get_curr_time_section(); 
    echo $result;

相关文章推荐

转载请保留,转载自:老牛博客
原文地址 http://xiaohost.com/2427.html

发表评论