Nginx 日志分析工具-GoAccess

Nginx 日志分析工具-GoAccess

Linux 1 year ago 1313 0

最近遇到了服务器访问异常,但是无法定位到,所以就想着根据nginx 日志排查一下那个请求过高了。经过搜索,发现goAccess 不错,就开一篇帖子记录下

安装

访问官方:GoAccess 获取安装包 我这里用的是MacOs,所以直接 brew install goaccess 即可

使用

goaccess -a -c -d -f /var/log/nginx/access.log -p /etc/goaccess.conf > /home/test/test.html
-a 开启 UserAgent 列表。开启后会降低解析速度
-c 在程序开始运行时显示 日志/日期 配置窗口
-d 输出 HTML 或者 JSON 报告时开启 IP 解析
-f 指定输入日志文件的路径
-p 指定使用自定义配置文件

PS: Mac 路径: /usr/local/Cellar/goaccess/1.7.2/etc/goaccess/goaccess.conf

经常出现的错误

==8814== GoAccess - version 1.7.2 - Apr  1 2023 02:48:48
==8814== Config file: /usr/local/Cellar/goaccess/1.7.2/etc/goaccess/goaccess.conf
==8814== https://goaccess.io - <[email protected]>
==8814== Released under the MIT License.
==8814==
==8814== FILE: /xxx-20230703
==8814== 已解析 10 行 出现以下错误:
==8814==
==8814== Token '127.0.0.1 - - [02' doesn't match specifier '%d'
==8814==
==8814== 格式错误 - 请检查你的日志/日期/时间格式

这时候需要你去 goaccess.conf 配置一下参数
time-format %T
date-format %d/%b/%Y
log-format %h - %^ [%d:%t %^] requesthost:"%v"; "%r" requesttime:"%T"; %s %b "%R" - %^"%u"
注意:这个格式需要根据你nginx 配置生成的格式去匹配,配置不对可能会出现
==8886== Token '+0800]' doesn't match specifier '%h' 这种错误

或者尝试下以下写法:
# 不会报错,但是生成的是英文格式
LANG="en_US.UTF-8" bash -c 'goaccess www.***.com.log --log-format=COMBINED'
# 不会报错,而且生成的HTML是中文格式
LANG="zh_CN.UTF-8" LC_TIME="en_US.UTF-8" bash -c 'goaccess www.***.com.log --log-format=COMBINED -o result.html'

原文: http://yiqiao.me/articles/37/nginx-log-analysis-tool-goaccess

版权声明: 自由转载-非商用-非衍生-保持署名 (创意共享3.0许可证)