nginx 日志分析统计蜘蛛

在线分析nginx日志

在线统计蜘蛛,分析网站日志 https://vip.lzzcc.cn/index.php/346.html

怎么完成的

其实是我的chatGPT帮我写的,十分的强大!
chatGPT写代码

所以我代码就不解释了,直接上代码,如果有问题请找AI帮忙分析,需要使用AI可以在本网站右上角找到AI机器人点击使用

代码呈现

<?php/** * 蜘蛛统计 * * @package custom */if (!defined(\'__TYPECHO_ROOT_DIR__\')) exit;$this->need(\'header.php\');?><title>在线网站日志分析-在线蜘蛛统计</title><meta name="description" content="这是一个方便统计网站蜘蛛的工具页面。上传日志文件后,可以快速显示各大搜索引擎蜘蛛的数量统计结果。"><div style="background-color: #ffffff; padding: 20px;">    <h1>蜘蛛统计分析工具</h1>    <form method="post" enctype="multipart/form-data">        <input type="file" name="logfile" />        <button type="submit">上传日志文件</button>    </form>    <?php    if (isset($_FILES[\'logfile\'])) {        $file = $_FILES[\'logfile\'];        if ($file[\'error\'] === 0) {            $pathinfo = pathinfo($file[\'name\']);            if (strtolower($pathinfo[\'extension\']) === \'log\') {                $handle = fopen($file[\'tmp_name\'], "r");                $count = [\'Baiduspider\' => 0, \'Googlebot\' => 0, \'bingbot\' => 0, \'Sogou\' => 0];                while (($line = fgets($handle)) !== false) {                    foreach ($count as $key => &$value) {                        if (stripos($line, $key) !== false) {                            $value++;                        }                    }                }                fclose($handle);                arsort($count);                $data = [];                foreach ($count as $key => $value) {                    $data[] = [$key, $value];                }                ?>                <div id="chart_div" style="width: 900px; height: 500px;"></div>                <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>                <script type="text/javascript">                    google.charts.load(\'current\', {\'packages\':[\'corechart\']});                    google.charts.setOnLoadCallback(drawChart);                    function drawChart() {                        var data = google.visualization.arrayToDataTable([                            [\'Browser\', \'Visits\'],                            <?php foreach ($data as $item) { ?>                                [\'<?php echo $item[0]; ?>\', <?php echo $item[1]; ?>],                            <?php } ?>                        ]);                        var options = {                            title: \'Spider Statistic\',                            pieHole: 0.4,                            colors: [\'#3366CC\', \'#DC3912\', \'#FF9900\', \'#109618\']                        };                        var chart = new google.visualization.PieChart(document.getElementById(\'chart_div\'));                        chart.draw(data, options);                    }                </script>                <?php            } else {                echo "<p>请上传.log格式的日志文件。</p>";            }        } else {            echo "<p>上传日志文件出错,请重新尝试。</p>";        }    }    ?></div><?php $this->need(\'footer.php\'); ?>

注意事项

文件上传最大限制会根据nginx或者PHP的配置所受到限制,建议不要改太大,虽然本代码中已经实现了使用逐行读取的方式进行处理。这样可以避免一次性将整个文件读入内存,从而减少内存占用
逐行读取,避免大量占用内存

而我们一般网站的日志都很大,去文件中手动复制出来又很麻烦,所以我写了一段shell脚本去分割日志,把今天的日志单独存在一个文件中,而且多次执行的话会检测文件是否存在,在的话就往里面重写就行了

#!/bin/bashlog_path="/www/wwwlogs/www.xxxx.com.log"log_dir="/www/wwwlogs"current_date=$(date +%Y-%m-%d)# 判断日志文件是否存在if [ ! -f "$log_path" ]; then    echo "日志文件不存在"    exit 1fi# 判断备份目录是否存在,不存在则新建if [ ! -d "$log_dir" ]; then    mkdir -p $log_dirfi# 判断今天的日志文件是否已经存在,存在则将日志内容追加到已存在的文件中,不存在则新建文件if [ -f "$log_dir/$current_date.log" ]; then    grep $(date +"%d/%b/%Y") $log_path >> "$log_dir/$current_date.log"else    grep $(date +"%d/%b/%Y") $log_path > "$log_dir/$current_date.log"fi

记得修改位置,然后使用宝塔的计划任务每天执行几次或者隔几小时执行一次即可

更新方向

这只是简单的实现了而已,还能美化界面,包括统计方式只实现了蜘蛛的累计抓取数量,没有统计抓的页面和有多少单独蜘蛛等等,后面有需要我会更新。

有问题及时联系站长,QQ:1240555208
更多优质资源在QQ群里,可以进群领取:467392290~
© 版权声明
THE END
点赞9 分享
及时反馈~ 抢沙发

请登录后发表评论

    暂无评论内容