14Aug

Gemakkelijk ontleden / zoeken van een webpagina zoekopdracht strings van apache logs met behulp van php awk en sed linux command line utilities

click fraud protection
6 onderdelen: Gebruik awk en sed om apache logbestanden te ontleden voor de gebruiker getypte zoekopdrachten Bekende problemen Versie 2: Minder command line voorbewerking en php verwerking ToDo Tips Trucs & amp;Waarschuwingen Reacties

Dit HowTo zal u tonen hoe gemakkelijk op de Linux command line ontleden uw apache logbestanden zoekterm querygegevens die gebruikers typen om uw webpagina in een zoekmachine te krijgen.Ik heb opgenomen een php search GUI alsook voor eenvoudig gebruik.

Was dit nuttig?Yes |geen |Ik help
Inhoud
  • 1 Met awk en sed om apache logbestanden voor de gebruiker getypte zoekopdracht ontleden queries nodig
  • 2 Bekende problemen
  • 3 versie 2: Minder command line voorbewerking en php verwerking
  • 4 ToDo
  • 5 Tips trucs & amp;Waarschuwingen
  • 6 Reacties
Ad

Met awk en sed om apache logbestanden voor de gebruiker getypte zoekopdracht ontleden queries

Hier is de ruwe code om de klus te klaren.Merk op dat $ title2 moet worden vervangen door wat je op zoek bent naar MAAR ruimtes worden vervangen door "\ +".

instagram viewer

Bijvoorbeeld: "Hoe maak je een grote lollypop vinden" zou "Hoe \ + naar \ + vinden \ + a \ + grote \ + lollypop"

Dit is omdat ik van plan om te bellen vanuit een php-functie, waar ik wilbevolken $ Title2 zoals u later zult zien.Ik kon de egrep

later hebben gezet, maar dan zult u niet de mogelijkheid om te zoeken zowel pagina titel en vragen hebben.Mijn oorspronkelijke versie net doorzocht vragen, maar ik wilde een functie kon ik gemakkelijk bellen voor een bepaalde pagina en bekijk alle zoekopdrachten die gebruikers hebben getypt in de afgelopen weken.

cat /var/log/virtualmin/VisiHow.com_access_log |#get Gegevens uit de toegang tot log egrep "(q | p) =" |#use Alleen records die waarschijnlijk zoekopdrachten sed 's /% 22 / "/ g; s /% 20 / + / g; s / _ / + / g;' | #Do een aantal wijzigingen in de opmaak en het allerbelangrijkste: alle ruimten te veranderenof onderstreept tot + egrep -I "$ title2" | #search voor $ title2 awk '{print $ 11}' | #extract alleen zoekgegevens sed 's / p = / q = / ig' | #handle Yahoo p = awk -F 'q =' '{print $ 2}' | #grab alle gegevens te beginnen met q = sed 's / q = // g; s / + / / g; s /% 22 / "/ g; s / 20%/ / g; '|#reformat menselijke leesbaar formaat cut -d "& amp;"-f 1 |#strip off andere parameters awk '{print $ 0 "
"}' #add
schakel breekt, want we zijn van plan om de productie naar een webpagina

Was dit nuttig?Yes |geen |Ik help

== Laten we zorgen voor een PHP

HTML GUI wrapper voor deze nu ==

Om dit te gemakkelijk gebruik we willen toegang tot de zoekopdrachten van gebruikers gegevens van een webpagina zoekformulier maken nodig hebben.

queries.php

& lt; title & gt; Gebruiker Queries & lt; / title & gt;& Lt; meta name = "robots" content = "noindex" & gt;

& lt; form name = "sform" method = "get" & gt;Zoeken Titel: & lt; ingang size = "80" value = "& lt; php echo $ _GET [ 'title']; & gt;? 'name = "title" type = "text" & gt;& Lt; ingang value = "Zoeken" type = "submit" & gt;TIP: U kunt een gedeelte van de titel te gebruiken of zelfs regex zoals & lt; / form & gt; "Samsung * schade."

Was dit nuttig?Yes |geen |Ik help

$ title = $ _GET [ 'title'] nodig hebben;$ Title = preg_replace( "/ hoe / i", "", $ title);$ Title2 = str_replace( "", "\ +", $ title);$ Title2 = str_replace( "_", "\ +", $ title2);

$ bigcmd = & lt; & lt; & lt; eof

egrep -i "(q | p) =" |#use Alleen records die waarschijnlijk zoekopdrachten sed 's /% 22 / "/ g; s /% 20 / + / g; s / _ / + / g;' | #Do een aantal wijzigingen in de opmaak en het allerbelangrijkste: alle ruimten te veranderenof onderstreept tot + egrep -i "$ title2" | #search voor title2 awk '{print $ 11}' | #extract alleen zoekgegevens sed 's / p = / q = / ig' | #handle yahoo p = awk -F'q =' '{print $ 2}' | #grab alle gegevens te beginnen met q = sed 's / q = // g; s / + / / g; s /% 22 / "/ g; s /% 20 // g; '|#reformat menselijke leesbaar formaat cut -d "& amp;"-f 1 |#strip off andere parameters awk '{print $ 0 "
"}' #add
schakel breekt, want we zijn van plan om de productie naar een webpagina

EOF;

Was dit nuttig?Yes |geen |Ik help

indien nodig "{

druk Op zoek naar" $ title "..."( $ title = "!)";print "Deze week. ..
";afdrukken `cat /var/log/virtualmin/visihow.com_access_log |#get Gegevens uit de toegang log $ bigcmd `;// Wij steunen p = ook omdat yahoo gebruikt dat. .. vreemde eend lol voor( $ i = 1; $ i & lt; 6; $ i ++){ print "
$ i WEEK( S) AGO
";afdrukken `zcat /var/log/virtualmin/visihow.com_access_log.$i.gz |#get Gegevens uit de toegang log $ bigcmd `;}}

& gt?;

Was dit nuttig?Yes |geen |/ Eof

Bekende problemen

De grep is het oppakken van records met verwijzer gegevens dus het is de terugkeer van ongewenste bestanden; Ik help

& lt nodig.Bijvoorbeeld als iemand zoekt naar "iPhone" en een gebruiker was op een iPhone pagina vervolgens geklikt om naar een Samsung pagina, deze code pakt de iPhone uit de verwijzer en dus onder meer in dat de gegevens die hij niet zou moeten.Ik ben bezig met versie 2, dat een stuk meer doet en zal deze bug op te lossen door het bewegen van een groot deel van de command line voorbewerking in php.De code zal stompe, maar zal veel nuttiger en nauwkeurige gegevens te geven.

Was dit nuttig?Yes |geen |Minder command line voorbewerking en php verwerking

Deze versie heeft de volgende voordelen / nadelen::

  • Minder command line voorbewerking betekent langer code
  • Ik help

Version 2 nodig
  • meer php betekent meer controle en beschikt over
  • Negeert meerdere duplicaat aanvragen van hetzelfde IP
  • telt meerdere zoekopdrachten in plaats van meerdere keren
  • Show trending informatie aanbieden hen door het weergeven van weektotalen
  • Output isin schuifbaar divs voor het eenvoudig bekijken van populaire pagina
  • Rangschikken op vraag lengtes in totaal, waarvan ongeveer betekent meer populaire pagina's tonen eerste
  • Een beetje quick and dirty javascript & amp;css om de divs auto uit te breiden voor gedetailleerde weergave
  • & lt; title & gt; Gebruiker Queries & lt; / title & gt;& Lt; meta name = "robots" content = "noindex" & gt;

    & lt; form name = "sform" method = "get" & gt;Zoek Titel: & lt; ingang 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; ingang value = "Zoeken" type = "submit" & gt;
    TIP: Voer * om alles te zien.U kunt een gedeeltelijke titel te gebruiken of zelfs regex zoals "Samsung * schade." & Lt; / form & gt;

    Was dit nuttig?Yes |geen |; Ik help

    functie sortbylen( $ a, $ b){

    terugkeer strlen( $ b) -strlen( $ a) nodig

    }

    $ title = $ _GET [ 'title'];$ Title = preg_replace( "/ hoe / i", "", $ title);$ Title2 = str_replace( "", "\ +", $ title);$ Title2 = str_replace( "_", "\ +", $ title2);

    $ bigcmd = & lt; & lt; & lt; eof

    egrep -i "(q | p) =" |#use Alleen records die waarschijnlijk zoekopdrachten sed 's /% 22 / "/ g; s /% 20 / + / g; s / _ / + / g;' | #Do een aantal wijzigingen in de opmaak en het allerbelangrijkste: alle ruimten te veranderenof onderstreept tot + awk '{print $ 1 "" $ 7 "" $ 11}' | egrep -i "$ title2" #search voor title2

    EOF;

    Was dit nuttig Yes | No | ik heb hulp nodig
    ?

    if( $ title = ""){

    print "Zoeken naar" $ title "...", want( $ i = 0; $ i & lt; 6; $ i ++){ if( $ i == 0){ $ searchlogdata = `cat /var/log/virtualmin/visihow.com_access_log | $ bigcmd`;} else{ $ searchlogdata =` zcat /var/log/virtualmin/visihow.com_access_log.$i.gz | $ bigcmd`;} $ searchlogarray = explode( "\ n", $ searchlogdata); foreach( $ searchlogarray als $ SDATA){ $ logparts = explode( "", $ SDATA); $ ip = $ logparts [0]; $ url = $ logparts[1], preg_match( "/( q | p) =( *).? '(\ & amp; |? $) /", $ logparts [2], $ lucifers);$ Ss = urldecode( $ resultaten [2]);$ Ss = str_replace( "+", "", $ ss);if( (strlen( trimmen( $ ss)) & gt; 3) & amp; & amp;( preg_match( "# http \: \ / \ / # i", $ ss))!){ // houden url van de site zoekopdrachtenif( ($ ip = $ lip) ||( $ ss = $ LSS)!){ $ lip = $ ip;$ Lss = $ ss;$ Ssdata [ "$ url"] = "$ ss |.";}}} Uasort( $ array, 'sortbylen');foreach( $ ssdata als $ key = & gt; $ waarde){ $ Sarr = explode( "|", $ value);foreach( $ Sarr als s $){ if( strlen( $ s) & gt; 0) $ s2 [$ s] ++;} Arsort( $ s2);foreach( $ s2 als $ key2 = & gt; $ val2){ $ urldata [$ key] [$ i] = "$ val2: $ key2
    .";$ STOT [$ key] [$ i] + = $ val2;} Unset( $ s2);} Unset( $ ssdata);} Foreach( $ urldata als $ url = & gt; $ weekdata){ print " & lt; a target =" _ blank "href =" $ url "& gt; $ url & lt; / a & gt;
    ";$ Wk = 0;... Foreach( $ weekdata als $ week){ print "
    " $ wk ++ "WEEK( S) AGO: Total Zoekopdrachten =" $ STOT [$ url] [$ wk-1] "
    .";print "& lt; div onmouseover =" this.style.height = 500 "onmouseout =" this.style.height = 100 "& lt; br =" "& gt; & lt; / div & gt; style =" width: 800px; height: 100px; border: 1px solid grijs; overflow: scroll '& gt; $ week ";}}}

    & gt?;

    Was dit nuttig?Yes |geen |Ik help

    & lt nodig hebben; / eof

    ToDo

    Sorteren op vraag lengte als een tweede soort, met een langere queries eerste

    Dat is het.Ik zou graag uw ervaringen horen met deze code of suggesties voor verbeteringen.

    Tips Trucs & amp;Waarschuwingen

    • Opmerking: Ik steun p = zo goed en de standaard q = omdat Yahoo worden de oneven eend is het gebruik van p =
    • Versie 2 php is complexer en ik was codering snel, zodat een deel van de variabelennamen waren slecht gekozen.aarzel dan niet klagen als zijn vrije code.Maar als je wilt om het te repareren en te documenteren en toe te voegen in de wiki als versie 3 die fantastische:) FORWARD BETAAL zou zijn!
    • Als u problemen met een van deze stappen hebben, een vraag om meer hulp, of post in de commentaren hieronder.

    Reacties

    VisiHow verwelkomt alle reacties .Als u niet wilt anoniem te zijn, te registreren of log in. Het is gratis.




    Daniel
    Featured Auteur
    69 artikelen slag
    2601 artikel Edits
    24.290 Points
    Daniel is een gekenmerkte auteur met VisiHow.Daniel heeft het niveau van de "Lieutenant" bereikt met 24.290 punten.Daniel heeft 69 artikelen begonnen en maakte 2601 artikel bewerkingen.17.578 mensen hebben Daniel's artikel bijdragen te lezen.
    Vraag Daniel
    Daniel : Hallo, mijn naam is Daniel.
    Daniel : Kan ik u helpen met uw probleem over "Gemakkelijk ontleden / zoeken van een webpagina zoekopdracht strings van apache logs met behulp van php awk en sed linux command line utilities"?
    Accepteer