nginxログ分析統計スパイダー

オンライン統計スパイダー、分析ウェブサイトログ スパイダー統計 - Youcaiyouaiwang

どのように行われたか

実際、私の chatGPT が私のために書いてくれたもので、非常に強力です。

したがって、コードの説明はしません。コードを直接アップロードするだけです。ご質問がある場合は、AI に分析を手伝ってもらってください。AI を使用する必要がある場合は、この Web サイトの右上隅に AI ロボットがあります。クリックして使用します

コードのレンダリング

このコードは、typecho で新しい独立したページを作成するために使用されます。自分で選択できます。

<?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'); ?>

予防

このコードでは1行ずつ読み込んで処理する方法を実装していますが、nginxやPHPの設定によってファイルアップロードの上限が制限されるため、あまり変更しないことをお勧めします。これにより、ファイル全体を一度にメモリに読み込むことがなくなり、メモリ使用量が削減されます。

しかし、弊社の一般的なウェブサイトのログは非常に大きく、手動でファイルからコピーするのは非常に面倒なので、ログを分割し、今日のログを別のファイルに保存し、それが実行された場合にシェルスクリプトを作成しました。複数回実行すると、ファイルが存在するかどうかが検出されます。ファイルが存在する場合は、そのファイルを書き換えるだけです。

#!/bin/bash
log_path="/www/wwwlogs/www.xxxx.com.log"
log_dir="/www/wwwlogs"
current_date=$(date +%Y-%m-%d)

# 判断日志文件是否存在
if [ ! -f "$log_path" ]; then
    echo "日志文件不存在"
    exit 1
fi

# 判断备份目录是否存在,不存在则新建
if [ ! -d "$log_dir" ]; then
    mkdir -p $log_dir
fi

# 判断今天的日志文件是否已经存在,存在则将日志内容追加到已存在的文件中,不存在则新建文件
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

忘れずに場所を変更し、パゴダのスケジュールされたタスクを使用して、1 日に数回、または数時間に 1 回実行します。

道順を更新する

これは単なる実現であり、統計的手法ではクロールされたスパイダーの累積数のみを認識し、クロールされたページや個々のスパイダーの数などはカウントしません。これを含めてインターフェイスを美しくすることもできます。後で更新します。必要であれば。

おすすめ

転載: blog.csdn.net/qq_22163803/article/details/130707295