我正在运行安装了 Nginx Amplify 的 Nginx。为了获得更好的指标,我将访问日志格式扩展为:
log_format main_ext '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" '
'"$host" sn="$server_name" '
'rt=$request_time '
'ua="$upstream_addr" us="$upstream_status" '
'ut="$upstream_response_time" ul="$upstream_response_length" '
'cs=$upstream_cache_status' ;
以上格式来自 Amplify 官方文档。
一切运行正常,扩展指标包含在 Amplify 网络面板中。
为了提高访问日志的可读性,我还安装了 GoAccess 包。当我使用 COMBINED 日志格式启动 GoAccess 时,它可以正常工作。但我已经配置了一些虚拟主机(目前未显示在 GoAccess 报告页面中),因此我应该使用 VCOMBINED 格式,但它会产生错误:
Token '+0100]' doesn't match specifier '%h'
为了使其工作,我将命令更改为:
sudo goaccess /var/log/nginx/access.log \
--log-format=VCOMBINED \
--date-format=%d/%b/%Y --time-format=%T \
-o /var/www/stats/report.html \
--real-time-html
但出现了同样的错误。我不知道如何创建有效的日志模式以与 amplify 和支持虚拟主机的 GoAccess 配合使用。我尝试了一些 awk 技巧,但没有成功。
答案1
main_ext 日志格式是 Nginx Amplify 虚构的,它不是 VCOMBINED。
这也许对你有用
time-format %T %z
date-format %d/%b/%Y
如果你不使用 CDN 或负载均衡器,则使用日志格式
log-format %h %^ %^ [%d:%t] "%r" %s %b "%R" "%u" "%^" "%^" sn="%v" rt=%T %^
如果您位于 CDN 或负载均衡器后面,请使用日志格式
log-format %^ %^ %^ [%d:%t] "%r" %s %b "%R" "%u" "%h" "%^" sn="%v" rt=%T %^