前言
使用Nginx的网站可能会遇到访问流量异常、被友情检测、程序出现Bug等各种突然情况,这时大家的反应想必都是第一时间分析日志,然后发现日志有几十GB之多,又需要按照时间、错误类型或者关键字段检索信息时会不会有种醍醐灌顶、菊花一紧的错觉。文中介绍的方法不管是GoAccess还是sed/awk虽然可以解决一时的问题但未必能够治本,,也许ELK(Logstash+ElasticSearch+Kibana)对我们大多数人来说是更合理的集中化日志管理解决方案。
日志固然重要,但努力建设适合业务发展的集中化日志管理平台才是基础核心
更新历史
2015年07月16日 – 初稿
阅读原文 –
扩展阅读
GoAccess – 用GoAccess分析Nginx的日志 – sed 简明教程 – AWK 简明教程 –
安装GoAccess
各平台都有灰常简单的部署方案 –
wget 0.9.2.tar.gztar -xzvf goaccess-0.9.2.tar.gzcd goaccess-0.9.2/./configure –enable-utf8makemake install使用方式
更多常见问题请参考官方FAQ –
#直接打开goaccess -f access.log#选择日志格式NCSA Combined Log Format#剩下的操作都蛮简单的,参考扩展阅读和官方文档吧#导出HTML报告会遇到的问题goaccess -f time_access.log -a > report.htmlGoAccess – version :23:20Config file: /usr/local/etc/goaccess.confFatal error has occurredError occured at: src/parser.c – verify_formats – 1691No time format was found on your conf file.#添加配置文件vi ~/.goaccessrctime-format %Tdate-format %d/%b/%Ylog-format %h %^[%d:%t %^] goaccess -f time_access.log -p ~/.goaccessrc -a > report.html使用bash/sed/awk手动查找Nginx日志
更多技巧可以参考扩展阅读,Python的处理效率或者更优
#按日期查找时间段sed -n “/14\/Jul\/2015:00:00:00/,/15\/Jul\/2015:15:00:00/”p access.log > time_access.log#查找504错误的页面和数量awk ‘($9 ~ /504/)’ time_access.log | awk ‘{print $7}’ | sort | uniq -c | sort -rn > 504.log#查找访问最多的20个IP及访问次数awk ‘{print $1}’ time_access.log | sort | uniq -c | sort -n -k 1 -r | head -n 20 > top.log
想念我的时候,不要忘记我也在想念你。