最近工作中突发奇想,看着web项目刷刷滚动的日志,想要看看每天有多少个用户访问,访问了什么接口,以及其他的一些详细信息。于是便谷歌了一波,找到了一个方案,花费
很少的时间成本,实现了我需要的结果。这就是goaccess。
goaccess和elk以及click—house一样都是日志分析工具,但是相比来说更加的小巧简单。因为是用c编写的,分析日志也非常高效。
Logrotate日志切割
最好我们先对nginx日志进行切割,每天生成一个,然后就可以按天来用goaccess来分析,日志切割可以使用logrotate,它是centos自带的日志切割工具,我们只需要
cd /etc/logrotate.d/
vi nginx
加入以下内容:
/www/wwwlogs/*log { # 指的是对这个目录下所有log都进行切割
su root www
create 600 www www
daily # 每日切割
dateext
rotate 10
missingok
nocompress # 不压缩日志
notifempty
sharedscripts
olddir /www/wwwlogs/oldlogs # 这个目录要事先创建好,并给相关权限
postrotate
kill -USR1 `cat /www/server/nginx/logs/nginx.pid` # kill -USR1 `cat /var/run/nginx.pid不是中止Nginx的进程,而是传递给它信号重新生成日志,如果nginx没启动不做操作
endscript
}
然后直接保存即可,保存命令是:wq
这样历史日志就存在oldlogs文件夹里了,nginx日志也是每日最新的
相关的参数说明:
logrotate详解:
logrotate 可以直接执行,后面跟配置文件就可以了,如:/usr/sbin/logrotate -f /etc/logrotate.d/nginx
参数:
-v 显示指令执行过程
-d Debug模式(模拟执行),详细显示指令执行过程,便于排错或了解程序执行的情况。
-f 强制执行
-s <状态文件> 使用指定的状态文件
logrotate 的默认配置文件是 /etc/logrotate.conf。主要参数:
daily指定转储周期为每天
weekly指定转储周期为每周
monthly指定转储周期为每月
dateext在文件末尾添加当前日期
compress通过gzip 压缩转储以后的日志
nocompress不需要压缩时,用这个参数
copytruncate先把日志内容复制到旧日志文件后才清除日志文件内容,可以保证日志记录的连续性
nocopytruncate备份日志文件但是不截断
create mode owner group转储文件,使用指定的文件模式创建新的日志文件
nocreate不建立新的日志文件
delaycompress和 compress 一起使用时,转储的日志文件到下一次转储时才压缩
nodelaycompress覆盖 delaycompress 选项,转储同时压缩。
errors address专储时的错误信息发送到指定的Email 地址
ifempty即使是空文件也转储,这个是 logrotate 的缺省选项。
notifempty如果是空文件的话,不转储
mail address把转储的日志文件发送到指定的E-mail 地址
nomail转储时不发送日志文件
olddir directory转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
noolddir转储后的日志文件和当前日志文件放在同一个目录下
rotate count指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份
tabootext [+] list让logrotate 不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave, v, 和 ~
size size当日志文件到达指定的大小时才转储,Size 可以指定 bytes (缺省)以及KB (sizek)或者MB (sizem).
prerotate/endscript在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行
postrotate/endscript在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行
Goaccess安装与配置
然后就是对每日日志进行分析了,首先安装Goaccess
安装
在centos上安装直接yum安装就好了
通过yum安装可以自动的解决依赖问题
yum install goaccess -y
配置
echo "export PATH=/usr/local/goaccess/bin:$PATH" >>/etc/profile
source /etc/profile
goaccess -V
可以看到输出
GoAccess - 1.3
For more details visit: http://goaccess.io
Copyright (C) 2009-2016 by Gerardo Orellana
日志分析与展示
然后我们编写一个脚本来执行,如下
#!/bin/bash
Date_target=`date +%Y%m%d`
trans_file=$Date_target.html
# 分析当天的实时nginx日志
LANG="zh_CN.UTF-8" goaccess /www/wwwlogs/test.log -a -o /www/wwwroot/log_analysis/$trans_file --log-format=COMBINED
这个步骤主要是公国goaccess,对指定的nginx日志进行分析,然后生成对应的html,html是可以直接浏览器打开的,非常方便。
LANG="zh_CN.UTF-8"代表生成的html语言为中文,/www/wwwlogs/test.log为nginx日志,/www/wwwroot/log_analysis/$trans_file为生成的html文件。
用浏览器打开生成的html日志文件,就能看到具体的详细分析结果
里面有访客信息,操作系统等等内容,非常详细
版权属于:Jolly
本文链接:https://totoro.site/index.php/archives/120/
关于转载:原创文章,禁止转载