Jolly

使用Logrotate切割Nginx日志并用Goaccess进行分析展示
最近工作中突发奇想,看着web项目刷刷滚动的日志,想要看看每天有多少个用户访问,访问了什么接口,以及其他的一些详细...
扫描右侧二维码阅读全文
17
2021/07

使用Logrotate切割Nginx日志并用Goaccess进行分析展示

最近工作中突发奇想,看着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日志文件,就能看到具体的详细分析结果
1-gailan.png

里面有访客信息,操作系统等等内容,非常详细
2-fangkeip.png
3-caozuoxitong.png

Last modification:July 17th, 2021 at 02:57 pm
如果觉得我的文章对你有用,请随意赞赏

Leave a Comment

🌓