14Aug

analiza cu ușurință / caută șiruri de interogare de căutare unei pagini web din jurnalele apache folosind awk php si utilitati sed linia de comandă Linux

6 parti: Utilizați awk și SED pentru a analiza fișierele jurnal apache pentru interogări de căutare tastat de utilizator probleme cunoscute Versiunea 2: Mai puțin linia de comandă preprocesare și mai procesare php ToDo Tips Tricks & amp;Avertismente Comentarii

Acest ghid vă va arăta cum să cu ușurință la linia de comandă Linux analiza fișierele jurnal apache pentru a obține șir de căutare de date de interogare pe care utilizatorii de tip pentru a găsi site-ul dvs. într-un motor de căutare.Am inclus o căutare GUI php, precum și pentru o utilizare mai usoara.

fost de ajutor?Da |nr |Am nevoie de ajutor
Cuprins
  • 1 Utilizarea awk și sed pentru a analiza fișiere jurnal apache pentru cautarea tastate utilizator interogări
  • 2 Probleme cunoscute
  • 3 Versiunea 2: mai puțin linia de comandă preprocesare și mai procesare php
  • 4 ToDo
  • 5 Tips trucuri & amp;Avertismentele
  • 6 Comentarii
Ad

Utilizarea awk și SED pentru a analiza fișiere jurnal apache pentru cautarea tastate utilizator interogări

Aici este codul pentru a obține brut treaba.Rețineți că $ TITLE2 ar trebui să fie înlocuită cu ceea ce căutați, DAR spații sunt înlocuite cu "\ +".

De exemplu: "Cum de a găsi o acadea mare" ar fi "Cum \ + la \ + găsi \ + o \ + mare \ + acadea"

Acest lucru se datorează faptului că am de gând să sun dintr-o funcție php, în cazul în care voipopula $ TITLE2 după cum veți vedea mai târziu.Aș fi putut să îl

egrep mai târziu, dar atunci nu va avea posibilitatea de a căuta atât titlul paginii și interogări.versiunea mea originală doar căutat interogări, dar am vrut o funcție am putea apela cu ușurință pentru o anumită pagină și a vedea toate interogările pe care utilizatorii au tastate în ultimele câteva săptămâni.

pisică /var/log/virtualmin/VisiHow.com_access_log |date #Get din egrep Jurnal de acces "(q | p) =" |#use Numai înregistrările care probabil au interogări de căutare sed 's /% 22 / "/ g; s /% 20 / + / g; s / _ / + / g;' | #Do unele modificări de formatare și de a schimba cel mai important, toate spațiilesau subliniază la + egrep -I "$ TITLE2" | #search pentru $ TITLE2 awk '{print $ 11} se' | #extract numai date de căutare sed 's / p = / q = / ig' | #handle Yahoo p = awk -'q =' F '{print $ 2}' | #grab toate datele care încep cu q = sed 's / q = // g; s / + / / g; s /% 22 / "/ g, s /% 20/ / g; "|#reformat la om format care poate fi citit cut -d "& amp;"-f 1 |#strip off alți parametri awk '{print $ 0 "
"} "#add
link-ul pauze, deoarece ne propunem sa ieșire la o pagină web

fost de ajutor?Da |nr |Am nevoie de ajutor

== Sa cream un înveliș GUI PHP

HTML pentru acest lucru acum ==

Pentru a face acest lucru cu ușurință de utilizare dorim sa acceseze datele de interogare utilizator dintr-un formular de căutare pagină web.

queries.php

& lt; title & gt; & lt întrebare utilizatorului; / title & gt;& Lt; meta name = "roboți" content = "NOINDEX" & gt;

& lt; form name = "sform" metoda = "get" & gt;Căutare Titlu: & lt; input size = "80" value = "? & Lt; php echo $ _GET [ 'title']; & gt;?"name = "title" type = "text" & gt;& Lt; valoarea de intrare = "Căutare" type = "submit" & gt;SFAT: Puteți utiliza un titlu parțial sau chiar REGEX cum ar fi & lt; / form & gt; "Samsung * daune."

fost de ajutor?Da |nr |Am nevoie de ajutor

$ title = $ _GET [ 'title'];$ Title = preg_replace( "/ cum sa / i", "", $ titlu);$ TITLE2 = str_replace( "", "\ +", titlul $);$ TITLE2 = str_replace( "_", "\ +", $ TITLE2);

$ bigcmd = & lt; & lt; & lt; EOF

egrep -i "(q | p) =" |#use Numai înregistrările care probabil au interogări de căutare sed 's /% 22 / "/ g; s /% 20 / + / g; s / _ / + / g;' | #Do unele modificări de formatare și de a schimba cel mai important, toate spațiilesau subliniază la + egrep -I "$ TITLE2" | #search pentru awk TITLE2 '{print $ 11} se' | #extract numai date de căutare sed 's / p = / q = / ig' | #handle yahoo p = awk -F'q =' '{print $ 2}' | #grab toate datele care încep cu q = sed 's / q = // g; s / + / / g; s /% 22 / "/ g, s /% 20 // g; "|#reformat la om format care poate fi citit cut -d "& amp;"-f 1 |#strip off alți parametri awk '{print $ 0 "
"} "#add
link-ul pauze, deoarece ne propunem sa ieșire la o pagină web

EOF;

fost de ajutor?Da |nr |Am nevoie de ajutor

if "{print

Se caută" $ title "..."( $ title = "!)";print "săptămâna curentă. ..
";imprimare `pisica /var/log/virtualmin/visihow.com_access_log |date #Get de acces jurnal de $ bigcmd `;// Susținem p = prea pentru că yahoo folosește că. .. rață ciudat lol pentru( $ i = 1; $ i & lt; 6; $ i ++){ print "
$ i WEEK( S) AGO
";imprima `zcat /var/log/virtualmin/visihow.com_access_log.$i.gz |date #Get de acces jurnal de $ bigcmd `;}

} & gt;

fost de ajutor?Da |nr |Am nevoie de ajutor

& lt; / EOF

Probleme cunoscute

grep receptează înregistrări cu date referrer, deci returnează înregistrările nedorite.De exemplu, dacă cineva caută pentru "iPhone" și un utilizator a fost pe o pagină iPhone apoi clic pentru a merge la o pagină Samsung, acest cod preia iPhone-ul de la referrer și, prin urmare, include datele pe care nu ar trebui.Sunt de lucru la versiunea 2, care face mult mai mult și va rezolva această problemă prin mutarea mare a liniei de comandă preprocesare în php.Codul va fi mai obtuz, dar va oferi date mult mai utile și corecte.

fost de ajutor?Da |nr |Am nevoie de ajutor

Versiunea 2: Mai puțin preprocesare linia de comandă și mai procesare php

Această versiune are următoarele avantaje / dezavantaje:

  • Mai puțin linia de comandă preprocesare înseamnă cod mai lung
  • mai multe php înseamnă mai mult control și caracteristici
  • Ignora mai multe cereri de duplicate de pe acelasi IP
  • Counts căutări multiple în loc de listare ele de mai multe ori
  • arată trending informații prin afișarea totaluri pe săptămână
  • de ieșire esteîn divs scrollable pentru o vizualizare ușoară a populare pagini
  • Sortate de lungimi de interogare au totalizat, ceea ce înseamnă aproximativ mai populare pagini arată mai întâi
  • Un pic mai rapid și murdar javascript & amp;css pentru a face auto divuri extinde pentru detaliu vizualizare

& lt; title & gt; & lt User întrebare; / title & gt;& Lt; meta name = "roboți" content = "NOINDEX" & gt;

& lt; form name = "sform" metoda = "get" & gt;Căutare Titlu:? & Lt; input size = "80" value = "& lt; php
if( strlen( $ _ GET [ 'title']) & gt; 0){
echo $ _GET [ 'title'];
} else{
echo "*"; & lt; br = "" type = "text" & gt;} & gt;? "name = "title" / & gt;& Lt; valoarea de intrare = "Căutare" type = "submit" & gt;
SUGESTIE: Enter * pentru a vedea totul.Aveți posibilitatea să utilizați un titlu parțial sau chiar regex cum ar fi "Samsung * daune". & Lt; / form & gt;

fost de ajutor?Da |nr |Am nevoie de ajutor funcția

sortbylen( $ a, $ b){ întoarcere strlen

( $ b) -strlen( $ a);

}

$ title = $ _GET [ 'title'];$ Title = preg_replace( "/ cum sa / i", "", $ titlu);$ TITLE2 = str_replace( "", "\ +", titlul $);$ TITLE2 = str_replace( "_", "\ +", $ TITLE2);

$ bigcmd = & lt; & lt; & lt; EOF

egrep -i "(q | p) =" |#use Numai înregistrările care probabil au interogări de căutare sed 's /% 22 / "/ g; s /% 20 / + / g; s / _ / + / g;' | #Do unele modificări de formatare și de a schimba cel mai important, toate spațiilesau subliniază la + awk '{print $ 1 "" $ 7 "" $ 11} se' | egrep -i "$ TITLE2" #search pentru TITLE2

EOF;

fost de ajutor Da | Nu | am nevoie de ajutor
?

if( $ title = "!"){ print

"Se caută" $ title "...", pentru( $ i = 0; $ i & lt; 6; $ i ++){ if( $ i == 0){ $ searchlogdata = `pisica /var/log/virtualmin/visihow.com_access_log | $ bigcmd`;} else{ $ searchlogdata =` zcat /var/log/virtualmin/visihow.com_access_log.$i.gz | $ bigcmd`;} $ searchlogarray = exploda( "\ n", $ searchlogdata); foreach( $ searchlogarray ca $ sdata){ logparts $ = exploda( "", $ sdata); $ ip = $ logparts [0]; $ url = $ logparts[1]; preg_match( "/( q | p) =( *).?"( \ & amp; |? $) / ", $ logparts [2], se potrivește $);$ Ss = urldecode( $ meciuri [2]);$ Ss = str_replace( "+", "", $ ss);în cazul în care( (strlen( tăiați( $ ss)) & gt; 3) & amp; & amp;( preg_match( "# http \: \ / \ / # i", $ ss))!){ // feri URL-ul din căutările site-uluiif( ($ ip = $ buză) ||( $ ss = $ LSS)!!){ $ = $ ip buze;$ LSS = $ ss;$ Ssdata [ "$ url"] = "$ ss |".;}}} Uasort( $ array, 'sortbylen');foreach( $ ssdata ca cheie $ = & gt; $ valoare){ $ sarr = exploda( "|", $ value);foreach( $ Sarr ca $ s){ if( strlen( $ s) & gt; 0) $ s2 [$ s] ++;} Arsort( $ s2);foreach( $ s2 ca $ key2 = & gt; $ val2){ $ urldata [$ cheie] [$ i] = "$ val2: $ key2
";.$ Stot [$ cheie] [$ i] + = $ val2;} Unset( $ s2);} Unset( $ ssdata);} Foreach( $ urldata ca $ url = & gt; $ weekdata){ print " & lt; a target =" _ blank "href =" $ url "& gt; $ url & lt; / a & gt;
";$ Wk = 0;... Foreach( $ weekdata ca $ pe săptămână){ print "
" $ săpt ++ "Săptămâna( S) acum: Număr total de căutări =" $ Stot [$ url] [$-sapt 1] "
";.print "& lt; div onMouseOver =" this.style.height = 500 "onmouseout =" this.style.height = 100 "& lt; br =" "& gt; & lt; / div & gt; style = 'lățime: 800px; înălțime: 100px; frontieră: 1px solid de culoare gri; preaplin: defilați '& gt; $ săptămână ";}}}

& gt;

fost de ajutor?Da |nr |Am nevoie de ajutor

& lt; / EOF

ToDo

Sorteaza dupa lungime interogare ca un fel secundar, cu interogări mai lungi

prima

Asta este.Mi-ar plăcea să aud experiențele Dvs. cu acest cod sau sugestii de îmbunătățire.

sfaturi Trucuri & amp;Avertismentele

  • Notă: Sprijin p = precum și q standardul = deoarece Yahoo fiind rață ciudat este folosește p =
  • Versiunea 2 php este mult mai complexă și am fost de codificare rapidă astfel încât unele dintre variabilenume au fost selectate prost.vă rugăm să nu se plâng ca codul său liber.Dar, dacă doriți să-l repare și să documenteze-l și adăugați-l în wiki ca versiunea 3, care ar fi fantastic:) PAY IT FORWARD!
  • Dacă ai probleme cu oricare dintre acești pași, pune o întrebare pentru mai mult ajutor, sau post în secțiunea de comentarii de mai jos.

Comentarii

VisiHow saluta toate comentariile .Dacă nu doriți să fie anonim, înregistra sau autentifica. Este gratuit.




Daniel
Featured Autor
69 Articolele A început
2601 Articolul Editările
24,290 Puncte
Daniel este un autor featured cu VisiHow.Daniel a atins nivelul de "locotenent-" cu 24,290 puncte.Daniel a început 69 de articole și a făcut 2,601 modificări de articol.17,578 de oameni au citit contribuții articol lui Daniel.
Cere Daniel
Daniel : Bună, numele meu este Daniel.
Daniel : Pot să vă ajut cu problema ta despre "analiza cu ușurință / căutare șiruri de interogare de căutare a unei pagini web din jurnalele apache folosind awk php si utilitati linie de comandă linux sed"?
Accept