我已安装 AWStats 7.0(Amazon Linux 存储库中的最新版本)以尝试获取有关带宽使用情况的更多信息。我无法让 AWSStats 解析我的日志 - 我怀疑这是因为我无法正确获取 LogFormat。
我尝试了很多变化,但我无法让它工作。
这是我的 Nginx 日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$host" "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" "$request_time" '
'"$upstream_cache_status" "$sent_http_content_encoding" ';
这是一个日志条目
1.1.1.1 - - [12/Mar/2017:07:23:53 +1300] "www.example.com" "GET /url/ HTTP/1.1" 200 7455 "https://www.google.ru/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36" "46.71.136.54" "0.000" "HIT" "gzip"
这是我的 AStats 配置文件。此处没有的任何内容都是标准的,并且从主配置文件继承
# Path to you nginx vhost log file
LogFile="/var/log/nginx/pts.access.log"
# Domain of your vhost
SiteDomain="example.com"
# Directory where to store the awstats data
DirData="/var/lib/awstats/pts/"
# Other alias, basically other domain/subdomain that's the same as the domain above
HostAliases="www.example.com"
LogFormat = "%host %logname %time1 %virtualname %methodurl %code %bytesd %refererquot %uaquot %otherquot %otherquot %otherquot %otherquot"
这是awstats的输出
[root]# /usr/share/awstats/tools/awstats_updateall.pl now -awstatsprog=/usr/share/awstats/wwwroot/cgi-bin/awstats.pl
Running '"/usr/share/awstats/wwwroot/cgi-bin/awstats.pl" -update -config=example.com -configdir="/etc/awstats"' to update config example.com
Create/Update database for config "/etc/awstats/awstats.example.com.conf" by AWStats version 7.0 (build 1.971)
From data in log file "/var/log/nginx/pts.access.log"...
Phase 1 : First bypass old records, searching new record...
Searching new records from beginning of log file...
Jumped lines in file: 0
Parsed lines in file: 323
Found 323 dropped records,
Found 0 comments,
Found 0 blank records,
Found 0 corrupted records,
Found 0 old records,
Found 0 new qualified records.
任何人都可以发现不正确的地方吗?我找不到任何可以提供更多信息的附加信息或 awstats 日志。
一个可能的问题在这里:
AStats中对应的配置:
您的日志文件包含:
%logname
仅匹配单个字符串,即 HTTP 身份验证中提供的用户名。现在,您的日志文件包含两个破折号,第一个来自您的配置,第二个表示空用户名。因此,AWStats 尝试将第二个破折号解释为时间戳,这导致它认为记录失败。
因此,您要么需要将破折号添加到 AWStats 日志格式字符串,要么从 nginx 日志格式中删除破折号。
作为旁注,您不需要在 nginx 日志中引用最后一个参数 (
$request_time
,$upstream_cache_status
,$sent_http_content_encoding
),因为它们不能包含空格。%extraX
如果您想在基于这些事实的报告中使用该信息,您也可以在 AStats 配置中使用。经过大约6个小时的努力,我终于解决了。他们的关键问题是我的 AWStats 站点配置不正确,但我认为我的 Nginx 日志格式或我的 AWStats 格式字符串也不正确。
这是我的工作 Nginx 日志格式。这是标准的 Nginx 组合日志格式,映射到 awstats LogFormat=1,加上我在日志中想要的三个额外字段
当然,我必须让我的服务器使用这个配置。这是在我的服务器块中。
这是我的 AWStats 站点配置文件。这会使用站点特定的值扩展 /etc/awstats/awstats.conf.local 文件。
请注意,一个问题是我的 SiteDomain 错误 - 我在域的开头省略了“www”。我这样做的原因是因为我认为“HostAliases”可以让我将 www 子域添加为别名,但这不是它的用途。这是为了
我还没有进一步让 AWSStats 工作,但一旦我这样做了,我会用我觉得棘手的任何东西来更新这篇文章。
感谢@Tero Kilkanen 提供了解决此问题的方法 - 即从组合格式开始并向前推进。