####################################################
# #
# BARS - IP ranges statistics âåðñèÿ 1.4 #
# #
####################################################
Ïðîãðàììà ïðåäíàçíà÷åíà äëÿ ñáîðà è àíàëèçà ñòàòèñòèêè ïîñåùåíèé íåñêîëüêèõ ñàéòîâ, ðàñïîëîæåííûõ íà îäíîì ñåðâåðå, ïîëüçîâàòåëÿìè ðàçëè÷íûõ ïðîâàéäåðîâ, ñåòåé, îðãàíèçàöèé, ðåãèîíîâ è äð. Äàííûå áåðóòñÿ èç ñòàíäàðòíûõ ëîãîâ Apache, ðåçóëüòàòû õðàíÿòñÿ â âèäå html-ôàéëîâ.
- Îïèñàíèå ïðîãðàììû.
Ïðîãðàììà ñîçäà¸ò ãðàôè÷åñêèå îò÷¸òû (ãèñòîãðàììû è ãðàôèêè) ïî êîëè÷åñòâó çàïðîñîâ êàæäîãî ñàéòà îò ïîëüçîâàòåëåé ðàçëè÷íûõ ñåòåé, ïî òðàôôèêó è ïî êîëè- ÷åñòâó óíèêàëüíûõ IP-àäðåñîâ ïîñåòèòåëåé ñàéòà çà ïîñëåäíèå 7 äíåé è çà ïðîøåä- øèé ãîä. Êðîìå òîãî, ýòè æå âåëè÷èíû ïðèâîäÿòñÿ â ñóììå ïî âñåì ñàéòàì, à òàêæå äîëÿ ñàéòà ïî êàæäîé èç âåëè÷èí â îáùåé ñòàòèñòèêå.
Òàêæå 1 ÿíâàðÿ êàæäîãî ãîäà ïðîãðàììà ñîçäà¸ò ãîäîâîé îò÷¸ò ñ óñðåäíåíèåì âñåõ âåëè÷èí ïî äíÿì íåäåëè è ïî ìåñÿöàì è ñîõðàíÿåò àðõèâ ñ äàííûìè çà ïðîøåä- øèé ãîä.
Âñå ðèñóíêè ñíàáæåíû ïîäñêàçêàìè äëÿ óäîáñòâà ïðîñìîòðà è ðàáîòû ñ äàííûìè. Ïðîãðàììà ñîçäà¸ò îò÷¸ò î ðàáîòå è çàïèñûâàåò åãî â óêàçàííûé â êîíôèãóðà- öèè ôàéë. Îò÷¸ò õðàíèòñÿ â òå÷åíèå 30 äíåé, ïîòîì àâòîìàòè÷åñêè îòðåçàåòñÿ.
2. Òðåáîâàíèÿ ïðîãðàììû.
Ïðîãðàììà ðàáîòàåò â Unix-ñèñòåìàõ, íàïèñàíà íà ÿçûêå Perl, ñîçäà¸ò html- îò÷¸òû è èçîáðàæåíèÿ â ôîðìàòå PNG. Äëÿ å¸ ðàáîòû íåîáõîäèìî, ÷òîáû â ñèñòåìå áûëà óñòàíîâëåíà ñòàíäàðòíàÿ GD-áèáëèîòåêà ñ ïîääåðæêîé àëôàâèòà òîãî ÿçûêà, íà êîòîðîì áóäóò ãåíåðèðîâàòüñÿ îò÷¸òû. Òàêæå íåîáõîäèìî óñòàíîâèòü ìîäóëü GD.pm.
Äëÿ ïðîñìîòðà ðåçóëüòàòîâ ÷åðåç www íåîáõîäèìî âûäåëèòü îòäåëüíûé êàòàëîã èëè ïîäêàòàëîã êàêîãî-ëèáî ñàéòà, â êîòîðîì îíè áóäóò äîñòóïíû, è ñîîòâåòñòâóþ- ùèì îáðàçîì íàñòðîèòü ñêðèïò çàïóñêà ïðîãðàììû (ñì. íèæå).
Ôîðìàò ëîãîâ Apache-ñåðâåðà ïðîãðàììà îïðåäåëÿåò ïî ñîîòâåòñòâóþùåé çàïèñè â åãî êîíôèãóðàöèîííîì ôàéëå (httpd.conf). Äëÿ óñïåøíîãî ÷òåíèÿ ëîãîâ ïðîãðàì- ìîé â íèõ îáÿçàòåëüíî äîëæíû ïðèñóòñòâîâàòü ïîëÿ HOST (IP-àäðåñ êëèåíòà), BYTE (îáú¸ì îòîñëàííîé èíôîðìàöèè), REQUEST (ñòðîêà çàïðîñà), DATETIME (âðåìÿ çàïðî- ñà), ïðî÷èå ïîëÿ íå èñïîëüçóþòñÿ. Çíà÷åíèÿ ñëåäóþùèõ ïîëåé â ñòðîêå ëîãà äîëæíû áûòü çàêëþ÷åíû â äâîéíûå êàâû÷êè (åñëè ïðèñóòñòâóþò): REQUEST, REFERER, UAGENT (user agent).
Àðõèâíûå ëîã-ôàéëû äîëæíû íàõîäèòüñÿ â òåõ æå êàòàëîãàõ, ÷òî è òåêóùèå.
3. Êîíôèãóðèðîâàíèå ïðîãðàììû.
Äëÿ ðàáîòû ïðîãðàììå íåîáõîäèìî 2 ôàéëà: ôàéë êîíôèãóðàöèè ïðîãðàììû è ôàéë ñî âñåìè íåîáõîäèìûìè òåêñòîâûìè âñòàâêàìè íà íóæíîì ÿçûêå.
Ôîðìàò ôàéëîâ:
3.1. Êîíôèãóðàöèîííûé ôàéë ïðîãðàììû.
Òåêñòîâûé ôàéë, ñîñòîÿùèé èç ÷åòûð¸õ ðàçäåëîâ:
Configuration - ïóòè è èìåíà ôàéëîâ, ñ êîòîðûìè ðàáîòàåò ïðîãðàììà
Filter è Exclude - ôèëüòðàöèÿ ëîãîâ
Providers - òàáëèöà, îïèñûâàþùàÿ äèàïàçîíû àäðåñîâ, íîìåðà è öâåòà ñåòåé
Êàæäûé ðàçäåë íà÷èíàåòñÿ ñ îòêðûâàþùåãî òåãà <Èìÿ> è çàêàí÷èâàåòñÿ çàêðûâà- þùèì òåãîì </Èìÿ>.  ôàéëå äîïóñòèìû êîììåíòàðèè, êîòîðûå íà÷èíàþòñÿ ñ ñèìâîëà ''. Äåéñòâèå ñèìâîëà '' ðàñïðîñòðàíÿåòñÿ äî êîíöà ñòðîêè.
3.1.1. Ðàçäåë Configuration
 êàæäîé ñòðîêå çàäà¸òñÿ èìÿ ïàðàìåòðà è ÷åðåç ïðîáåë åãî çíà÷åíèå (áåç êà- âû÷åê). Íåîáõîäèìî çàäàòü ñëåäóþùèå ïàðàìåòðû: ApacheConfigurationFile - ïîëíûé ïóòü è èìÿ ôàéëà êîíôèãóðàöèè Apache MainStorageFile - ïîëíûé ïóòü è èìÿ ôàéëà, õðàíÿùåãî ñîáðàííûå äàííûå ProgramReportFile - ïîëíûé ïóòü è èìÿ ôàéëà ñ îò÷¸òîì î ðàáîòå ïðîãðàììû TemporaryFile - ïîëíûé ïóòü è èìÿ âðåìåííîãî ôàéëà, ñîçäàâàåìîãî ïðîãðàììîé â
ïðîöåññå ðàáîòû äëÿ ðàñïàêîâêè ëîã-àðõèâîâ TargetDirectory - ïîëíûé ïóòü ê êàòàëîãó, êóäà áóäóò âûêëàäûâàòüñÿ html-îò÷¸òû LanguageFile - ïîëíûé ïóòü è èìÿ ÿçûêîâîãî ôàéëà LogFiles - ñïèñîê èì¸í àðõèâíûõ ëîã-ôàéëîâ, ðàçäåë¸ííûõ ïðîáåëàìè
Ðåàêöèÿ ïðîãðàììû íà îøèáêè â ðàçäåëå: îñòàíîâêà è âûäà÷à ñîîáùåíèÿ îá îøèáêå.
3.1.2. Ðàçäåë Filter
 êàæäîé ñòðîêå çàäà¸òñÿ èìÿ ïîëÿ ëîãà è ÷åðåç ïðîáåë åãî çíà÷åíèå. Êàæäîå
çíà÷åíèå äîëæíî áûòü çàêëþ÷åíî â äâîéíûå êàâû÷êè, åñëè íåîáõîäèìî ñðàâíèâàòü ñ
íèì öåëèêîì, èëè â ñèìâîëû '/', åñëè îíî áóäåò òðàêòîâàòüñÿ, êàê ðåãóëÿðíîå âû-
ðàæåíèå. Åñëè äëÿ îäíîãî ïîëÿ íåîáõîäèìî çàäàòü íåñêîëüêî çíà÷åíèé, êàæäîå èç
íèõ äîëæíî áûòü çàäàíî íà îòäåëüíîé ñòðî÷êå. Ñòðîêè ðàçäåëà îáúåäèíåíû ëîãè÷åñ-
êèì ÈËÈ, ò.å. ñòðîêà ëîãà áóäåò ó÷èòûâàòüñÿ ïðîãðàììîé, åñëè óäîâëåòâîðÿåò õîòÿ
áû îäíîìó óñëîâèþ. Èìåíà ïîëåé:
HOST - IP-àäðåñ ïîñåòèòåëÿ
LOGIN - ëîãèí ïîñåòèòåëÿ
USER - èìÿ ïîëüçîâàòåëÿ
DATETIME - äàòà è âðåìÿ çàïðîñà
REQUEST - ñòðîêà çàïðîñà
OSTATUS - íà÷àëüíûé ñòàòóñ ñåññèè
LSTATUS - êîíå÷íûé ñòàòóñ ñåññèè
BYTE - êîëè÷åñòâî ïåðåäàííîé ñåðâåðîì èíôîðìàöèè â áàéòàõ
FILENAME - èìÿ ôàéëà
ADDR - IP-àäðåñ
PORT - ïîðò
PROC - ID ïðîöåññà
SEC - âðåìÿ îòâåòà â ñåêóíäàõ
URL - URL
HOSTNAME - hostname
REFERER - ñòðîêà REFERER çàïðîñà
UAGENT - àãåíò ïîëüçîâàòåëÿ
Ïðèìåð:
LSTATUS "200"
LSTATUS "206"
Ðåàêöèÿ ïðîãðàììû íà îøèáêè â ðàçäåëå: ñòðîêè ñ îøèáêàìè èãíîðèðóþòñÿ.
3.1.3. Ðàçäåë Exclude.
Òàêîé æå ôîðìàò, êàê è ó ïðåäûäóùåãî ðàçäåëà, íî ïðîãðàììà íå ó÷èòûâàåò ëî- ãè, ó êîòîðûõ çíà÷åíèå õîòÿ áû îäíîãî èç óêàçàííûõ ïîëåé ñîâïàäàåò ñ îäíèì èç ïåðå÷èñëåííûõ äëÿ íåãî çíà÷åíèé. Ðåàêöèÿ ïðîãðàììû íà îøèáêè àíàëîãè÷íàÿ.
Ïðèìåð:
REQUEST /^(?:OPTIONS|PUT|DELETE|TRACE|CONNECT)/
3.1.4. Ðàçäåë Providers
Êàæäàÿ ñòðîêà îïèñûâàåò îäèí íåïðåðûâíûé äèàïàçîí IP-àäðåñîâ. Ôîðìàò ñòðîêè: startIP;endIP;number;R,G,B;name
ãäå startIP - íà÷àëüíûé àäðåñ äèàïàçîíà,
endIP - êîíå÷íûé àäðåñ äèàïàçîíà,
number - íîìåð ãðóïïû ñåòåé,
R,G,B - äåñÿòè÷íûå ÷èñëà îò 0 äî 255, îïèñûâàþùèå öâåò, â êîòîðûé áóäóò îê-
ðàøåíû ñîîòâåòñòâóþùèå äàííîé ãðóïïå ñòîëáöû ãèñòîãðàìì è êðèâûå ãðàôèêîâ,
name - íàçâàíèå ãðóïïû/ïðîâàéäåðà (æåëàòåëüíî íå áîëåå 20 ñèìâîëîâ).
Íîìåðà ãðóïï ñåòåé íà÷èíàþòñÿ ñ 1 è äîëæíû èäòè ïîñëåäîâàòåëüíî, ò.å. íå äîëæíî áûòü ïðîïóùåííûõ íîìåðîâ. Åñëè ó îäíîé ãðóïïû íåñêîëüêî äèàïàçîíîâ àäðå- ñîâ, èõ íóæíî ïåðå÷èñëèòü îäèí çà äðóãèì, â êàæäîé ñòðîêå óêàçûâàÿ íîìåð, öâåò è èìÿ, êàê òðåáóåòñÿ ïî ôîðìàòó. Ïðèìåð ñòðîêè: 194.135.0.0;194.135.255.255;5;204,172,32;Ðåëêîì
Ðåàêöèÿ ïðîãðàììû íà îøèáêè â ðàçäåëå:
1) Åñëè äèàïàçîíû áóäóò çàäàíû ñ ïåðåêðûòèåì, ïðîãðàììà áóäåò ñ÷èòàòü ïðîâåðÿå-
ìûé IP-àäðåñ ïðèíàäëåæàùèì ïîñëåäíåìó (ïî ðàñïîëîæåíèþ â êîíôèãóðàöèîííîì ôàé-
ëå) äèàïàçîíó, â êîòîðûé îí ïîïàäàåò.
2) Ãðóïïà ñåòåé îïðåäåëÿåòñÿ íîìåðîì. Åñëè îäíîìó íîìåðó â ðàçíûõ ñòðîêàõ áóäóò
ñîîòâåòñòâîâàòü ðàçíûå èìåíà èëè öâåòà, áóäóò âçÿòû ïåðâûå âñòðåòèâøèåñÿ â ôàé-
ëå, ïðî÷èå - ïðîèãíîðèðîâàíû.
3) Ðåàêöèÿ ïðîãðàììû íà îøèáêè â ôîðìàòå ñòðîêè íåèçâåñòíà, ïîñêîëüêó íå ïðîâå-
ðÿëàñü. Ïîýòîìó ëó÷øå íå ðèñêîâàòü. :)
Äèàïàçîíû àäðåñîâ ìîæíî óçíàòü íà http://www.ripe.net
3.2. ßçûêîâîé ôàéë.
Êàæäàÿ ñòðîêà ôàéëà èìååò ôîðìàò
key^Tstring
ãäå key - êëþ÷åâîé íàáîð ñèìâîëîâ
^T - ñèìâîë òàáóëÿöèè
string - ñòðîêà òåêñòà
Ñòðîêà ìîæåò áûòü çàêîììåíòèðîâàíà, åñëè â íà÷àëå å¸ ïîñòàâèòü ñèìâîë #
ÂÍÈÌÀÍÈÅ! Ñòðîêà íå ìîæåò áûòü çàäîêóìåíòèðîâàíà ÷àñòè÷íî!
Ñàìûé ïðîñòîé ñïîñîá ñîçäàòü íîâûé ÿçûêîâîé ôàéë - ñêîïèðîâàòü óæå èìåþùèé- ñÿ ïîä äðóãèì èìåíåì è ïåðåâåñòè â í¸ì âñå ñòðîêè íà íóæíûé ÿçûê.
Ðåêîìåíäóåìîå èìÿ ôàéëà - lang-##-ENCODING
ãäå ## - äâóõñèìâîëüíîå îáîçíà÷åíèå ÿçûêà (en, ru, de, fr è ò.ä.)
ENCODING - êîäèðîâêà
íàïðèìåð, lang-ru-win1251
Ðåàêöèÿ ïðîãðàììû íà îøèáêè â êîíôèãóðàöèîííîì ôàéëå: êàê ïðàâèëî, áåçîáèä- íàÿ, îòñóòñòâóþùèé èëè íåïðàâèëüíûé êëþ÷ ïðîñòî íå áóäåò èíòåðïðåòèðîâàí, ñîîò- âåòñòâóþùàÿ íàäïèñü íå áóäåò ïîÿâëÿòüñÿ. Îäíàêî îøèáêè â îáîçíà÷åíèÿõ äíåé íå- äåëè è ìåñÿöåâ, ñêîðåå âñåãî, ïðèâåäóò ê çàâèñàíèþ ïðîãðàììû.
4. Çàïóñê ïðîãðàììû.
Ïðîãðàììà ñîñòîèò èç äâóõ ôàéëîâ - collect.pl è drawpage.pl. Ïåðâûé çàíèìà- åòñÿ ñáîðîì èíôîðìàöèè èç ëîãîâ, âòîðîé - ñîçäàíèåì îò÷¸òîâ ïî ñîáðàííîé èíôîð- ìàöèè. Çàïóñê ïðîãðàììû äîëæåí ïðîèçâîäèòüñÿ åæåñóòî÷íî ñêðèïòîì âðàùåíèÿ ëîãîâ ïîñëå àðõèâèðîâàíèÿ ëîãîâ. Ñíà÷àëà çàïóñêàåòñÿ collect.pl, çàòåì drawpage.pl.
Ïåðâàÿ ñòðîêà ôàéëîâ: "#!/usr/bin/perl". Ïðè íåîáõîäèìîñòè ñëåäóåò çàìåíèòü â íåé ïóòü ê èíòåðïðåòàòîðó Perl íà òîò, êîòîðûé ñòîèò â âàøåé ñèñòåìå.
Îáà ôàéëà çàïóñêàþòñÿ îäèíàêîâî. Îáùèé âèä ñòðîêè çàïóñêà: <full_path_to_script>/<script> <full_path_to_config_file>/<config_file> ãäå <full_path_to_script> - ïîëíûé ïóòü ê ñêðèïòó
<script> - collect.pl èëè drawpage.pl ñîîòâåòñòâåííî <full_path_to_config_file> - ïîëíûé ïóòü ê ôàéëó êîíôèãóðàöèè ïðîãðàììû <config_file> - èìÿ ôàéëà êîíôèãóðàöèè ïðîãðàììû
Ñïèñîê èì¸í êàòàëîãîâ ñàéòîâ ïîäà¸òñÿ ñêðèïòó íà STDIN Èìåíà â ñïèñêå ìîãóò áûòü ðàçäåëåíû ñèìâîëàìè ïåðåâîäà ñòðîêè, ',' èëè ';'.
5. Ïðèìåð èñïîëüçîâàíèÿ ïðîãðàììû.
Ïðåäïîëîæèì, ÷òî âñå ñàéòû íà âàøåì ñåðâåðå ëåæàò â êàòàëîãå /usr/www, èìå- íà ñàéòîâ è èìåíà êàòàëîãîâ ñîâïàäàþò. Êàòàëîãè ñàéòîâ îòëè÷àþòñÿ îò äðóãèõ êà- òàëîãîâ, íàïðèìåð, òåì, ÷òî â íèõ åñòü ïîäêàòàëîãè 'html'. Ïðîãðàììà è âñå å¸ ôàéëû ëåæàò â /usr/www/progs/bars, èìåíà ôàéëîâ: mainstore.tar.gz - ôàéë, â êîòîðîì õðàíÿòñÿ ñîáðàííûå äàííûå, mainstore - èìÿ âðåìåííîãî ôàéëà, â êîòîðûé îíè áóäóò ðàñïàêîâûâàòüñÿ íà âðåìÿ
ðàáîòû ïðîãðàììû,
bars.conf - ôàéë êîíôèãóðàöèè ïðîãðàììû.
Òîãäà shell-ñêðèïò äëÿ çàïóñêà ïðîãðàììû áóäåò âûãëÿäåòü òàê:
- tar -zxf /usr/www/progs/bars/mainstore.tar.gz -O > /usr/www/progs/bars/mainstore
- prov=``
- for site in `ls -d /usr/www/*/html | sed "s/\/usr\/www\///g" | sed "s/\/html//g"`
- do
- prov=$prov$site,
- done
- rm /usr/www/progs/bars/mainstore.tar.gz -f
- echo $prov | /usr/www/progs/bars/collect.pl /usr/www/progs/bars/bars.conf
- echo $prov | /usr/www/progs/bars/drawpage.pl /usr/www/progs/bars/bars.conf
- tar -zc --remove-files --ignore-failed-read -f /usr/www/progs/bars/mainstore.tar.gz /usr/www/progs/bars/mainstore
