1
21

Suivi des requêtes

Vous pouvez enregistrer toutes les requêtes sur un site web dans un fichier ou dans la base de données pour repérer un robot envahissant ou afficher des statistiques comme le nombre total de visiteurs ou les 10 pages les plus consultées.

Les paramètres de configuration sont définis dans le fichier config.inc :

global $log_dir;

$log_dir = ROOT_DIR . DIRECTORY_SEPARATOR . 'log';

global $track_db, $track_log;
global $track_visitor, $track_visitor_agent;
global $track_agent_blacklist;

$track_db=false;
$track_log=false;       // true, file name or false
$track_visitor=false;
$track_visitor_agent=false;
$track_agent_blacklist=false;   // false or array of agent signatures

$track_visitor à true provoque la journalisation des requêtes. $track_visitor_agent ajoute le contenu de l'en-tête User-Agent aux données enregistrées. $track_db donne le nom de la table de la BD qui contient le journal, track par défaut si $track_db est à true. $track_log donne le nom du fichier qui contient le journal, track.log dans le dossier défini par $log_dir par défaut si $track_log est à true. Si $track_db et $track_log sont à false, aucune journalisation n'est effectuée.

Pour éliminer les requêtes envoyées par des services connus, tels que Google, Facebook ou Nagios, définissez le paramètre $track_agent_blacklist comme un tableau des signatures en minuscules qu'ils écrivent dans le champ User-Agent d'une requête.

$track_agent_blacklist='facebook|facebot|googlebot|nagios';

Dans cette configuration, la fonction track ignorera les requêtes envoyées par les robots Facebook et Google et les sondes Nagios.

La journalisation des requêtes est gérée par la fonction dispatch dans engine.php :

function dispatch($languages) {
    global $base_path;
...
    global $track_visitor, $track_visitor_agent;

    $req = $base_path ? substr(request_uri(), strlen($base_path)) : request_uri();

    if ($track_visitor) {
        track($req, $track_visitor_agent);
    }
...
}

La base de données enregistre les informations sur une requête dans la table track.

CREATE TABLE `track` (
  `track_id` INT(10) UNSIGNED NOT NULL,
  `time_stamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `ip_address` INT(10) UNSIGNED NOT NULL,
  `request_uri` VARCHAR(255) NOT NULL,
  `user_agent` VARCHAR(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE `track` ADD PRIMARY KEY (`track_id`);
ALTER TABLE `track` MODIFY `track_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT;
UTILISATION

Pour afficher le contenu du journal des connexions :

$ tail track.log

Pour obtenir le nombre total de visiteurs :

$ cut -f 1 track.log | cut -d' ' -f 3 | sort | uniq | wc -l

Pour lister les 10 pages les plus consultées :

$ cut -f 2 track.log | sort | uniq -c | sort -rn | head -10

Pour vérifier la BD :

mysql> SELECT * FROM track;

NOTE : Si nécessaire, ajoutez le préfixe $db_prefix défini dans db.inc au nom de la table track.

Pour obtenir le nombre total de visiteurs :

mysql> SELECT COUNT(DISTINCT ip_address) from track;

Pour lister les 10 pages les plus consultées :

mysql> SELECT request_uri, COUNT(request_uri) AS count from track GROUP BY request_uri ORDER BY count DESC LIMIT 10;

IMPORTANT : La quantité de données générées peut rapidement remplir la BD et le journal. Optez pour un seul mode en mettant $track_db ou $track_log à false. Une fois une campagne d'analyse du type des clients du site (navigateurs, mobiles, robots, etc.) terminée, laissez le paramètre $track_agent à false.

VOIR AUSSI

track, log, useragent

Commentaires

Votre commentaire :
[p] [b] [i] [u] [s] [quote] [pre] [br] [code] [url] [email] strip aide 2000

Entrez un maximum de 2000 caractères.
Améliorez la présentation de votre texte avec les balises de formatage suivantes :
[p]paragraphe[/p], [b]gras[/b], [i]italique[/i], [u]souligné[/u], [s]barré[/s], [quote]citation[/quote], [pre]tel quel[/pre], [br]à la ligne,
[url]http://www.izend.org[/url], [url=http://www.izend.org]site[/url], [email]izend@izend.org[/email], [email=izend@izend.org]izend[/email],
[code]commande[/code], [code=langage]code source en c, java, php, html, javascript, xml, css, sql, bash, dos, make, etc.[/code].