подскажите бесплатную программу для стат. анализа логов access_log_site

1 234
redizka
На сайте с 20.10.2013
Offline
99
#21
Ponyk #:
А что, запароленная папка webalizera не годится? 
Вроде у 70% хостов можно или даже по умолчанию стоит этот вебализер. 

Он показывает статистику запросов по ASN?

Genius Ideaing
На сайте с 12.02.2024
Offline
114
#22
redizka #:
Вчера набросал простенький анализатор логов, выложил пока на тестовый сервер
https://j37747836.myjino.ru/stat.html

Только надо подождать пока база ASN подгружается, она весит 100 мегабайт и может долго подгружаться.

товарищ, выйдете пожалуйста на связь..

я вам в ЛС написал... но вы не  отвечаете...

не успел ваш скрипт с бесплатного хостинга скачать...

а скрипт анализа логов отличный... работает очень быстро и делает массу полезных вещей...

может кто с форума успел скачать его скрипт?

поделитесь пожалуйста...

Дешёвый хостинг и домены: https://clck.ru/3FxXCa / Заработок в $$$ на трафике сайта! Не РСЯ/AdSense: https://clck.ru/3REcmY / Есть Идеи! Ищу людей для совместного воплощения этих идей в Интернете! Мой Telegram: https://clck.ru/396JFF
WS
На сайте с 01.11.2008
Offline
165
#23
Artisan #:

Обычно в таких темах на форуме страдалец получает кучу вредных советов, и запрещает что попало, в том числе роботов от искалок, которые проверяют клоакинг, и могут приходить с любых IP номеров, с любыми свойствами, а потом жалуется, что пропали посетители из искалок.

а что вы предлагаете  делать, когда к тебе ломятся с резидентных прокси (обычно просто взломанных устройств) со всего мира зловреды кроме как фильтрацию трафика? ерунду вы говорите товарищ, и гугл и яндекс сами выкладывают списки своих подсеток не просто так, а чтобы их учитывали в фильтрах, потому что это уже давно вошло в жизнь - не фильтруешься - становишься мальчиком для битья 

и не надо путать фильтрацию и проверку на роботность с клоакингом, тот же клауд ведь не считается клоакингом

AD
На сайте с 05.05.2007
Offline
258
#24
я по-старинке Notepadom, все ip по порядку выстраиваю и смотрю кто-что, если они - то сразу все ip типа 18.97.9.0/24  или 45.196.0.0/16  сразу всех в бан, если через пару минут нагрузка не спадет то продолжаю по списку.  В теории могу случайно кого-то нужного забанить, не проблема. В деньгах не особо потеряю, а ПС пофиг. Траф такой ничего не стоит.
Вячеслав Скоблей
На сайте с 31.07.2012
Offline
109
#25

Я использую такой простейший анализатор access.log файлов, для выявления проблемных UА і IP (более 200 запросов в минуту - можно уменьшить под себя). Может кому пригодиться.



Сохраняем файл, например, index.html и запускаем в своем браузере

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Log Dashboard (Drag & Drop)</title>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<style>
body {font-family:Arial; background:#f4f6f9; padding:20px;}
.dropzone {
    border:2px dashed #aaa;
    padding:40px;
    text-align:center;
    border-radius:12px;
    background:#fff;
    cursor:pointer;
    transition:0.3s;
}
.dropzone.dragover {
    border-color:#4361ee;
    background:#eef2ff;
}
.card {background:#fff; padding:20px; border-radius:12px; margin-top:20px;}
.grid-2 {display:grid; grid-template-columns:1fr 1fr; gap:20px;}
.grid-3 {display:grid; grid-template-columns:1fr 1fr 1fr 1fr; gap:20px;}
table {width:100%; border-collapse:collapse;}
th,td {padding:8px; border-bottom:1px solid #ddd; font-size:13px;}
textarea {width:100%; height:120px;}
</style>
</head>

<body>
<div class="dropzone" id="dropzone">
    📂 Перетащи сюда access.log или кликни
    <input type="file" id="fileInput" hidden>
</div>

<div id="app" style="display:none;">

<div class="grid-2">
    <div class="card">
        <h3>Status Codes</h3>
        <canvas id="statusChart"></canvas>
    </div>
<div class="card">
        <h3>Total Requests: <span id="total"></span></h3>
        <canvas id="hourChart"></canvas>
        <h3>🚨 Burst IP (200+ req/min)</h3>
        <textarea id="burstBox"></textarea>
    </div>
</div>
<div class="grid-3">
    <div class="card"><h3>Top IP</h3><table id="ipTable"></table></div>
    <div class="card"><h3>Top Agents</h3><table id="agentTable"></table></div>
    <div class="card"><h3>Top URL</h3><table id="urlTable"></table></div>
    <div class="card"><h3>Top 404</h3><table id="errTable"></table></div>
</div>
</div>
<script>
const dropzone = document.getElementById('dropzone');
const fileInput = document.getElementById('fileInput');
dropzone.addEventListener('click', () => fileInput.click());
dropzone.addEventListener('dragover', e => {
    e.preventDefault();
    dropzone.classList.add('dragover');
});

dropzone.addEventListener('dragleave', () => {
    dropzone.classList.remove('dragover');
});

dropzone.addEventListener('drop', e => {
    e.preventDefault();
    dropzone.classList.remove('dragover');
    handleFile(e.dataTransfer.files[0]);
});

fileInput.addEventListener('change', e => {
    handleFile(e.target.files[0]);
});

function handleFile(file){
    const reader = new FileReader();

    reader.onload = function(){
        const lines = reader.result.split('\n');
        const pattern = /^(\S+) \S+ \S+ \[([^\]]+)\] "(\S+) (\S+) (\S+)" (\d{3}) .* "([^"]*)"$/;
        let logs = [];
        lines.forEach(line=>{
            let m = line.match(pattern);
            if(m){
                logs.push({
                    ip: m[1],
                    datetime: m[2],
                    url: m[4],
                    status: m[6],
                    agent: m[7]
                });
            }
        });
        process(logs);
        document.getElementById('app').style.display = 'block';
    };

    reader.readAsText(file);
}

function process(logs){
    let statusStats={}, ipStats={}, agentStats={}, urlStats={}, err404={}, hourStats=Array(24).fill(0), minuteStats={};
    logs.forEach(l=>{
        statusStats[l.status]=(statusStats[l.status]||0)+1;
        ipStats[l.ip]=(ipStats[l.ip]||0)+1;
        agentStats[l.agent]=(agentStats[l.agent]||0)+1;
        urlStats[l.url]=(urlStats[l.url]||0)+1;

        if(l.status==404) err404[l.url]=(err404[l.url]||0)+1;

        let h=l.datetime.match(/:(\d{2}):/);
        if(h) hourStats[+h[1]]++;

        let m=l.datetime.match(/:(\d{2}:\d{2}):/);
        if(m){
            let minute=m[1];
            if(!minuteStats[minute]) minuteStats[minute]={};
            minuteStats[minute][l.ip]=(minuteStats[minute][l.ip]||0)+1;
        }
    });

let burstSet = new Set();
for(let minute in minuteStats){
    for(let ip in minuteStats[minute]){
        if(minuteStats[minute][ip] >= 200){
            burstSet.add(ip);
        }
    }
}
let burst = Array.from(burstSet);

    document.getElementById('burstBox').value =
        burst.map(ip=>"Deny from "+ip).join("\n");

    document.getElementById('total').innerText = logs.length;

    new Chart(statusChart, {
        type:'pie',
        data:{labels:Object.keys(statusStats), datasets:[{data:Object.values(statusStats)}]}
    });

    new Chart(hourChart, {
        type:'bar',
        data:{labels:[...Array(24).keys()], datasets:[{data:hourStats}]}
    });

function fill(el, data, type){
    let html = "";

    Object.entries(sort(data)).slice(0,30).forEach(([k,v]) => {

        let key = k;
        // 🔴 подсветка burst IP
        if(type === 'ip' && burstSet.has(k)){
            key = `<span style="color:red;font-weight:bold">${k}</span>`;
        }
        if(type === 'ip'){
            key = `<a href="https://ipinfo.io/${encodeURIComponent(k)}" target="_blank" rel="noopener noreferrer">${key}</a>`;
        }
        html += `<tr><td>${key}</td><td>${v}</td></tr>`;
    });
    el.innerHTML = html;
}
fill(ipTable, ipStats, 'ip');
fill(agentTable, agentStats);
fill(urlTable, urlStats);
fill(errTable, err404);
}
function sort(obj){
    return Object.fromEntries(
        Object.entries(obj).sort((a,b)=>b[1]-a[1])
    );
}
</script></body></html>
Инструменты для WEB и SEO ( https://tools.100zona.com/?utm_source=searchengines.guru ) в одном месте
bobolab
На сайте с 08.04.2008
Offline
223
#26
Вячеслав Скоблей #:
Я использую такой простейший анализатор access.log файлов, для выявления проблемных UА і IP (более 200 запросов в минуту - можно уменьшить под себя). Может кому пригодиться.
Потестил. Очень годная штука....
Аналог РСЯ https://u.to/j03BHw
RU
На сайте с 07.03.2026
Offline
1
#27
grafana + loki
AD
На сайте с 05.05.2007
Offline
258
#28
 Вячеслав Скоблей  спасибо!  Думаю Гугл-ИИ больше дает инфо об IP чем ipinfo.io, можно ссылку поменять или сразу интегрировать, но вам веднее.
redizka
На сайте с 20.10.2013
Offline
99
#29

Переработал первую версию скрипта анализа и оформил более культурно https://redlogs.ru/
Сервис бесплатный, регистрацию сделал для статистики и чтобы каждый убирал за собой лишние загруженные файлы.

Если кратко, то зеленые это коды 200, а красные с кодом 403 (те кто блокируются правилами через htaccess).

Делал для себя, но решил выложить, вдруг кому-то окажется полезно. 
Может подтормаживать, так как пока лежит на простом хостинге самом.
Будут вопросы пишите. 



WS
На сайте с 01.11.2008
Offline
165
#30
redizka #:

Переработал первую версию скрипта анализа и оформил более культурно https://redlogs.ru/
Сервис бесплатный, регистрацию сделал для статистики и чтобы каждый убирал за собой лишние загруженные файлы.

Если кратко, то зеленые это коды 200, а красные с кодом 403 (те кто блокируются правилами через htaccess).

Делал для себя, но решил выложить, вдруг кому-то окажется полезно. 
Может подтормаживать, так как пока лежит на простом хостинге самом.
Будут вопросы пишите. 

жаль, что нельзя с произвольным форматом лога работать, а можно только с дефолтным, а так, хорошая штука
1 234

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий