14Aug
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.
- 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
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
== 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."
$ 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;
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;
& 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.
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;
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 TITLE2EOF;
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;
& 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
| 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. |
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"? |