WAS 기능이 없는 리버스 프록시 서버에서 awstats 를 설치를 하게 될경우 php 가 설치되어 있지 않기 때문에 오류가 발생 한다.
perl 은 설치가 되어 있기 때문에 awstats 배포 판의 받아 perl이 일정 시간 마다 html 문서를 일정 시간마다 갱신하도록 해서 사용 한다.
먼저 배포파일을 다운로드 받아 서버에 업로드 한다. https://awstats.sourceforge.io/#DOWNLOAD
1 2 3 |
~]# cd /usr/local ~]# tar xfzp awstats-7.8.tar.gz ~]# mv ./awstats-7.8 ./awstats |
awstats 플러그인중 3가지를 사용한다. 구글챠트API 는 별도 설치가 없다.
URI utf8 디코딩 및 geoip2 (.mmdb 파일) 사용을 위해 아래 방법 대로 설치 한다.
1 2 3 |
~]# dnf search perl-App-cpanminus ~]# cpanm GeoIP2::Database::Reader ~]# cpanm URI::Escape |
(perl-App-cpanminus 와 GeoIP2::Database::Reader 설치 할때 각각 약 100개 정도가 설치 된다.)
그 다음 awstats 의 콘피그를 실행 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
~]# /usr/local/awstats/tools/awstats_configure.pl ----- AWStats awstats_configure 1.0 (build 20140126) (c) Laurent Destailleur ----- This tool will help you to configure AWStats to analyze statistics for one web server. You can try to use it to let it do all that is possible in AWStats setup, however following the step by step manual setup documentation (docs/index.html) is often a better idea. Above all if: - You are not an administrator user, - You want to analyze downloaded log files without web server, - You want to analyze mail or ftp log files instead of web log files, - You need to analyze load balanced servers log files, - You want to 'understand' all possible ways to use AWStats... Read the AWStats documentation (docs/index.html). -----> Running OS detected: Linux, BSD or Unix -----> Check for web server install Enter full config file path of your Web server. Example: /etc/httpd/httpd.conf Example: /usr/local/apache2/conf/httpd.conf Example: c:\Program files\apache group\apache\conf\httpd.conf Config file path ('none' to skip web server setup): > none Your web server config file(s) could not be found. You will need to setup your web server manually to declare AWStats script as a CGI, if you want to build reports dynamically. See AWStats setup documentation (file docs/index.html) -----> Update model config file '/usr/local/awstats/wwwroot/cgi-bin/awstats.model.conf' File awstats.model.conf updated. -----> Need to create a new config file ? Do you want me to build a new AWStats config/profile file (required if first install) [y/N] ? y -----> Define config file name to create What is the name of your web site or profile analysis ? Example: www.mysite.com Example: demo Your web site, virtual server or profile name: > www.enteroa.com -----> Define config file path In which directory do you plan to store your config file(s) ? Default: /etc/awstats Directory path to store config file(s) (Enter for default): > -----> Create config file '/etc/awstats/awstats.www.enteroa.com.conf' Config file /etc/awstats/awstats.www.enteroa.com.conf created. -----> Add update process inside a scheduler Sorry, configure.pl does not support automatic add to cron yet. You can do it manually by adding the following command to your cron: /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -update -config=www.enteroa.com Or if you have several config files and prefer having only one command: /usr/local/awstats/tools/awstats_updateall.pl now Press ENTER to continue... A SIMPLE config file has been created: /etc/awstats/awstats.www.enteroa.com.conf You should have a look inside to check and change manually main parameters. You can then manually update your statistics for 'www.enteroa.com' with command: > perl awstats.pl -update -config=www.enteroa.com You can also build static report pages for 'www.enteroa.com' with command: > perl awstats.pl -output=pagetype -config=www.enteroa.com Press ENTER to finish... |
위 코드중 강조된 부분 은 문답 부분이며 사용하려는 사이트에 맞게 입력 값이 달라 질수 있다.
콘피그가 완료 되면 /etc/awstats/awstats.www.enteroa.com.conf
파일이 생성 된다.
해당 파일의 내용을 아래와 같이 수정 한다. (일부 기본적인 설정만 사용하도록 했음.)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 |
LogFile="/var/log/nginx/access.log" LogType=W LogFormat=1 LogFormat = "%virtualname %host %other %logname %time1 %methodurl %code %bytesd %refererquot %uaquot" #LogFormat = "%host %other %logname %time1 %methodurl %code %bytesd %refererquot %uaquot" LogSeparator=" " SiteDomain="www.enteroa.com" HostAliases="enteroa.com" DNSLookup=2 DynamicDNSLookup=0 DirData="/var/lib/awstats" DirCgi="/cgi-bin" DirIcons="/icon" AllowToUpdateStatsFromBrowser=0 AllowFullYearView=2 EnableLockForUpdate=0 DNSStaticCacheFile="dnscache.txt" DNSLastUpdateCacheFile="dnscachelastupdate.txt" SkipDNSLookupFor="" AllowAccessFromWebToAuthenticatedUsersOnly=0 AllowAccessFromWebToFollowingAuthenticatedUsers="" AllowAccessFromWebToFollowingIPAddresses="" CreateDirDataIfNotExists=0 BuildHistoryFormat=text BuildReportFormat=html SaveDatabaseFilesWithPermissionsForEveryone=0 PurgeLogFile=0 ArchiveLogRecords=0 KeepBackupOfHistoricFiles=0 DefaultFile="index.php index.html" SkipHosts="localhost 127.0.0.1 내부.네트워크.서버.아이피 외부.네트워크.서버.아이피" SkipUserAgents="" SkipFiles="" SkipReferrersBlackList="" OnlyHosts="" OnlyUserAgents="" OnlyUsers="" OnlyFiles="" NotPageList="css js class gif jpg jpeg png bmp ico rss xml swf eot woff woff2" ValidHTTPCodes="200 304" ValidSMTPCodes="1 250" TrapInfosForHTTPErrorCodes = "400 403 404" AuthenticatedUsersNotCaseSensitive=0 URLNotCaseSensitive=0 URLWithAnchor=0 URLQuerySeparators="?;" URLWithQuery=0 URLWithQueryWithOnlyFollowingParameters="" URLWithQueryWithoutFollowingParameters="" URLReferrerWithQuery=0 WarningMessages=1 ErrorMessages="" DebugMessages=0 NbOfLinesForCorruptedLog=50 WrapperScript="" DecodeUA=0 MiscTrackerUrl="/js/awstats_misc_tracker.js" LevelForBrowsersDetection=2 # 0 disables Browsers detection. LevelForOSDetection=2 # 0 disables OS detection. LevelForRefererAnalyze=2 # 0 disables Origin detection. LevelForRobotsDetection=2 # 0 disables Robots detection. LevelForSearchEnginesDetection=2 # 0 disables Search engines detection. LevelForKeywordsDetection=2 # 0 disables Keyphrases/Keywords detection. LevelForFileTypesDetection=2 # 0 disables File types detection. LevelForWormsDetection=0 # 0 disables Worms detection. UseFramesWhenCGI=1 DetailedReportsOnNewWindows=1 Expires=0 MaxRowsInHTMLOutput=10000 Lang="auto" DirLang="./lang" ShowMenu=1 ShowSummary=UVPHB ShowMonthStats=UVPHB ShowDaysOfMonthStats=VPHB ShowDaysOfWeekStats=PHB ShowHoursStats=PHB ShowDomainsStats=PHB ShowHostsStats=PHBL ShowAuthenticatedUsers=0 ShowRobotsStats=HBL ShowWormsStats=0 ShowEMailSenders=0 ShowEMailReceivers=0 ShowSessionsStats=1 ShowPagesStats=PBEX ShowFileTypesStats=HB ShowFileSizesStats=0 ShowDownloadsStats=HB ShowOSStats=1 ShowBrowsersStats=1 ShowScreenSizeStats=0 ShowOriginStats=PH ShowKeyphrasesStats=1 ShowKeywordsStats=1 ShowMiscStats=a ShowHTTPErrorsStats=1 ShowHTTPErrorsPageDetail=R ShowSMTPErrorsStats=0 ShowClusterStats=0 AddDataArrayMonthStats=1 AddDataArrayShowDaysOfMonthStats=1 AddDataArrayShowDaysOfWeekStats=1 AddDataArrayShowHoursStats=1 IncludeInternalLinksInOriginSection=0 MaxNbOfDomain = 10 MinHitDomain = 1 MaxNbOfHostsShown = 10 MinHitHost = 1 MaxNbOfLoginShown = 10 MinHitLogin = 1 MaxNbOfRobotShown = 10 MinHitRobot = 1 MaxNbOfDownloadsShown = 10 MinHitDownloads = 1 MaxNbOfPageShown = 10 MinHitFile = 1 MaxNbOfOsShown = 10 MinHitOs = 1 MaxNbOfBrowsersShown = 10 MinHitBrowser = 1 MaxNbOfScreenSizesShown = 5 MinHitScreenSize = 1 MaxNbOfWindowSizesShown = 5 MinHitWindowSize = 1 MaxNbOfRefererShown = 10 MinHitRefer = 1 MaxNbOfKeyphrasesShown = 10 MinHitKeyphrase = 1 MaxNbOfKeywordsShown = 10 MinHitKeyword = 1 MaxNbOfEMailsShown = 20 MinHitEMail = 1 FirstDayOfWeek=1 ShowFlagLinks="" ShowLinksOnUrl=1 UseHTTPSLinkForUrl="" MaxLengthOfShownURL=64 HTMLHeadSection="" HTMLEndSection="" MetaRobot=0 Logo="awstats_logo6.png" LogoLink="http://www.awstats.org" BarWidth = 260 BarHeight = 90 StyleSheet="" color_Background="FFFFFF" color_TableBGTitle="CCCCDD" color_TableTitle="000000" color_TableBG="CCCCDD" color_TableRowTitle="FFFFFF" color_TableBGRowTitle="ECECEC" color_TableBorder="ECECEC" color_text="000000" color_textpercent="606060" color_titletext="000000" color_weekend="EAEAEA" color_link="0011BB" color_hover="605040" color_u="FFAA66" color_v="F4F090" color_p="4477DD" color_h="66DDEE" color_k="2EA495" color_s="8888DD" color_e="CEC2E8" color_x="C1B2E2" LoadPlugin="decodeutfkeys" LoadPlugin="graphgooglechartapi" LoadPlugin="geoip2_country /usr/share/GeoIP/GeoLite2-Country.mmdb" ExtraTrackedRowsLimit=500 |
분석 과 html 문서 서비스 제공에 필요한 폴더 를 생성하고 심볼릭링크를 생성한다.
1 2 3 |
~]# mkdir -p /var/lib/awstats ~]# mkdir -p /var/www/awstats/www.enteroa.com ~]# ln -s /usr/local/awstats/wwwroot/icon /var/www/awstats/www.enteroa.com/icon |
아래 명령으로 access_log 를 분석 한다.
1 |
~]# perl /usr/local/awstats/tools/awstats_updateall.pl now |
아래 명령으로 html 파일을 생성 한다.
1 2 3 4 5 |
~]# perl /usr/local/awstats/tools/awstats_buildstaticpages.pl -update \ -lang=ko \ -config=www.enteroa.com \ -dir=/var/www/awstats/www.enteroa.com/ \ -awstatsprog=/usr/local/awstats/cgi-bin/awstats.pl |
새롭게 생성한 폴더에 웹접근이 가능하도록 selinux (fcontext) 설정을 한다.
1 2 |
~]# semanage fcontext -a -t httpd_sys_content_t "/var/www/awstats(/.*)?" ~]# restorecon -rv /var/www/awstats |
nginx 에 http(:80) 가상호스트를 생성 한다.
1 2 3 4 5 6 7 8 9 10 |
server { listen *:80; server_name awstats.enteroa.com; location ^~ /.well-known/acme-challenge/ { root /var/www/html/; } location / { rewrite ^ https://$server_name$request_uri? permanent; } } |
Let’s encrypt 인증서를 생성 한다.
1 2 3 4 |
~]# certbot certonly --server https://acme-v02.api.letsencrypt.org/directory \ --rsa-key-size 4096 --agree-tos \ --email 자신의@이메일.주소 --webroot -w /var/www/html \ -d awstats.enteroa.com |
https(:443) 가상 호스트 설정을 추가 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
server { listen 443 ssl http2; server_name awstats.enteroa.com; root /var/www/awstats/www.enteroa.com/; index awstats.www.enteroa.com.html; allow 접근.허용할.클라이언트.아이피/32; deny all; location = /favicon.ico { access_log off; log_not_found off; } ssl_certificate /etc/letsencrypt/live/awstats.enteroa.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/awstats.enteroa.com/privkey.pem; quic_retry on; ssl_early_data on; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"; add_header Content-Security-Policy-Report-Only "default-src https:; script-src https: 'unsafe-eval' 'unsafe-inline'; style-src https: 'unsafe-inline'; img-src https: data:; font-src https: data:"; } |
수집된 정보로 html을 계속 생성해줘야 하기 때문에 위의 html 생성 명령어를 스크립트로 작성 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#!/bin/bash ### avoid overlap lockfile=/var/lock/$(basename $0) if [ -f $lockfile ];then P=$(cat $lockfile) if [ -n "$(ps --no-headers -f $P)" ];then exit 1 fi;fi echo $$ > $lockfile trap 'rm -f "$lockfile"' EXIT /bin/perl /usr/local/awstats/tools/awstats_buildstaticpages.pl -update \ -lang=ko \ -config=www.enteroa.com \ -dir=/var/www/awstats/www.enteroa.com/ \ -awstatsprog=/usr/local/awstats/cgi-bin/awstats.pl |
crontab -e 명령어로 일정 시간 마다 스크립트가 자동 실행 되도록 한다.
1 2 3 4 5 6 7 8 9 10 11 |
MAILTO="" # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * */10 * * * * perl /usr/local/awstats/tools/awstats_updateall.pl now # access_log analysis 59 * * * * bash /shell/awstats_nginx.sh # make awstats html page for nginx |
access_log 분석: 10분마다 || html 파일 생성: 매시 59분 마다.
분석 텀은 자유롭게 설정가능 하지만 할때 마다 자원을 소모 한다. 1분 마다 하면 문제 소지가 있겠다.
다만 분석 텀을 너무 길게 하면 분석할 데이터의 량이 증가 하기 작동 시간이 길이져 서버의 로드애버리지는 상승 시키는 문제가 생긴다.
때문에 웹서버 접속량에 따라 유동적으로 설정해야 한다.
PS. 기본적으로 awstats 의 경우 검색 엔진을 외국산은 잘 표현 하지만 국산 검색 포털은 표현해 주지 않는다.
이는 기본 제공 되는 브라우져 체크 라이브러리 파일에 /usr/local/awstats/wwwroot/cgi-bin/lib/search_engines.pm
한국의 검색 엔진이 없기 때문에…
한국 검색엔진은 기타에 포함 된다.
개인적으로 수정해서 쓰고 있는 search_engines.pm 파일을 아래 방법 대로 다운받아서 대체 하면 나온다. ‘ㅅ’a (naver, daum, nate, dreamwiz, korea.com)
1 2 3 |
~]# cd /usr/local/awstats/wwwroot/cgi-bin/lib ~]# mv -f search_engines.pm search_engines.pm_old ~]# curl https://www.enteroa.com/extra_files/search_engines.pm -O |