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

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

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

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

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

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

1
mkdir -p /srv/www/vhosts/ipcount

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

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

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

1
cp lighttpd20180313backup.conf lighttpd.conf

修改配置文件

1
vi /etc/lighttpd/lighttpd.conf

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

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

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

1
2
3
4
5
6
7
8
9
拓展内容: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是否正确,避免重启失败影响线上业务:
重要:重启前验证配置文件是否正确!!

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

lighttpd重新启动

1
systemctl restart lighttpd

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

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

测试下虚拟主机是否工作

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

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

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

二 shell脚本

1
2
3
4
5
6
7
8
#!/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为例
新建脚本

1
touch /tools/ServerIPcount.sh

编辑内容

1
vi /tools/ServerIPcount.sh

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

1
chmod +x /tools/ServerIPcount.sh

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

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

返回数据示例:

三 php 读取json信息

1
2
3
4
5
6
7
8
9
10
<?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);
?>

值返回

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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;
原文链接:https://xiaohost.com/10742.html,转载请注明出处。
0

评论0

请先