14Aug

Łatwo analizowania / wyszukiwać ciągi zapytaniem stronie internetowej z dzienników za pomocą apache php awk i sed narzędzia wiersza poleceń Linuksa

6 części: Stosować awk i sed do analizowania logów apache dla wpisywanych przez użytkownika zapytań znanych problemów Wersja 2: Mniej wyprzedzającym wiersza poleceń i przetwarzania php zrobienia więcej Tips Tricks & amp;Ostrzeżenia Uwagi

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.

Czy ta była pomocna?Tak |Nie |Potrzebuję pomocy
Zawartość
  • 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
Ad

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

Czy ta była pomocna?Tak |Nie |Potrzebuję pomocy

== 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."

Czy ta była pomocna?Tak |Nie |Potrzebuję pomocy

$ 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;

Czy ta była pomocna?Tak |Nie |Potrzebuję pomocy

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;

Czy ta była pomocna?Tak |Nie |Potrzebuję pomocy

& 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.

Czy ta była pomocna?Tak |Nie |Potrzebuję pomocy

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;

Czy ta była pomocna?Tak |Nie |Potrzebuję pomocy funkcji

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 Title2

EOF;

Czy ta pomocne Tak | Nie | potrzebuję pomocy
?

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;

Czy ta była pomocna?Tak |Nie |Potrzebuję pomocy

& 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

VisiHow wita wszystkie komentarze .Jeśli nie chcesz być anonimowy, zarejestrować lub zalogować. To jest wolny.




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.
Zapytaj Daniel
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"?
Zebrane