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 :
$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.
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 :
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
.
`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
.
Commentaires