home *** CD-ROM | disk | FTP | other *** search
/ c't freeware shareware 1999 February / CT_SW9902.ISO / pc / software / admin / editoren / web_mac.tz / web_mac / README < prev    next >
Text File  |  1999-03-22  |  58KB  |  1,091 lines

  1. The Webalizer - A web server log file analysis tool
  2. Copyright 1997-1999 by Bradford L. Barrett (brad@mrunix.net)
  3.  
  4. Distributed under the GNU GPL.  See the files "COPYING" and
  5. "Copyright" supplied with the distribution for additional info.
  6.  
  7.  
  8. What is The Webalizer?
  9. ----------------------
  10.  
  11. The Webalizer is a web server log file analysis program which produces
  12. usage statistics in HTML format for viewing with a browser.  The results
  13. are presented in both columnar and graphical format, which facilitates
  14. interpretation.  Yearly, monthly, daily and hourly usage statistics are
  15. presented, along with the ability to display usage by site, URL, referrer,
  16. user agent (browser) and country (user agent and referrer are only
  17. available if your web server procduces Combined log format files).
  18.  
  19. The Webalizer supports CLF (common log format) log files, as well as
  20. Combined log formats as defined by NCSA and others, and variations
  21. of these which it attempts to handle intelligently.
  22.  
  23. This documentation applies to The Webalizer Version 1.22
  24.  
  25. Running the Webalizer
  26. ---------------------
  27.  
  28. The Webalizer was designed to be run from a Unix command line prompt or
  29. as a cron job.  There are several command line options which will modify
  30. the results it produces, and configuration files can be used as well.
  31. The format of the command line is:
  32.  
  33. webalizer [options ...] [log-file]
  34.  
  35. Where 'options' can be one or more of the supported command line
  36. switches described below.  'log-file' is the name of the log file
  37. to process (see below for more detailed information).
  38.  
  39.  
  40. Once executed, the general flow of the program follows:
  41.  
  42. o A default configuration file is scanned for.  A file named
  43.   'webalizer.conf' is searched for in the current directory, and if
  44.   found, it's configuration data is parsed.  If the file is not
  45.   present in the current directory,  the file '/etc/webalizer.conf'
  46.   is searched for and, if found, is used instead.
  47.  
  48. o Any command line arguments given to the program are parsed.  This
  49.   may include the specification of a configuration file, which is
  50.   processed at the time it is encountered.
  51.  
  52. o If a log file was specified, it is opened and made ready for
  53.   processing.  If no log file was given, STDIN is used for input.
  54.  
  55. o If an output directory was specified, the program does a 'chdir' to
  56.   that directory in prepration for generating output.  If no output
  57.   directory was given, the current directory is used.
  58.  
  59. o If no hostname was given, the program attempts to get the hostname
  60.   using a uname system call.  If that fails, 'localhost' is used.
  61.  
  62. o A history file is searched for.  This file keeps previous month
  63.   totals used on the main index.html page.  The default file is
  64.   named 'webalizer.hist', kept in the specified output directory,
  65.   however may be changed using the "HistoryName" configuration file
  66.   keyword.
  67.  
  68. o If incremental processing was specified, a data file is searched for
  69.   and loaded if found, containing the 'internal state' data of the
  70.   program at the end of a previous run.  The default file is named
  71.   'webalizer.current', kept in the specified output directory, however
  72.   may be changed using the "IncrementalName" configuration file keyword.
  73.  
  74. o Main processing begins on the log file.  If the log spans multiple
  75.   months, a seperate HTML document is created for each month.
  76.  
  77. o After main processing, the main 'index.html' page is created, which
  78.   has totals by month and links to each months HTML document.
  79.  
  80. o A new history file is saved to disk, which includes totals generated
  81.   by The Webalizer during the current run.
  82.  
  83. o If incremental processing was specified, a data file is written that
  84.   contains the 'internal state' data at the end of this run.
  85.  
  86.  
  87. Incremental Processing
  88. ----------------------
  89.  
  90. Version 1.2x of The Webalizer adds incremental run capability.  Simply
  91. put, this allows processing large log files by breaking them up into
  92. smaller pieces, and processing these pieces instead.  What this means
  93. in real terms is that you can now rotate your log files as often as you
  94. want, and still be able to produce monthly usage statistics without the
  95. loss of any detail.  This is accomplished by saving and restoring all
  96. relevant internal data to a disk file between runs.  Doing so allows the
  97. program to 'start where it left off' so to speak, and allows the
  98. preservation of detail from one run to the next.
  99.  
  100. Some special precautions need to be taken when using the incremental
  101. run capability of The Webalizer.  Configuration options should not be
  102. changed between runs, as that could cause corruption of the internal
  103. stored data.  For example, changing the MangleAgents level will cause
  104. different representations of user agents to be stored, producing invalid
  105. results in the user agents section of the report.  If you need to change
  106. configuration options, do it at the end of the month after normal
  107. processing of the previous month and before processing the current month.
  108. You may also want to delete the 'webalizer.current' file as well (or
  109. whatever name was specified using the "IncrementalName" configuration
  110. option).
  111.  
  112. The Webalizer also attempts to prevent data duplication by keeping
  113. track of the timestamp of the last record processed.  This timestamp
  114. is then compared to current records being processed, and any records
  115. that were logged previous to that timestamp are ignored.  This, in
  116. theory, should allow you to re-process logs that have already been
  117. processed, or process logs that contain a mix of processed/not yet
  118. processed records, and not produce duplication of statistics.  The
  119. only time this may break is if you have duplicate timestamps in two
  120. seperate log files... any records in the second log file that do have
  121. the same timestamp as the last record in the previous log file processed,
  122. will be discarded as if they had already been processed.  There are
  123. lots of ways to prevent this however, for example, stopping the web
  124. server before rotating logs will prevent this situation.  This setup
  125. also necessitates that you always process logs in chronological order,
  126. otherwise data loss will occur as a result of the timestamp compare.
  127.  
  128.  
  129. Command Line Options
  130. --------------------
  131.  
  132. The Webalizer supports many different configuration options that will
  133. alter the way the program behaves and generates output.  Most of these
  134. can be specified on the command line, while some can only be specified
  135. in a configuration file. The command line options are listed below,
  136. with references to the corresponding configuration file keywords.
  137.  
  138. --------------------------------------------------------------------------
  139.  
  140. General Options
  141. ---------------
  142.  
  143. -h        Display all available command line options and exit program.
  144.  
  145. -v        Display program version and exit program.
  146.  
  147. -d        Display additional 'debugging' information for errors and
  148.           warnings produced during processing.  This normally would
  149.           not be used except to determine why you are getting all those
  150.           errors and wanted to see the actual data.  Normally The
  151.           Webalizer will just tell you it found an error, not the
  152.           actual data.  This option will display the data as well.
  153.           Config file keyword: Debug
  154.  
  155. -g        Use GMT (UTC) time instead of local timezone.  Normally,
  156.           The Webalizer will display the time generated in the timezone
  157.           of the local machine, such as EDT or PST.  This switch will
  158.           cause the times to be displayed in GMT (UTC) time instead.
  159.           Config file keyword: GMTTime
  160.  
  161. -i        Ignore history file.  USE WITH CAUTION.  This causes The
  162.           Webalizer to ignore any existing history file produced from
  163.           previous runs and generate it's output from scratch.  The
  164.           effect will be as if The Webalizer is being run for the
  165.           first time and any previous statistics will be lost (although
  166.           the HTML documents, if any, will not be deleted) on the main
  167.           index.html (yearly) web page.
  168.           Config file keyword: IgnoreHist
  169.  
  170. -p        Preserve state (incremental processing).  This allows the
  171.           processing of partial logs in increments.  At the end of
  172.           the program, all relevant internal data is saved, so that
  173.           it may be restored the next time the program is run.  This
  174.           allows sites that must rotate their logs more than once a
  175.           month to still be able to use The Webalizer, and not worry
  176.           about having to gather and feed an entire months logs to
  177.           the program at the end of the month.  See the section on
  178.           "Incremental Processing" below for additional information.
  179.           The default is to not perform incremental processing.  Use
  180.           this command line option to enable the feature.
  181.           Config file keyword: Incremental
  182.  
  183. -q        Quiet mode.  Normally, The Webalizer will produce various
  184.           messages while it runs letting you know what it's doing.
  185.           This option will supress those messages.  It should be
  186.           noted that this WILL NOT supress errors and warnings, which
  187.           are output to STDERR.
  188.           Config file keyword: Quiet
  189.  
  190. -Q        ReallyQuiet mode.  This allows supression of _all_ messages
  191.           generated by The Webalizer, including warnings and errors.
  192.           Useful when The Webalizer is run as a cron job.
  193.           Config file keyword: ReallyQuiet
  194.  
  195. -T        Display timing information.  The Webalizer keeps track of the
  196.           time it begins and ends processing, and normally displays the
  197.           total processing time at the end of each run.  If quiet mode
  198.           (-q or 'Quiet yes' in configuration file) is specified, this
  199.           information is not displayed.  This option forces the display
  200.           of timing totals if quiet mode has been specified, otherwise
  201.           it is redundant and will have no effect.
  202.           Config file keyword: TimeMe
  203.  
  204. -c file   This option specifies a configuration file to use.  Configuration
  205.           files allow greater control over how The Webalizer behaves, and
  206.           there are several ways to use them.  As of version 0.98, The
  207.           Webalizer searches for a default configuration file in the
  208.           current directory named "webalizer.conf", and if not found,
  209.           will search in the /etc/ directory for a file of the same name.
  210.           In addition, you may specify a configuration file to use with
  211.           this command line option.
  212.  
  213. -n name   This option specifies the hostname for the reports generated.
  214.           The hostname is used in the title of all reports, and is also
  215.           prepended to URL's in the reports.  This allows The Webalizer
  216.           to be run on log files for 'virtual' web servers or web servers
  217.           that are different than the machine the reports are located on,
  218.           and still allows clicking on the URL's to go to the proper
  219.           location.  If a hostname is not specified, either on the
  220.           command line or in a configuration file, The Webalizer attempts
  221.           to determine the hostname using a 'uname' system call.  If this
  222.           fails, "localhost" will be used as the hostname.
  223.           Config file keyword: HostName
  224.  
  225. -o dir    This options specifies the output directory for the reports.
  226.           If not specified here or in a configuration file, the current
  227.           default directory will be used for output.
  228.           Config file keyword: OutputDir
  229.  
  230. -x name   This option allows the generated pages to have an extension
  231.           other than '.html', which is the default.  Do not include the
  232.           leading period ('.') when you specify the extension.
  233.           Config file keyword: HTMLExtension
  234.  
  235. -t name   This option specifies the title string for all reports.  This
  236.           string is used, in conjunction with the hostname (if not blank)
  237.           to produce the actual title.  If not specified, the default of
  238.           "Usage Statistics for" will be used.
  239.           Config file keyword: ReportTitle
  240.  
  241. -G        Supress hourly graph.  Normally, The Webalizer produces
  242.           hourly statistics in both Graph and Columnar forms.  This
  243.           option will supress the Hourly Graph only from being generated.
  244.           Config file keyword: HourlyGraph
  245.  
  246. -H        Supress Hourly statistics.  Normally, The Webalizer produces
  247.           hourly statistics in both Graph and Columnar forms.  This
  248.           option will supress the Hourly Statistics table only from
  249.           being generated.
  250.           Config file keyword: HourlyStats
  251.  
  252. -M num    Mangle user agent names.  Normally, The Webalizer will keep
  253.           track of the user agent field verbatim.  Unfortunately, there are
  254.           a ton of different names that user agents go by, and the field
  255.           also reports other items such as machine type and OS used. For
  256.           Example, Netscape 4.03 running on Windows 95 will report a
  257.           different string than Netscape 4.03 running on Windows NT, so even
  258.           though they are the same browser type, they will be considered
  259.           as two totally different browsers by The Webalizer.  For that
  260.           matter, Netscape 4.0 running on Windows NT will report different
  261.           names if one is run on an Alpha and the other on an Intel
  262.           processor!  Internet Exploder is even worse, as it reports itself
  263.           as if it were Netscape and you have to search the given string a
  264.           little deeper to discover that it is really MSIE!  In order to
  265.           consolidate generic browser types, this option will cause The
  266.           Webalizer to 'mangle' the user agent field, attempting to
  267.           consolidate generic browser types. There are 6 levels that can be
  268.           specified, each producing different levels of detail.  Level 5
  269.           displays only the browser name (MSIE or Mozilla) and the major
  270.           version number.  Level 4 will also display the minor version
  271.           number (single decimal place).  Level 3 will display the minor
  272.           version number to two decimal places.  Level 2 will add any
  273.           sub-level designation (such as Mozilla/3.01Gold or MSIE 3.0b).
  274.           Level 1 will also attempt to add the system type.  The default
  275.           Level 0 will disable name mangling and leave the user agent
  276.           field unmodified, producing the greatest amount of detail.
  277.           Configuration file keyword: MangleAgents
  278.  
  279.  
  280. Hide Options
  281. ------------
  282.  
  283. The following options take a string argument to use as a comparison
  284. for matching.  Except for the IndexAlias option, the string argument
  285. can be plain text, or plain text that either starts or ends with the
  286. wildcard character '*'.
  287.  
  288. For Example:
  289.  
  290. Given the string "yourmama/was/here", the arguments "was", "*here" and
  291. "your*" will all produce a match.
  292.  
  293.  
  294. -a name   This option allows hiding of user agents (browsers) from the
  295.           "Top User Agents" table in the report.  This option really
  296.           isn't too useful as there are a zillion different names that
  297.           current browsers go by, depending where they were obtained,
  298.           however you might have some particular user agents that hit
  299.           your site a lot that you would like to exclude from the list.
  300.           You must have a web server that includes user agents in it's
  301.           log files for this option to be of any use.  In addition, it
  302.           is also useless if you disable the user agent table in the
  303.           report (see the -A command line option or "TopAgents"
  304.           configuration file keyword). You can specify as many of these
  305.           as you want on the command line.  The wildcard character '*'
  306.           can be used either in front of or at the end of the string.
  307.           (ie: Mozilla/4.0* would match anything that starts with the
  308.           string "Mozilla/4.0").
  309.           Config file keyword: HideAgent
  310.  
  311. -r name   This option allows hiding of referrers from the "Top Referrer"
  312.           table in the report.  Referrers are URL's, either on your own
  313.           local site or a remote site, that refered the user to a URL
  314.           on your web server.  This option is normally used to hide
  315.           your own server from the table, as your own pages are usually
  316.           the top referrers to your own pages (well, you get the idea).
  317.           You must have a web server that includes referrer information
  318.           in the log files for this option to be of any use.  In addition,
  319.           it is also useless if you disable the referrers table in the
  320.           report (see the -R command line option or "TopReferrers"
  321.           configuration file keyword).  You can specify as many of these
  322.           as you like on the command line.
  323.           Config file keyword: HideReferrer
  324.  
  325. -s name   This option allows hiding of sites from the "Top Sites" table
  326.           in the report.  Normally, you will only want to hide your own
  327.           domain name from the report, as it usually is one of the top
  328.           sites to visit your web server.  This option is of no use if
  329.           you disable the top sites table in the report (see the -S
  330.           command line option or "TopSites" configuration file option).
  331.           Config file keyword: HideSite
  332.  
  333. -u name   This option allows hiding of URL's from the "Top URL's" table
  334.           in the report.  Normally, this option is used to hide images,
  335.           audio files and other objects your web server dishes out that
  336.           would otherwise clutter up the table.  This option is of no
  337.           use if you diable the top URL's table in the report (see the
  338.           -U command line option or "TopURLs" configuration file keyword).
  339.           Config file keyword: HideURL
  340.  
  341. -I name   This option allows you to specify additional index.html aliases.
  342.           The Webalizer usually strips the string 'index.' from URL's
  343.           before processing, which has the effect of turning a URL such
  344.           as /somedir/index.html into just /somedir/ which is really the
  345.           same URL and should be treated as such.  This option allows you
  346.           to specify _additional_ strings that are to be treated the same
  347.           way.  Use with care, improper use could cause unexpected resluts.
  348.           For example, if you specify the alias string of 'home', a URL
  349.           such as /somedir/homepages/brad/home.html would be converted
  350.           into just /somedir/ which probably isn't what was intended.
  351.           This option is useful if your web server uses a different default
  352.           index page other than the standard 'index.html' or 'index.htm',
  353.           such as 'home.html' or 'homepage.html'.  The string specified
  354.           is searched for _anywhere_ in the URL, so "home.htm" would
  355.           turn both "/somedir/home.htm" and "/somedir/home.html" into
  356.           just "/somedir/".  Go easy on this one, each string specified
  357.           will be scanned for in EVERY log record, so if you specify a
  358.           bunch of these, you will notice degraded performance.  Wildcards
  359.           are not allowed on this one.
  360.           Config file keyword: IndexAlias
  361.  
  362. Table Size Options
  363. ------------------
  364.  
  365. -A num    This option specifies the number of entries to display in the
  366.           "Top User Agents" table.  To disable the table, use a value of
  367.           zero (0).
  368.           Config file keyword: TopAgents
  369.  
  370. -C num    This option specifies the number of entries to display in the
  371.           "Top Countries" table.  To disable the table, use a value of
  372.           zero (0).
  373.           Config file keyword: TopCountries
  374.  
  375. -R num    This option specifies the number of entries to display in the
  376.           "Top Referrers" table.  To disable the table, use a value of
  377.           zero (0).
  378.           Config file keyword: TopReferrers
  379.  
  380. -S num    This option specifies the number of entries to display in the
  381.           "Top Sites" table.  To disable the table, use a value of
  382.           zero (0).
  383.           Config file keyword: TopSites
  384.  
  385. -U num    This option specifies the number of entries to display in the
  386.           "Top URL's" table.  To disable the table, use a value of
  387.           zero (0).
  388.           Config file keyword: TopURLs
  389.  
  390. --------------------------------------------------------------------------
  391.  
  392.  
  393. CONFIGURATION FILES
  394. -------------------
  395.  
  396. The Webalizer allows configuration files to be used in order to simplify
  397. life for all.  There are several ways that configuration files are accessed
  398. by the Webalizer.  When The Webalizer first executes, it looks for a
  399. default configuration file named "webalizer.conf" in the current directory,
  400. and if not found there, will look for "/etc/webalizer.conf".  In addition,
  401. configuration files may be specified on the command line with the '-c'
  402. option.  There are lots of different ways you can combine the use of
  403. configuration files and command line options to produce various results.
  404. The Webalizer always looks for and reads configuration options from a
  405. default configuration file before doing anything else.  Because of this,
  406. you can override options found in the default file by use of additional
  407. configuration files specified on the command line or command line options
  408. themselves.  If you specify a configuration file on the command line, you
  409. can override options in it by additional command line options which follow.
  410. For example, most users will most likely want to create the default file
  411. /etc/webalizer.conf and place options in it to specify the hostname, log
  412. file, table options, etc...  At the end of the month when a different log
  413. file is to be used (the end of month log), you can run TheWebalizer as
  414. usual, but put the different filename on the end of the command line, which
  415. will override the log file specified in the configuration file.  It should
  416. be noted that you cannot override some configuration file options by the
  417. use of command line arguments.  For example, if you specify "Quiet yes" in
  418. a configuration file, you cannot override this with a command line argument,
  419. as the command line option only _enables_ the feature (-q option).
  420.  
  421. The configuration files are standard ASCII text files that may be created
  422. or edited using any standard editor.  Blank lines and lines that begin
  423. with a pound sign ('#') are ignored.  Any other lines are considered to
  424. be configurgation lines, and have the form "Keyword Value", where the
  425. 'Keyword' is one of the currently available configuration keywords defined
  426. below, and 'Value' is the value to assign to that particular option.  Any
  427. text found after the keyword up to the end of the line is considered the
  428. keyword's value, so you should not include anything after the actual value
  429. on the line that is not actually part of the value being assigned.  The
  430. file "sample.conf" provided with the distribution contains lots of useful
  431. documentation and examples as well.  It should be noted that you do not
  432. have to use any configuration files at all, in which case, default values
  433. will be used (which should be sufficent for most sites).
  434.  
  435. --------------------------------------------------------------------------
  436.  
  437. General Configuration Keywords
  438. ------------------------------
  439.  
  440. LogFile       This defines the logfile to use.  It should be a fully qualified
  441.               name (ie: contain the path), but relative names will work as
  442.               well.  If not specified, the logfile defaults to STDIN. 
  443.  
  444. OutputDir     This defines the output directory to use for the reports.  If
  445.               it is not specified, the current directory is used.
  446.               Command line argument: -o
  447.  
  448. HistoryName   Allows specification of a history path/filename if desired.
  449.               The default is to use the file named 'webalizer.hist', kept
  450.               in the normal output directory (OutputDir above).  Any name
  451.               specified is relative to the normal output directory unless
  452.               an absolute path name is given (ie: starts with a '/').
  453.  
  454. ReportTitle   This specifies the title to use for the generated reports.
  455.               It is used in conjunction with the hostname (unless blank)
  456.               to produce the final report titles.  If not defined, the
  457.               default of "Usage Statistics for" is used.
  458.               Command line argument: -t
  459.  
  460. HostName      This defines the hostname.  The hostname is used in the
  461.               report title as well as being prepended to URL's in the
  462.               "Top URL's" table.  This allows The Webalizer to be run
  463.               on "virtual" web servers, or servers that do not reside
  464.               on the local machine, and allows clicking on the URL to
  465.               go to the right place.  If not specified, The Webalizer
  466.               attempts to get the hostname via a 'uname' system call,
  467.               and if that fails, will default to "localhost".
  468.               Command line argument: -n
  469.  
  470. UseHTTPS      Causes the links in the 'Top URL's' table to use 'https://'
  471.               instead of the default 'http://' prefix.  Not much use if
  472.               you run a mix of secure/insecure servers on your machine.
  473.               Only useful if you run the analysis on a secure servers
  474.               logs, and want the links in the table to work properly.
  475.  
  476. Quiet         This allows you to enable or disable informational messages
  477.               while it is running.  The values for this keyword can be
  478.               either 'yes' or 'no'.  Using "Quiet yes" will supress these
  479.               messages, while "Quiet no" will enable them.  The default
  480.               is 'no' if not specified, which will allow The Webalizer
  481.               to display informational messages.  It should be noted that
  482.               this option has no effect on Warning or Error messages that
  483.               may be generated, as they go to STDERR.
  484.               Command line argument: -q
  485.  
  486. TimeMe        This allows you to display timing information regardless of
  487.               any "quiet mode" specified.  Useful only if you did in fact
  488.               tell the webalizer to be quiet either by using the -q command
  489.               line option or the "Quiet" keyword, otherwise timing stats
  490.               are normally displayed anyway.  Values may be either 'yes'
  491.               or 'no', with the default being 'no'.
  492.               Command line argument: -T
  493.  
  494. GMTTime       This keyword allows timestamps to be displayed in GMT (UTC)
  495.               time instead of local time.  Normally The Webalizer will
  496.               display timestamps in the timezone of the local machine
  497.               (ie: PST or EDT).  This keyword allows you to specify the
  498.               display of timestamps in GMT (UTC) time instead.  Values
  499.               may be either 'yes' or 'no'.  Default is 'no'.
  500.               Command line argument: -g
  501.  
  502. Debug         This tells The Webalizer to display additional information
  503.               when it encounters Warnings or Errors.  Normally, The
  504.               Webalizer will just tell you it found a bad record or
  505.               field.  This option will enable the display of the actual
  506.               data that produced the Warning or Error as well.  Useful
  507.               only if you start getting lots of Warnings or Errors and
  508.               want to determine the cause.  Values may be either 'yes'
  509.               or 'no', with the default being 'no'.
  510.               Command line argument: -d
  511.  
  512. IgnoreHist    This supresses the reading of a history file.  USE WITH
  513.               EXTREME CAUTION as the history file is how The Webalizer
  514.               keeps track of previous months.  The effect of this option
  515.               is as if The Webalizer was being run for the very first
  516.               time, and any previous data is discarded.  Values may be
  517.               either 'yes' or 'no', with the default being 'no'.
  518.               Command line argument: -i
  519.  
  520. HourlyGraph   This keyword is used to either enable or disable the creation
  521.               and display of the Hourly Usage graph.  Values may be either
  522.               'yes' or 'no', with the default being 'yes'.
  523.               Command line argument: -G
  524.  
  525. HourlyStats   This keyword is used to either enable or disable the creation
  526.               and display of the Hourly Usage statistics table.  Values may
  527.               be either 'yes' or 'no', with the default being 'yes'.
  528.               Command line argument: -H
  529.  
  530. IndexAlias    This allows additional 'index.html' aliases to be defined.
  531.               Normally, The Webalizer scans for and strips the string
  532.               "index." from URL's before processing them.  This turns a
  533.               URL such as /somedir/index.html into just /somedir/ which
  534.               is really the same URL.  This keyword allows _additional_
  535.               names to be treated in the same fashion for sites that use
  536.               different default names, such as "home.html".  The string
  537.               is scanned for anywhere in the URL, so care should be used
  538.               if and when you define additional aliases.  For example,
  539.               if you were to use an alias such as 'home', the URL
  540.               /somedir/homepages/brad/home.html would be turned into just
  541.               /somedir/ which probably isn't the intended result.  Instead,
  542.               you should have specified 'home.htm' which would correctly
  543.               turn the URL into /somedir/homepages/brad/ like intended.
  544.               It should also be noted that specified aliases are scanned
  545.               for in EVERY log record... A bunch of aliases will noticably
  546.               degrade performance as each record has to be scanned for
  547.               every alias defined.  You don't have to specify 'index.' as
  548.               it is always the default.
  549.               Command line argument: -I 
  550.  
  551. MangleAgents  The MangleAgents keyword specifies the level of user agent
  552.               name mangling, if any.  There are 6 levels that may be specified,
  553.               each producing a different level of detail displayed.  Level 5
  554.               displays only the browser name (MSIE or Mozilla) and the major
  555.               version number.  Level 4 adds the minor version (single
  556.               decimal place).  Level 3 adds the minor version to two decimal
  557.               places.  Level 2 will also add any sub-level designation
  558.               (such as Mozilla/3.01Gold or MSIE 3.0b).  Level 1 will also
  559.               attempt to add the system type.  The default level 0 will
  560.               leave the user agent field unmodified and produces the
  561.               greatest amount of detail.
  562.               Command line argument: -M
  563.  
  564. Incremental   This allows incremental processing to be enabled or disabled.
  565.               Incremental processing allows processing partial logs without
  566.               the loss of detail data from previous runs in the same month.
  567.               This feature saves the 'internal state' of the program so that
  568.               it may be restored in following runs.  See the section above
  569.               titled "Incremental Processing" for additional information.
  570.               The value may be 'yes' or 'no', with the default being 'no'.
  571.               Command line argument: -p
  572.  
  573. IncrementalName
  574.               Allows specification of the incremental data filename if
  575.               desired.  Normally, the file named "webalizer.current' is
  576.               used, kept in the standard output directory.  If specified,
  577.               filenames are relative to the standard output directory,
  578.               unless an absolute name is given (ie: starts with '/').
  579.  
  580.  
  581. Top Table Keywords
  582. ------------------
  583.  
  584. TopAgents     This allows you to specify how many "Top" user agents are
  585.               displayed in the "Top User Agents" table.  The default
  586.               is 15.  If you do not want to display user agent statistics,
  587.               specify a value of zero (0).  The display of user agents
  588.               will only work if your web server includes this information
  589.               in its log file (ie: a combined log format file).
  590.               Command line argument: -A 
  591.  
  592. TopCountries  This allows you to specify how many "Top" countries are
  593.               displayed in the "Top Countries" table.  The default is
  594.               50.  If you want to disable the countries table, specify
  595.               a value of zero (0).
  596.               Command line argument: -C 
  597.  
  598. TopReferrers  This allows you to specify how many "Top" referrers are
  599.               displayed in the "Top Referrers" table.  The default is
  600.               30.  If you want to disable the referrers table, specify
  601.               a value of zero (0).  The display of referrer information
  602.               will only work if your web server includes this information
  603.               in its log file (ie: a combined log format file).
  604.               Command line argument: -R 
  605.  
  606. TopSites      This allows you to specify how many "Top" sites are
  607.               displayed in the "Top Sites" table.  The default is 30.
  608.               If you want to disable the sites table, specify a value
  609.               of zero (0).
  610.               Command line argument: -S 
  611.  
  612. TopURLs       This allows you to specify how many "Top" URL's are
  613.               displayed in the "Top URL's" table.  The default is 30.
  614.               If you want to disable the URL's table, specify a value
  615.               of zero (0).
  616.               Command line argument: -U 
  617.  
  618.  
  619. Hide Object Keywords
  620. --------------------
  621.  
  622. These keywords allow you to hide user agents, referrers, sites and
  623. URL's from the various "Top" tables.  The value for these keywords
  624. are the same as those used in their command line counterparts.  You
  625. can specify as many of these as you want without limit.  Refer to the
  626. section above on "Command Line Options" for a description of the string
  627. formatting used as the value.  Values cannot exceed 80 characters in
  628. length.
  629.  
  630. HideAgent     This allows specified user agents to be hidden from the
  631.               "Top User Agents" table.  Not very useful, since there
  632.               a zillion different names by which browsers go by today,
  633.               but could be useful if there is a particular user agent
  634.               (ie: robots, spiders, realaudio, etc..) that hits your
  635.               site frequently enough to make it into the top user agent
  636.               listing.  This keyword is useless if 1) your log file does
  637.               not provide user agent information or 2) you disable the
  638.               user agent table.
  639.               Command line argument: -a 
  640.  
  641. HideReferrer  This allows you to hide specfied referrers from the
  642.               "Top Referrers" table.  Normally, you would only specify
  643.               your own web server to be hidden, as it is usually the
  644.               top generator of references to your own pages.  Of course,
  645.               this keyword is useless if 1) your log file does not include
  646.               referrer information or 2) you disable the top referrers
  647.               table.
  648.               Command line argument: -r 
  649.  
  650. HideSite      This allows you to hide specified sites from the "Top
  651.               Sites" table.  Normally, you would only specify your own
  652.               web server or other local machines to be hidden, as they
  653.               are usually the highest hitters of your web site, especially
  654.               if you have their browsers home page pointing to it.
  655.               Command line argument: -s 
  656.  
  657. HideURL       This allows you to hide URL's from the "Top URL's" table.
  658.               Normally, this is used to hide items such as graphic files,
  659.               audio files or other 'non-html' files that are transferred
  660.               to the visiting user.
  661.               Command line argument: -u 
  662.  
  663. Group Object Keywords
  664. ---------------------
  665.  
  666. The Group* keywords allow object grouping based on Site, URL, Referrer
  667. and User Agent.  Combined with the Hide* keywords, you can customize
  668. exactly what will be displayed in the 'Top' tables.  For example, to
  669. only display totals for a particular directory, use a GroupURL and HideURL
  670. with the same value (ie: '/help/*').  Group processing is only done after
  671. the individual record has been fully processed, so name mangling and
  672. site total updates have already been peformed.  Because of thie, groups
  673. are not counted in the main site total (as that would cause duplication).
  674. Groups can be displayed in bold and shaded as well.  Grouped records are
  675. not, by default, hidden from the report.  This allows you to display a
  676. grouped total, while still being able to see the individual records, even
  677. if they are part of the group.  If you want to hide the detail records,
  678. follow the Group* directive with a Hide* one using the same value.  There
  679. are no command line switches for these keywords.
  680.  
  681. GroupReferrer Allows grouping Referrers.  Can be handy for some of the
  682.               major search engines that have multiple host names a
  683.               referral could come from.
  684.  
  685. GroupURL      This keyword allows grouping URL's. Useful for grouping
  686.               complete directory trees.
  687.  
  688. GroupSite     This keywords allows grouping Sites.  Most used for
  689.               grouping top level domains and unresolved IP address
  690.               for local dial-ups, etc...
  691.  
  692. GroupAgent    Groups User Agents.  A handy example of how you could use
  693.               this one is to use "Mozilla" and "MSIE" as the values for
  694.               GroupAgent and HideAgent keywords.  Make sure you put the
  695.               "MSIE" one first.
  696.  
  697. GroupShading  Allows shading of table rows for groups.  Value can be
  698.               'yes' or 'no', with the default being 'yes'.
  699.  
  700. GroupHighlight Allows bolding of table rows for groups.  Value can be
  701.                'yes' or 'no', with the default being 'yes'.
  702.  
  703.  
  704. Ignore/Include Object Keywords
  705. ----------------------
  706.  
  707. These keywords allow you to completely ignore log records when generating
  708. statistics, or to force their inclusion regardless of ignore criteria.
  709. Records can be ignored or included based on site, URL, user agent and
  710. referrer.  Be aware that by choosing to ignore records, the accuracy of
  711. the generated statistics become skewed, making it impossible to produce
  712. an accurate representation of load on the web server.  These keywords
  713. behave identical to the Hide* keywords above, where the value can have
  714. a leading or trailing wildcard '*'.  These keywords, like the Hide* ones,
  715. have an absolute limit of 80 characters for their values.  These keywords
  716. do not have any command line switch counterparts, so they may only be
  717. specified in a configuration file.  It should also be pointed out that
  718. using the Ignore/Include combination to selectivly exclude an entire
  719. site while including a particular 'chunk' is _extremely_ inefficent,
  720. and should be avoided.  Try grep'ing the records into a seperate file
  721. and process it instead.
  722.  
  723. IgnoreSite    This allows specified sites to be completely ignored from
  724.               the generated statistics.
  725.  
  726. IgnoreURL     This allows specified URL's to be completely ignored from
  727.               the generated statistics.  One use for this keyword would
  728.               be to ignore all hits to a 'temporary' directory where
  729.               development work is being done, but is not accessable to
  730.               the outside world.
  731.  
  732. IgnoreReferrer This allows records to be ignored based on the referrer
  733.                field.
  734.  
  735. IgnoreAgent   This allows specified User Agent records to be completely
  736.               ignored from the statistics.  Maybe useful if you really
  737.               don't want to see all those hits from MSIE :)
  738.  
  739. IncludeSite   Force the record to be processed based on hostname.  This
  740.               takes precedence over the Ignore* keywords.
  741.  
  742. IncludeURL    Force the record to be processed based on URL.  This takes
  743.               precedence over the Ignore* keywords.
  744.  
  745. IncludeReferrer Force the record to be processed based on referrer.
  746.                 This takes precedence over the Ignore* keywords.
  747.  
  748. IncludeAgent  Force the record to be processed based on user agent.
  749.               This takes precedence over the Ignore* keywords.
  750.  
  751.  
  752. HTML Generation Keywords
  753. ------------------------
  754.  
  755. These keywords allow you to customize the HTML code that The Webalizer
  756. produces, such as adding a corporate logo or links to other web pages.
  757. You can specify as many of these keywords as you like, and they will be
  758. used in the order that they are found in the file.  Values cannot exceed
  759. 80 characters in length, so you may have to break long lines up into two
  760. or more lines.  There are no command line counterparts to these keywords.
  761.  
  762. HTMLExtension  Allows generated pages to use something other than the
  763.                default 'html' extension for the filenames.  Do not
  764.                include the leading period ('.') when you specify the
  765.                extension.
  766.                Command line argument: -x
  767.  
  768.  
  769. HTMLPre        Allows code to be inserted at the very beginning of the
  770.                HTML files.  Defaults to the standard HTML 3.2 DOCTYPE
  771.                record.  Be careful not to include any HTML here, as it
  772.                is inserted _before_ the <HTML> tag in the file.  Use it
  773.                for server-side scripting capabilities, such as php3, to
  774.                insert scripting files and other directives.
  775.  
  776. HTMLHead       Allows you to insert HTML code between the <HEAD></HEAD>
  777.                block.  There is no default.  Useful for adding scripts
  778.                to the HTML page, such as Javascript or php3, or even
  779.                just for adding a few META tags to the document.
  780.  
  781. HTMLBody       This keyword defines HTML code to be placed immediately
  782.                after the <HEAD> section of the report, just before the
  783.                title and "summary period/generated on" lines.  If used,
  784.                the first HTMLHead line MUST include a <BODY> tag.  Put
  785.                whatever else you want in subsequent lines, but keep in
  786.                mind the placement of this code in relation to the title
  787.                and other aspcects of the web page.  Some typical uses
  788.                are to change the page colors and posibly add a corporate
  789.                logo (graphic) in the top right.  If not specified, a
  790.                default <BODY> tag is used that defines page color, text
  791.                color and link colors (see "sample.conf" file for example).
  792.  
  793. HTMLPost       This keyword defines HTML code that is placed after the
  794.                title and "summary period/generated on" lines, just before
  795.                the initial horizontal rule <HR> tag.  Normally this keyword
  796.                isn't needed, but is provided in case you included a large
  797.                graphic or some other weird formatting tag in the HTMLHead
  798.                section that needs to be cleaned up or terminated before the
  799.                main report section.
  800.  
  801. HTMLTail       This keyword defines HTML code that is placed at the bottom
  802.                right side of the report.  It is inserted in a <TABLE> section
  803.                between table data <TD>..</TD> tags, and is top and right
  804.                aligned within the table.  Normally this keyword is used to
  805.                provide a link back to your home page or insert a small
  806.                graphic at the bottom right of the page.
  807.  
  808. HTMLEnd        This allows insertion of closing code, at the very end of
  809.                the page.  The default is to put the closing </BODY> and
  810.                </HTML> tags.  If specified, you _must_ specify these tags
  811.                yourself.
  812.  
  813. --------------------------------------------------------------------------
  814.  
  815.  
  816. Notes on Log Files
  817. ------------------
  818.  
  819. The Webalizer supports CLF log formats, which should work for just
  820. about everyone.  If you want User Agent or Referrer information, you
  821. need to make sure your web server supplies this information in it's
  822. log file, and in a format that the Webalizer can understand.  While
  823. The Webalizer will try to handle many of the subtle variations in
  824. log formats, some will not work at all.   Most web servers output
  825. CLF format logs by default.  For Apache, in order to produce the
  826. proper log format, add the following to the httpd.conf file:
  827.  
  828. LogFormat "%h %l %u %t \"%r\" %s %b \"%{Referer}i\" \"%{User-agent}i\""
  829.  
  830. This instructs the Apache web server to produce a 'combined' log
  831. that includes the referrer and user agent information on the end of
  832. each record, enclosed in quotes (This is the standard recommended
  833. by both Apache and NCSA).   Netscape and other web servers have
  834. similar capabilities to alter their log formats.  (note: the above
  835. works for apache servers up to V1.2.  V1.3 and higher now have additonal
  836. ways to spcify log formats... refer to included documentation).
  837.  
  838.  
  839. Notes on Referrers
  840. ------------------
  841.  
  842. Referrers are weird critters... They take many shapes and forms, which makes
  843. it much harder to analyze than a typical URL, which at least has some
  844. standardization.  What is contained in the referrer field of your log
  845. files varies depending on many factors, such as what site did the referral,
  846. what type of system it comes from and how the actual referal was generated.
  847. Why is this?  Well, because a user can get to your site in many ways... They
  848. may have your site bookmarked in their browser, they may simply type your
  849. sites URL field in their browser, they could have clicked on a link on some
  850. remote web page or they may have found your site from one of the many search
  851. engines and site indexes found on the web.  The Webalizer attempts to deal
  852. with all this variation in an intelligent way by doing certain things to
  853. the referrer string which makes it easier to analyze.  Of course, if your
  854. web server doesn't provide referrer information, you probably don't really
  855. care and are asking yourself why you are reading this section...
  856.  
  857. Most referrer's will take the form of "http://somesite.com/somepage.html",
  858. which is what you will get if the user clicks on a link somewhere on the
  859. web in order to get to your site.  Some will be a variation of this, and
  860. look something like "file:/some/such/sillyname", which is a reference from
  861. a HTML document on the users local machine.  Several variations of this can
  862. be used, depending on what type of system the user has, if he/she is on
  863. a local network, the type of network, etc...  To complicate things even
  864. more, dynamic HTML documents and HTML documents that are generated by
  865. cgi scripts or external programs produce lots of extra information which
  866. is tacked on to the end of the referrer string in an almost infinate number
  867. of ways.  If the user just typed your URL into their browser or clicked on
  868. a bookmark, there won't be any information in the referrer field and will
  869. take the form "-".
  870.  
  871. In order to handle all these variations, The Webalizer parses the referrer
  872. field in a certain way.  First, if the referrer string begins with "http",
  873. it assumes it is a normal referral and converts the "http://" and following
  874. hostname to lowercase in order to simplify hiding if desired.  For example,
  875. the referrer "HTTP://WWW.MyHost.Com/This/Is/A/HTML/Document.html" will become
  876. "http://www.myhost.com/This/Is/A/HTML/Document.html".  Notice that only the
  877. "http://" and hostname are converted to lower case... The rest of the
  878. referrer field is left alone.  This follows standard convention, as the
  879. actuall method (HTTP) and hostname are always case insensitive, while the
  880. document name portion is case sensitive.
  881.  
  882. Referrers that came from search engines, dynamic HTML documents, cgi
  883. scripts and other external programs usually tack on additional information
  884. that it used to create the page.  A common example of this can be found
  885. in referrals that come from search engines and site indexes common on the
  886. web.  Sometimes, these referrers URL's can be several hundred characters
  887. long and include all the information that the user typed in to search for
  888. your site.  The Webalizer deals with this type of referrer by stripping
  889. off all the query information, which starts with a question mark '?'.
  890. The Referrer "http://search.yahoo.com/search?p=usa%26global%26link" will
  891. be converted to just "http://search.yahoo.com/search".
  892.  
  893. When a user comes to your site by using one of their bookmarks or by
  894. typing in your URL directly into their browser, the referrer field is
  895. blank, and looks like "-".  Most sites will get more of these referrals
  896. than any other type.  The Webalizer converts this type of referral into
  897. the string "- (Direct Request)".  This is done in order to make it easier
  898. to hide via a command line option or configuration file option.  This is
  899. because the character "-" is a valid character elsewhere in a referrer
  900. field, and if not turned into something unique, could not be hidden without
  901. possibly hiding other referrers that shouldn't be.
  902.  
  903.  
  904. Notes on Character Escaping
  905. ---------------------------
  906.  
  907. The HTTP protocol defines certain ways that URL's can look and behave.  To
  908. some extent, referrer fields follow most of the same conventions.  Character
  909. escaping is a technique by which non-printable or other non-ASCII (and even
  910. some ASCII) characters can be used in a URL.  This is done by placing the
  911. Hexdecimal value of the character in the URL, preceed by a percent sign '%'.
  912. Since Hex values are made up of ASCII characters, any character can be
  913. escaped to ensure only printable ASCII characters are present in the URL.
  914. Some systems take this concept to the extreme and escape all sorts of stuff,
  915. even characters that don't need to be escaped.  To deal with this, The
  916. Webalizer will un-escape URL's and referrers before being processed. For
  917. Example, the URL "/www.mrunix.net/%7Ebrad/resume.html" is the same URL as
  918. "/www.mrunix.net/~brad/resume.html", a very common form of a URL to access
  919. users web pages.  If the URL's were not un-escaped, they would be treated as
  920. two seperate documents, even though they are really one and the same.
  921.  
  922.  
  923. Random thoughts on DNS lookups
  924. ------------------------------
  925.  
  926. A lot of people have asked for the ability to do DNS lookups within
  927. The Webalizer, as their servers don't do the reverse mapping.  My
  928. usual response is that there are far too many such programs and
  929. scripts that will process a log file doing just that.  One such
  930. program is 'logresolve' that comes with the Apache distribution
  931. (in the /support directory of the source distribution).  On my
  932. machines, there are several programs that process log files at
  933. the end of each month, and it is much easier to do the reverse
  934. DNS lookups one time only, instead of multiple times in seperate
  935. places.  Reverse DNS lookups may be included in a future release,
  936. but I don't guarantee it.
  937.  
  938.  
  939. Log files and The Webalizer
  940. ---------------------------
  941.  
  942. Most sites will choose to have The Webalizer run from cron at specified
  943. intervals.  Care should be taken to ensure that data is not lost as a
  944. result of log file rotations.  A suggested practice is to rotate your
  945. web server logs at the end of each month as close to midnight as possible,
  946. then have The Webalizer process the 'end of month' log file before running
  947. statistics on the new, current log.  On our systems, a shell script called
  948. 'rotate_logs' is run at midnight, the end of each month.  This script file
  949. looks like:
  950.  
  951. ------------------------- file: rotate_logs ------------------------------
  952. #!/bin/sh
  953.  
  954. # halt the server
  955. kill `cat /var/lib/httpd/logs/httpd.pid`
  956.  
  957. # define backup names
  958. OLD_ACCESS_LOG=/var/lib/httpd/logs/old/access_log.`date +%y%m%d-%H%M%S`
  959. OLD_ERROR_LOG=/var/lib/httpd/logs/old/error_log.`date +%y%m%d-%H%M%S`
  960.  
  961. # make end of month copy for analyzer
  962. cp /var/lib/httpd/logs/access_log /var/lib/httpd/logs/access_log.backup
  963.  
  964. # move files to archive directory
  965. mv /var/lib/httpd/logs/access_log `echo $OLD_ACCESS_LOG`
  966. mv /var/lib/httpd/logs/error_log  `echo $OLD_ERROR_LOG`
  967.  
  968. # restart web server
  969. /usr/sbin/httpd
  970.  
  971. # compress the archived files
  972. /bin/gzip $OLD_ACCESS_LOG
  973. /bin/gzip $OLD_ERROR_LOG
  974. ------------------------- end of file ------------------------------------
  975.  
  976. This script first stops the web server using a 'kill' command.  Apache
  977. keeps the PID of the server in the file httpd.pid, so we use it as the
  978. argument for the kill.  Next, it defines some names for the backup files,
  979. which are basically the name of the files with the date and time appended
  980. to the end of them.  It then makes a copy of the log file, appended with
  981. '.backup' in the log directory, moves the current log files to an archive
  982. directory (/var/lib/httpd/logs/old) and restarts the server.  This setup 
  983. allows the web server to be down for the minimum amount of time needed,
  984. which is important for busy sites.  If you don't want to stop the server,
  985. you can remove the inital 'kill' command, and replace the '/usr/sbin/httpd'
  986. line with "kill -1 `cat /var/lib/httpd/logs/httpd.pid`" command instead,
  987. On most web servers, this will cause a restart of the server and create
  988. the new log files in the process...
  989.  
  990. At this point, we have made copies of the previous months logs,  the web
  991. server is going about it's business as usual, and we have all the time in
  992. the world to do any other additional processing we want.  The last two
  993. lines of the script compress the archived logs using the GNU zip program
  994. (gzip).  Remember, we still have a copy of the log which we can now run
  995. The Webalizer on without having to do any further processing.
  996.  
  997. Next, we define two crontab entries.  The first runs the above 'rotate_logs'
  998. script at midnight at the end of the month.  The second runs The Webalizer
  999. on the '.backup' log file created above at 5 minutes after midnight.  This
  1000. gives other end of month processing jobs a chance to run so we don't bog
  1001. the system down too much.  If you have lots of end of month stuff going on,
  1002. you can change the timing to suit your needs.  The crontab entries look
  1003. something like:
  1004.  
  1005. ------------------------- crontab entries --------------------------------
  1006. # Rotate web server logs and run monthly analysis
  1007. 0 0 1 * *       /usr/local/adm/rotate_logs
  1008. 5 0 1 * *       /usr/bin/webalizer -Q /var/lib/httpd/logs/access_log.backup
  1009. ------------------------- end of crontab ---------------------------------
  1010.  
  1011. As you can see, the log rotations occur at midnight, and the analysis
  1012. is done at 5 minutes after.  Once you verify that The Webalizer ran
  1013. successfully, the access_log.backup file can be deleted as it isn't
  1014. needed any more.  If you need to re-run the analysis, you still have
  1015. the compressed archive copy that the shell script created.  In order
  1016. for the above analysis to work properly, you should have already
  1017. created an /etc/webalizer.conf configuration file sutable for your
  1018. site, or otherwise specify configuration options or a configuration
  1019. file on the crontab command line above.
  1020.  
  1021. If you want The Webalizer to be run more often than once a month, you
  1022. can specify additional crontab entries to do this as well.  Care should
  1023. be taken however to ensure that The Webalizer is not running when the
  1024. end of month processing above occurs, or unpredictable results may
  1025. happen (such as an inability to rotate the logs due to a file lock). 
  1026. The easiest way is to run it on the half hour with a crontab entry like:
  1027.  
  1028. 30 * * * *      /usr/bin/webalizer
  1029.  
  1030.  
  1031. Language Support
  1032. ----------------
  1033.  
  1034. Version 1.0x of The Webalizer added language support.  This
  1035. support is only provided at compile time in the form of an
  1036. include file containing all the strings used by The Webalizer.
  1037. The source distribution contains all language files that were
  1038. available at the time, with English being the default as
  1039. that is the only human language I speek fluently, and me
  1040. Espanol es muy malo.  Several people have already indicated
  1041. the desire to do translations into various languages, and as
  1042. I receive the language files, will make them available via
  1043. ftp at ftp://ftp.mrunix.net/pub/webalizer/lang.  Unless there
  1044. happens to be a binary distribution in the language you need,
  1045. you will need to grab the source distribution and compile the
  1046. program yourself. See the file INSTALL that comes in the source
  1047. distribution for information on how to use a language other than
  1048. English.
  1049.  
  1050. It should also be noted that the GD graphics library, used to
  1051. produce the inline graphics in the output HTML,  doesn't
  1052. support extended character sets, so if you are translating
  1053. the language file, you will no doubt encounter this problem.
  1054.  
  1055.  
  1056. Known Issues
  1057. ------------
  1058.  
  1059.  o Memory Usage.  The Webalizer makes liberal use of memory for internal
  1060.     data structures during analysis.  Lack of real physical memory will
  1061.     noticably degrade performance by doing lots of swapping between memory
  1062.     and disk.  One user who had a rather large log file noticed that The
  1063.     Webalizer took over 7 hours to run with only 16 Meg of memory.  Once
  1064.     memory was increased, the time was reduced to a few minutes.
  1065.  
  1066.  o Proxy servers.  The Webalizer does not know how to deal with proxy
  1067.     records, which can cause some rather unexpected results.  If you
  1068.     do run the stats on a proxy servers log file, you get to see where
  1069.     your users have been visiting, as well as who has visited your
  1070.     server.  If someone knows of a reliable way to differentiate
  1071.     between normal log records and proxy ones, please let me know.
  1072.  
  1073.  o Performance.  The Hide*, Group*, Ignore* and IndexAlias configuration
  1074.     options can cause a performance decrease if lots of them are used.
  1075.     The reason for this is that every log record must be scanned for
  1076.     each item in each list.  For example, if you are Hiding 20 objects,
  1077.     Grouping 20 more, and Ignoring 5,  each record is scanned 46 times
  1078.     (20+20+5 + an IndexAlias scan).  On really large log files, this
  1079.     can have a profound impact.
  1080.  
  1081.  
  1082. Final Notes
  1083. -----------
  1084.  
  1085. A lot of time and effort went into making The Webalizer, and to ensure that
  1086. the results are as accurate as possible.  If you find any abnormalities or
  1087. inconsistant results, bugs, errors, ommisions or anything else that doesn't
  1088. look right, please let me know so I can investigate the problem or correct
  1089. the error.  This goes for the minimal documentation as well.  Suggestions
  1090. for future versions are also welcome and apperciated.
  1091.