I have a VPS with Nginx as a web server and also a lot of web sites on it. It is on Digital Ocean.
Here is the VPS basic information.
- SFO2
- 1GB Nanode
- Ubuntu Linux 18.04.2
- Intel(R) Xeon(R) CPU E5-2650 v4 @ 2.20GHz, 1 cores
- Nginx 1.15.9
All sites use one access.log file. The following code is in the http block of /etc/nginx/nginx.conf file.
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main;
All access logs look like below:
Now it is time to show you how to use GoAccess to Generate Report with Multiple Nginx Log files.
Install GoAccess
sudo install goaccess
Modify the Config file of GoAccess
GoAccess config file is located at /etc/
sudo nano /etc/goaccess.conf
Add the following code or modify the code inside of the goaccess.conf.
time-format %H:%M:%S date-format %d/%b/%Y log-format %h %^[%d:%t %^] "%r" %s %b "%R" "%u"
Run GoAccess to generate the report
I would like to get a static report.
sudo goaccess /var/log/nginx/access.log -o /home/davidyin/mywebsite.com/report.html --log-format=COMBINED
The report looks like below:
Due to the log is not just one file. The log files are generated by date and also compressed.
Two log files are not compressed.
- access.log
- access.log.1
The older log files are compressed.
- access.log.2.gz
- access.log.3.gz
- access.log.4.gz
- access.log.5.gz
I want to generate all the access log files. So the command is changed to the way which can phrase multiple log files.
zcat /var/log/nginx/access.log.*.gz | goaccess /var/log/nginx/access.log /var/log/nginx/access.log.1 - -o /home/davidyin/mywebsite.com/report.html --log-format=COMBINED
The sample command above using mywebsite.com. Please replace it with your own sites.
At the last, I add this command into Cron jobs. Schedule it every hour.