前言
如果把运维看做是医生给病人看病,则日志就是病人对自己的陈述,很多时候医生需要通过对病人的描述中得出病人状况,是否严重,需要什么计量的药,什么类型的药。所以古人有句话叫对症下药,这个症就是病人的描述加医生的判断,在重一点的病在加上很多的化验。在医生看病时病人的描述和化验单上的数据对医生是非常重要的。同理日志在运维中的作用也是类似的,但非常不幸,日志在很多运维中被严重低估,直到磁盘空间不足的时候才想到,这有个大的日志文件把他删了,这样可以节省空间。
GoAccess
GoAccess是一个基于终端的快速日志分析器。其核心思想是实时快速分析和查看Web服务器统计信息,而无需使用您的浏览器(如果您希望通过SSH快速分析访问日志,或者只是喜欢在终端中工作),终端输出是默认输出,但它能够生成完整的,独立的实时 HTML报告(非常适合分析,监控和数据可视化),以及a JSON和CSV报告。
所有面板和指标都定时在终端输出上每200毫秒更新一次,在HTML输出上每秒更新一次。
GoAccess允许任何自定义日志格式字符串。预定义选项包括Apache,Nginx,Amazon S3,Elastic Load Balancing,CloudFront等
跟踪提供请求所需的时间。如果您想跟踪减慢网站速度的网页,则非常有用。
数据持久性强,GoAccess能够通过磁盘上的B + Tree数据库逐步处理日志。
GoAccess是用C语言编写的,要运行它,你只需要将ncurses作为依赖项,它甚至还具有自己的RFC6455兼容Web Socket服务器。
您可以针对访问日志文件运行它,选择日志格式并让GoAccess解析访问日志并显示统计信息。
按小时或日期确定最慢运行请求的匹配数,访问者数,带宽数和指标数。
多个虚拟主机,一个面板,显示哪个虚拟主机正在消耗大部分Web服务器资源。
定制GoAccess以适合您自己的色彩品味。通过终端,或者只是更新HTML输出上的样式表。
部署方案
方案一:Yum安装部署
yum install glib2 glib2-devel GeoIP-devel ncurses-devel zlib zlib-develyum install gcc -y yum -y install GeoIP-update yum install goaccess #修改/etc/nginx/nginx.conf文件的日志存储格式 log_format main '$remote_addr - $remote_user [$time_local] requesthost:"$http_host"; "$request" requesttime:"$request_time"; ' '$status $body_bytes_sent "$http_referer" - $request_body' '"$http_user_agent" "$http_x_forwarded_for"'; #修改文件/etc/goaccess.conf改成goaccess格式标准对应为 time-format %T date-format %d/%b/%Y log-format %h - %^ [%d:%t %^] requesthost:"%v"; "%r" requesttime:"%T"; %s %b "%R" - %^"%u" #测试生成页面 goaccess -f /var/log/nginx/access.log -c -a>/usr/share/nginx/html/go.html
方案二:源码安装部署
#yum安装依赖包 yum install glib2 glib2-devel GeoIP-devel ncurses-devel zlib zlib-devel yum install gcc -y rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm yum -y install GeoIP-update #下载goaccess源码包,并解压编译安装 wget https://tar.goaccess.io/goaccess-1.2.tar.gz tar xzvf goaccess-1.2.tar.gz cd goaccess-1.2/./configure --enable-geoip --enable-utf8make && make install #修改/etc/nginx/nginx.conf文件的日志存储格式 log_format main '$remote_addr - $remote_user [$time_local] requesthost:"$http_host"; "$request" requesttime:"$request_time"; ' '$status $body_bytes_sent "$http_referer" - $request_body' '"$http_user_agent" "$http_x_forwarded_for"'; #修改文件/usr/local/etc/goaccess.conf改成goaccess格式标准对应为 time-format %T date-format %d/%b/%Y log-format %h - %^ [%d:%t %^] requesthost:"%v"; "%r" requesttime:"%T"; %s %b "%R" - %^"%u" #测试生成页面 goaccess -f /var/log/nginx/access.log -c -a>/usr/share/nginx/html/go.html #后台实时生成数据到goaccess页面 /usr/local/bin/goaccess /var/log/nginx/access.log -o /usr/share/nginx/html/go.html --real-time-html &