14Aug
Ten dokument pokaże, jak łatwo w wierszu poleceń Linux analizowania logów apache, aby uzyskać ciąg wyszukiwania danych zapytań, które użytkownicy wpisują do znalezienia swojej strony internetowej w wyszukiwarce.Mam włączone php szukaj GUI, jak również dla łatwego użycia.
- 1 Zastosowanie awk i sed do analizowania apache plików dziennika dla wpisywanych przez użytkownika poszukiwaniu odpytuje
- 2 Znane problemy
- 3 Wersja 2: Mniej przerób wiersz poleceń i bardziej przetwarzania php
- 4 zrobienia
- 5 Tips Tricks & amp;Ostrzeżenia
- 6 Komentarze
stosować awk i sed do analizowania apache plików dziennika dla wpisywanych przez użytkownika poszukiwaniu odpytuje
Oto kod surowe, aby otrzymać pracę.Zauważ, że $ TITLE2 należy zastąpić to, czego szukasz, ALE przestrzenie są zastępowane "\ +".
Na przykład: "Jak znaleźć duży lizaka" byłoby "Jak \ + do \ + znaleźć \ + A \ + duży \ + lizaka"
To dlatego, że mam zamiar dzwonić z funkcji php, gdzie będęwypełnić $ Title2 jak widać później.Mógłbym umieścić
egrep później, ale wtedy nie będzie miał możliwość przeszukiwania zarówno tytuł strony i zapytań.Moja pierwotna wersja prostu szukał zapytań ale chciałem funkcję mogłem zadzwonić do danej strony i zobaczyć wszystkie zapytania, które użytkownicy mają wpisane w ciągu ostatnich kilku tygodni. kot /var/log/virtualmin/VisiHow.com_access_log |#Get Dane z dziennika egrep Access "(q | p) =" |#use Tylko rekordy, które prawdopodobnie mają zapytań sed 's / 22% / "/ g; s / 20% / + / g; s / _ / + / g;' | #Do pewne zmiany formatowania, a co najważniejsze zmienić wszystkie przestrzenielub podkreśla do + egrep -I "$ Title2" | #search za USD TITLE2 awk '{print $ 11}' | #extract przeszukiwać dane sed 's / p = / q = / ig' | #handle Yahoo p = awk -F 'q =' '{print $ 2}' | #grab wszystkie dane zaczynające się na Q = sed 's / q = // g; s / + / / g; s /% / 22 "/ g; s /% 20/ / g; '|#reformat do czytelnej formie cut -d "& amp;"-f 1 |#strip się inne parametry awk '{print $ 0 "
"}' #add
przerwy połączyć, ponieważ planujemy wyjście do strony internetowej
== Stwórzmy GUI otoki PHP
HTML to teraz ==Aby uczynić to łatwo wykorzystanie chcemy uzyskać dostęp do danych użytkownika zapytań ze strony internetowej formularz wyszukiwania.
queries.php
& lt; title & gt; zapytań użytkowników & lt; / title & gt;& Lt; meta name = "robots" content = "noindex" & gt;
& lt; forma name = "sform" method = "get" & gt;Szukaj Tytuł: & lt; size = wartość wejścia "80" = "& lt; php echo $ _GET [ 'title']; & gt;"name = "title" type = "text" & gt;& Lt; wartość wejściowa = "Szukaj" type = "submit" & gt;WSKAZÓWKA: Możesz używać tytułu częściowej lub nawet regex jak & lt; / form & gt; "Samsung * szkód."
$ title = $ _GET [ 'title'];$ Title = preg_replace( "/ jak / i", "", $ title);$ TITLE2 = str_replace( "", "\ +", $ title);$ TITLE2 = str_replace( "_", "\ +", $ TITLE2);
$ bigcmd = & lt; & lt; & lt; EOF
egrep -i "(q | p) =" |#use Tylko rekordy, które prawdopodobnie mają zapytań sed 's / 22% / "/ g; s / 20% / + / g; s / _ / + / g;' | #Do pewne zmiany formatowania, a co najważniejsze zmienić wszystkie przestrzenielub podkreśla do + egrep -i "$ TITLE2" | #search dla Title2 awk '{print $ 11}' | #extract przeszukiwać dane sed 's / p = / q = / ig' | #handle yahoo p = awk -F'q =' '{print $ 2}' | #grab wszystkie dane zaczynające się na Q = sed 's / q = // g; s / + / / g; s /% / 22 "/ g; s /% 20 // g; '|#reformat do czytelnej formie cut -d "& amp;"-f 1 |#strip się inne parametry awk '{print $ 0 ""}' #add
linku przerwy bo planują wyjście na stronie internetowej
EOF;
jeśli "{print
wyszukiwania" $ tytułem "..."( $ title = "!)";print "bieżącego tygodnia. ..";drukuj `cat /var/log/virtualmin/visihow.com_access_log |#Get Dane z logów dostępowych $ bigcmd `;// Wspieramy p = bo również yahoo używa tego. .. dziwne kaczki lol for( $ i = 1; I $ & lt; 6; $ i ++){ print "
$ i tydzień( y)
";wydrukować `zcat /var/log/virtualmin/visihow.com_access_log.$i.gz |#Get Dane z logów dostępowych $ bigcmd `;}
} & gt;
& lt; / eof
Znane problemy
grep jest podniesienie rekordy z danymi skierowania więc wraca niechciane rekordy.Na przykład, jeśli ktoś szuka "iPhone" a użytkownik był na stronie iPhone a następnie kliknąć, aby przejść do strony Samsung, kod ten podnosi iPhone z polecający a zatem obejmuje te dane, które nie powinny.Pracuję w wersji 2, które ma o wiele więcej i będzie naprawić ten błąd, przenosząc znaczną część przetwarzania wstępnego wiersza poleceń w php.Kod będzie bardziej tępy, ale daje o wiele bardziej użyteczne i dokładne dane.
Version 2: Mniej przerób wiersz poleceń i bardziej przetwarzania php
Ta wersja ma następujące zalety / wady:
- Mniej linii poleceń przerób oznacza już kod
- Więcej php oznacza większą kontrolę i dysponuje
- Ignoruje wiele zduplikowanych wnioski z tego samego ip
- Counts wielokrotne wyszukiwania zamiast wymieniając je wielokrotnie
- Pokaż informacje dotyczące trendów wyświetlając tygodniowe podsumowania
- wyjściowa jestw przewijalnych div na łatwe przeglądanie popularnych stron
- klasyfikowane według długości zapytań wyniosła, co w przybliżeniu oznacza bardziej popularne strony pokazują pierwszy
- odrobinie szybkie i brudne javascript & amp;css, aby auto DIV poszerzyć o szczegółowe przeglądanie
& lt; title & gt; user Pytania & lt; / title & gt;& Lt; meta name = "robots" content = "noindex" & gt;
& lt; forma name = "sform" method = "get" & gt;Szukaj Tytuł: & lt; size = wartość wejścia "80" = "& lt;? Php
if( strlen( $ _ GET [ 'title']) & gt; 0){
echo $ _GET [ 'title'];
} else{
echo "*"; & lt; br = "" type = "text" & gt;} & gt;? "name = "title" / & gt;& Lt; wartość wejściowa = "Szukaj" type = "submit" & gt;
WSKAZÓWKA: Wprowadź * aby zobaczyć wszystko.Można użyć częściowej lub nawet tytuł regex jak "Samsung * obrażenia". & lt; / form & gt;
sortbylen( $ a, $ b){ return
strlen( $ b) -strlen( $ a);}
$ title = $ _GET [ 'title'];$ Title = preg_replace( "/ jak / i", "", $ title);$ TITLE2 = str_replace( "", "\ +", $ title);$ TITLE2 = str_replace( "_", "\ +", $ TITLE2);
$ bigcmd = & lt; & lt; & lt; EOF
egrep -i "(q | p) =" |#use Tylko rekordy, które prawdopodobnie mają zapytań sed 's / 22% / "/ g; s / 20% / + / g; s / _ / + / g;' | #Do pewne zmiany formatowania, a co najważniejsze zmienić wszystkie przestrzenielub podkreśla do + awk '{print $ 1 "" $ 7 "" $ 11}' | egrep -i "$ TITLE2" #search dla Title2EOF;
if( $ title = ""){ print
"Wyszukiwanie" $ tytułem "..."; for( $ 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 jako $ sData){ $ logparts = explode( "", $ sdata); $ ip = $ logparts [0]; $ url = $ logparts[1]; preg_match( "/( q | p) =( *).?"( \ & amp; |? $) / ", $ logparts [2], $ pasuje);$ Ss = urldecode( $ matches [2]);$ Ss = str_replace( "+", "", $ ss);if( (strlen( trim( $ SS)) & gt; 3) & amp; & amp;( preg_match( "# http \: \ / \ / # i", $ ss))!){ // ustąpić URL z wyszukiwania witrynif( ($ ip = $ warga) ||( $ ss = $ LSS)!){ $ warga = $ ip;$ LSS = $ ss;$ Ssdata [ "$ url"] = "$ ss |.";}}} Uasort( $ array "sortbylen ');foreach( $ ssdata jako $ key = & gt; $ value){ $ Sarr = explode( "|", $ value);foreach( $ Sarr jak s $){ if( strlen( $ s) & gt; 0) $ s2 [$ s] ++;} Arsort( $ s2);foreach( $ s2 jako $ Klawisz2 = & gt; $ wart2){ $ urldata [$ key] [$ i] = "$ wart2: $ klucz2.";$ STOT [$ key] [$ i] + = $ wart2;} Rozbrojony( $ s2);} Rozbrojony( $ ssdata);} Foreach( $ urldata jako $ url = & gt; $ weekdata){ print " & lt; a target =" _ blank "href =" $ url "& gt; $ url & lt; / a & gt;
";$ Wk = 0;... Foreach( $ weekdata jako $ tygodniowo){ print "
" $ wk ++ "TYDZIEŃ( y): Wszystkich Wyszukiwania =" $ 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 gray; overflow: scroll '& gt; $ tygodni ";}}}
& gt;
& lt; / eof
zrobienia
Sortuj według długości kwerendy jako drugi rodzaj, przy dłuższych zapytań pierwszy
to wszystko.Bardzo chciałbym usłyszeć wasze doświadczenia z tym kodem lub sugestie dotyczące poprawy.
Tips Tricks & amp;Ostrzeżenia
- Uwaga: Popieram p = a także, a średnia q = ponieważ Yahoo jest dziwne kaczki to wykorzystuje p =
- Wersja 2 php jest bardziej złożona, a ja tak kodowania szybka niektórych zmiennychnazwy zostały wybrane słabo.proszę nie narzekać, jako swym wolnym kodzie.Ale jeśli chcesz naprawić go i udokumentować go i dodać go do wiki w wersji 3, która byłaby fantastyczna:) Podaj dalej!
- Jeśli masz problemy z którymkolwiek z tych etapów, zadać pytanie, aby uzyskać pomoc lub pisać w komentarzach poniżej.
Komentarze
| Daniel Ciekawa Autor 69 Artykuły Rozpoczęte 2,601 art edytuje 24,290 Punkty |
Daniel jest opisywany Autor z VisiHow,Daniel osiągnął poziom "porucznik" z 24,290 punktów.Daniel rozpoczął 69 artykułów i wykonane 2,601 artykułów edycji.17,578 osób Przeczytałem składki Daniela artykułu. |
Daniel : | Cześć, nazywam się Daniel. |
Daniel : | mogę pomóc z problemem o "Łatwo analizowania / wyszukiwać ciągi zapytań wyszukiwania stronie internetowej jest od apache dzienniki używając php awk i sed narzędzi wiersza polecenia Linux"? |