使用goaccess对Nginx日志简单分析

摘要:
继续使用Linux命令进行分析。但ELK太重了。这里我们使用轻量级goaccess。接收日志访问是直接分析日志文件。首先,获取日志文件。Nginx本机支持将日志发送到远程系统日志。请参阅官方文档。1access_logsyslog:server=xxx.xxxx.xxx:514,facility=local5,tag=access_log_huanbao,severity=infomain;对于接收端,配置rsyslog以接收数据。有关模板,请参阅官方rsyslog文档,其中%programname%实际上与%syslogtag%相同,但有多个:,不需要,所以使用%programname%n。启动前,进行必要的配置。配置文件是:goaccess.conf。我不知道在哪里全局搜索。例如,我的位置是:/usr/local/etc/goaccess/goaccess.conf。

上篇使用 Linux命 令来分析。使用命令太麻烦,既不快捷又不直观,市面上有不少现成的工具可以使用,比如 ELK。但 ELK 太重了,这里使用的是比较轻量的 goaccess

接收日志

goaccess 是直接对日志文件进行分析,首先要获得日志文件。nginx 原生支持将日志发送到远程 syslog , 参见官方文档

1
access_log syslog:server=xxx.xxx.xxx.xxx:514,facility=local5,tag=access_log_huanbao,severity=info main;

对于接收端,配置 rsyslog 接收数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
 
# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
 
# 定义两个模板,一个生成是动态文件,一个替换默认的日志格式
template (name="nginx_access_file" type="string" string="/opt/nginx-logs/%programname%.log")
template (name="nginx_access_format" type="string"
string="%msg:2:$:% ")
 
# 接收 facility 为 local5 的日志
local5.* action(type="omfile" dynafile="nginx_access_file" template="nginx_access_format")

接收端口514,UDP 和 TCP 协议都开了。

关于模板,得参考 rsyslog 官方文档,其中 %programname% 其实跟 %syslogtag% 一样,只是后者多了个: ,并不需要,所以使用 %programname%。全部可用属性参见这里。日志格式为何不直接使用 %msg% 呢,原因是它使用的某个标准开头就是有空格,我们并不需要,需要去掉,参见此文

关于 action,type 是必须的,指定输出模块,type 或 dynafile 必须其一,指定输出到静态文件或动态文件(动态优先),template 指定所用模板。

rsyslog 配置一大堆,写错又不报,可以通过这个命令来检查是否正确: rsyslogd -N1, 参见这里

分析日志

依据文档安装 goaccess :

1
2
3
4
5
6
$ tar -xzvf goaccess-1.3.tar.gz
$ cd goaccess-1.3/
$ ./configure --enable-utf8 --enable-geoip=mmdb --enable-tcb=btree
$ make
# make install

这里 –enable-geoip=mmdb , 是使用 geoip 的城市数据库(通过 IP 获得城市),缺少什么搜索都能解决,注意别忘了 libmaxminddb-devel.x86_64 。由于enable-tcb=btree(开多个指定数据位置需要),还需要yum install tokyocabinet-devel bzip2-devel zlib-devel。

在开始之前先要进行必要的配置,配置文件是:goaccess.conf,不知道在哪里全局搜索一下,比如我的位于:/usr/local/etc/goaccess/goaccess.conf 。必须配置的字段是time_format、date_format、log_format,在 faq 页面有说明有网友提供了一个工具 nginx2goaccess,输入日志格式是得出配置信息:

1
2
3
4
5
6
7
[root@VM_0_9_centos ~]# ./nginx2goaccess.sh '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for" $request_time $upstream_response_time'
 
- Generated goaccess config:
 
time-format %T
date-format %d/%b/%Y
log_format %h - %^ [%d:%t %^] "%r" %s %b "%R" "%u" "%^" %T %^

然后在配置文件末尾添加这三项即可。由于还要使用 geoip 数据库,最终添加了四项:

1
2
3
4
time-format %T
date-format %d/%b/%Y
log_format %h - %^ [%d:%t %^] "%r" %s %b "%R" "%u" "%^" %T %^
geoip-database /usr/local/src/GeoLite2-City_20190326/GeoLite2-City.mmdb

最后,执行以下命令,即可生成报告:

1
goaccess /opt/nginx-logs/access_log_huiyouduo.log --config-file=/usr/local/etc/goaccess/goaccess.conf -o report.html --real-time-html --daemonize

其中 -o 是生成的文件所在目录,放到一个可通过 web 访问下目录即可。最终结果:

使用goaccess对Nginx日志简单分析第1张

PS,如果有多个网站,就起多个 goaccess 进程,直接写完整的命令即可(注意使用不同的 socket 端口、fifo-in、fifo-out、pid-file):

1
2
3
4
5
6
7
8
9
10
11
12
13
goaccess /opt/nginx-logs/access_log_huanbao.log
-o /usr/share/nginx/html/laravel/public/huanbao.html
--time-format '%T'
--date-format '%d/%b/%Y'
--log-format '%h - %^ [%d:%t %^] "%r" %s %b "%R" "%u" "%^" %T %^ "%^"'
--geoip-database /usr/local/src/GeoLite2-City_20190326/GeoLite2-City.mmdb
--db-path /tmp/goaccess/huanbao
--fifo-in /tmp/goaccess/huanbao/fifo.in
--fifo-out /tmp/goaccess/huanbao/fifo.out
--pid-file /tmp/goaccess/huanbao/goaccess.pid
--real-time-html
--port 7891
--daemonize

参见这里

免责声明:文章转载自《使用goaccess对Nginx日志简单分析》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇[OpenCV开发]OpenCV图像编码和解码 imencode和imdecode使用,用于网络传输图片OC编程之道-创建对象之抽象工厂方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

[记录点滴] OpenResty中Redis操作总结

[记录点滴] OpenResty中Redis操作总结 0x00 摘要 本文总结了在OpenResty中的操作,与大家分享,涉及知识点为Openresty, Lua, Redis。 0x01 操作记录 操作使用 db.redis.redis_iresty。 1.1 初始化 & 基础函数 set $redis_host 127.0.0.1; -- I...

Linux下查看Nginx的并发连接数和连接状态-乾颐堂

Linux下查看Nginx等的并发连接数和连接状态。 1、查看Web服务器(Nginx Apache)的并发请求数及其TCP连接状态:  netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 或者: netstat -n | awk '/^tcp/ {++state[$NF...

FastDFS安装

FastDFS 安装包 FastDFS安装包 百度网盘 密码 aj4f 下载后把安装包移动到服务器里面 这里我把安装包放在opt/FastDFS FastDFS安装 安装环境 在本地安装就需要安装gcc环境yum -y install cmake make gcc-c++ 在阿里服务器因为帮你配置好了的 解压libfastcommon到指定目录 解压 -C...

Nginx https加密以及nginx日志配置与管理

Nginx https加密以及nginx日志配置与管理使用Nginx的优点Nginx作为WEB服务器,Nginx处理静态文件、索引文件、自动索引的效率非常高。Nginx作为代理服务器,Nginx可以实现无缓存的反向代理,提高网站的性能Nginx作为负载均衡服务器,内部可以支持PHP、也可以支持HTTP代理服务器对外进行服务,同时还支持简单的容错和利用算法进...

Haproxy安装配置及日志输出问题

简介:软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用的软负载实现。LVS就是基于Linux操作系统实现的一种软负载,HAProxy就是开源的并且基于第三应用实现的软负载。 HAProxy支持两种主要的代理模式:"tcp"也即4层(大多用于邮件服务器、内部协议通信服务器等),和7层(HTTP)。在4层模式 下,HAproxy仅在...

详解封装源码包成RPM包

源码编译安装是最常用安装软件方式,可是面对工作量巨大时候就需要我们的RPM包上场了,统一的模块,一键安装。在面对一定数量的服务器上,RPM就可以为我们节省大量的时间。 RPM可以在网上下载,但是当我们需要用到特殊模块时,这些网上的RPM就显得那么的苍白无力了。所以自行封装打包成了一和需求。现在就介绍如何封装打包。 打包流程 1)准备源码软件 2)安装r...