GoAccess 分析Nginx 日志

2023年 5月 4日 32.0k 0

为了查看本站点的健康状况以及用户访问情况,就需要定期的分析服务器的 access 日志。这时候可以适合引入轻量级的日志分析工具,例如 GoAccess ,其使用简单且分析效果较好
GoAccess 分析Nginx 日志
Nginx

GoAccess 介绍

GoAccess被设计成一个基于终端的快速日志分析器。它的核心思想是实时快速分析和查看Web服务器统计信息,而无需使用您的浏览器
虽然终端输出是默认输出,但是它能够生成完整的,自包含的实时HTML报告,非常适合分析,监控和数据可视化,以及JSON和CSV报告

主要功能

  • 用C语言编写的,快速,实时,毫秒/秒更新
  • GoAccess是用C语言编写的。要运行它,你只需要将ncurses作为依赖项
  • 几乎所有的Web日志格式 (Apache,Nginx,Amazon S3,Elastic Load Balancing,CloudFront等)
  • 只需要设置日志格式并根据您的日志运行它
  • 漂亮的终端和自定义仪表盘
  • GoAccess能够通过磁盘上的B + Tree数据库逐步处理日志
  • 需要最少的配置
  • 配色方案可定制
  • GoAccess演示地址
    https://k.i4t.com/go.html
    依赖包安装

    #首先先安装依赖包,需要配置epel  (根据系统进行依赖安装)
    #centos6
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
    
    
    #centos7
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    
    
    #安装依赖包
    yum -y install glib2 glib2-devel ncurses ncurses-devel GeoIP GeoIP-devel GeoIP-data 
    

    版本使用1.3 发行时间2018-11-23
    安装Goaccess 由于网络问题,官方下载的比较慢,这里我提供了一套下载地址

    #abcdocker提供软件包下载
    wget http://down.i4t.com/goaccess-1.3.tar.gz
    tar xf goaccess-1.3.tar.gz
    cd goaccess-1.3
    ./configure --prefix=/usr/local/goaccess1.3 --enable-utf8 --enable-geoip=legacy --with-openssl
    make && make install
    
    #官方下载
    wget https://tar.goaccess.io/goaccess-1.3.tar.gz
    tar xf goaccess-1.3.tar.gz
    cd goaccess-1.3
    ./configure --prefix=/usr/local/goaccess1.3 --enable-utf8 --enable-geoip=legacy --with-openssl
    make && make install
    
    
    #设置软链
    ln -s /usr/local/goaccess1.3 /usr/local/goaccess
    

    以上二选一

    配置GoAccess

    安装我的文档安装完goaccess之后,目录在/usr/local/goaccess下
    接下来我们要对goaccess做一些配置

    1.配置环境变量
    echo "export PATH=/usr/local/goaccess/bin:$PATH" >>/etc/profile
    source /etc/profile
    
    2.配置文件修改
    [root@abcdocker ~]# vim /usr/local/goaccess/etc/goaccess/goaccess.conf
    time-format %H:%M:%S
    date-format %d/%b/%Y
    log-format %h %^[%d:%t %^] "%r" %s %b "%R" "%u"
    
    
    3.配置文件参数说明
    %x 匹配 time-format 和 date-format 变量的日期和时间字段。用于使用时间戳来代替日期和时间两个独立变量的场景。
    %t 匹配 time-format 变量的时间字段。
    %d 匹配 date-format 变量的日期字段。
    %v 根据 canonical 名称设定的服务器名称(服务区或者虚拟主机)。
    %e 请求文档时由 HTTP 验证决定的用户 ID。
    %h 主机(客户端IP地址,IPv4 或者 IPv6)。
    %r 客户端请求的行数。这些请求使用分隔符(单引号,双引号)引用的部分可以被解析。否则,需要使用由特殊格式说明符(例如:%m, %U, %q 和 %H)组合格式去解析独立的字段。
    注意: 既可以使用 %r 获取完整的请求,也可以使用 %m, %U, %q and %H 去组合你的请求,但是不能同时使用。
    %m 请求的方法。
    %U 请求的 URL。
    注意: 如果查询字符串在 %U中,则无需使用 %q。但是,如果 URL 路径中没有包含任何查询字符串,则你可以使用 %q 查询字符串将附加在请求后面。
    %q 查询字符串。
    %H 请求协议。
    %s 服务器回传客户端的状态码。
    %b 回传客户端的对象的大小。
    %R HTTP 请求的 "Referer" 值。
    %u HTTP 请求的 "UserAgent" 值。
    %D 处理请求的时间消耗,使用微秒计算。
    %T 处理请求的时间消耗,使用带秒和毫秒计算。
    %L 处理请求的时间消耗,使用十进制数表示的毫秒计算。
    %^ 忽略此字段。
    %~ 继续解析日志字符串直到找到一个非空字符(!isspace)。
    ~h 在 X-Forwarded-For (XFF) 字段中的主机(客户端 IP 地址,IPv4 或者 IPv6)。
    

    Nginx配置
    为了提供Goaccess分析精准度,需要配置Nginx的log_format

        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                           '$status $body_bytes_sent "$http_cookie" "$http_referer" '
                           '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  logs/access_web.log  main;
    
    #在http标签配置的,默认就有开启就ok
    

    GoAccess 控制台模式

    goaccess有控制台模式和html静态页面模式,这里先介绍一下控制台模式

    goaccess -a -d -f logs/access_web.log -p /usr/local/goaccess/etc/goaccess/goaccess.conf
    
    
    #常用参数
    -a --agent-list 启用由主机用户代理的列表。为了更快的解析,不启用该项
    -d --with-output-resolver 在HTML/JSON输出中开启IP解析,会使用GeoIP来进行IP解析
    -f --log-file 需要分析的日志文件路径
    -p --config-file 配置文件路径
    -o --output 输出格式,支持html、json、csv
    -m --with-mouse 控制面板支持鼠标点击
    -q --no-query-string 忽略请求的参数部分
    --real-time-html 实时生成HTML报告
    --daemonize 守护进程模式,--real-time-html时使用
    

    控制台操作方法

    F1   主帮助页面
    F5   重绘主窗口
    q    退出
    1-15 跳转到对应编号的模块位置 
    o    打开当前模块的详细视图
    j    当前模块向下滚动
    k    当前模块向上滚动
    s    对模块排序
    /    在所有模块中搜索匹配
    n    查找下一个出现的位置
    g    移动到第一个模块顶部
    G    移动到最后一个模块底部
    

    image_1de4ef39f1ercbj4uk71opi1csup.png-783.3kB
    image_1de4eidar1mjhe6ffoaa2rijh26.png-821.2kB

    GoAccess HTML模式

    goaccess -a -d -f /usr/local/nginx/logs/access_web.log -p /usr/local/goaccess/etc/goaccess/goaccess.conf -o /usr/local/nginx/html/image/go-access.html
    
    #-o 输出html地址
    

    image_1de4fburcvsj119o1tsm1kc7v4d2j.png-54.2kB
    image_1de4fhb5t11jp1p2t1ub1cne10ae3g.png-680kB

    GoAccess Daemonize

    GoAccess可以使用daemonize模式运行,并提供创建实时HTML的功能,只需要在启动命令后添加--real-time-html和--daemonize参数即可

    [root@abcdocker ~]# goaccess -a -d -f /usr/local/nginx/logs/access_web.log -p /usr/local/goaccess/etc/goaccess/goaccess.conf -o /usr/local/nginx/html/image/go-access.html --real-time-html --daemonize
    Daemonized GoAccess: 25584
    
    #监听端口7890
    [root@abcdocker ~]# netstat -lntup|grep 7890
    tcp        0      0 0.0.0.0:7890            0.0.0.0:*               LISTEN      25584/goaccess
    

    启动GoAccess后,使用Web socket建立长连接,监听7890端口,还可以使用--port指定端口号
    网站开启了HTTPS功能,就需要GoAccess启用openssl,在配置文件goaccess.conf中配置ssl-cert和ssl-key来支持openssl,还需要将ws-url指定为https://i4t.com

    GoAccess Crontab

    在某些常见下,没有这样的实时性要求,可采用crontab机制实现定时更新HTML报表

    */45 * * * * goaccess -a -d -f /usr/local/nginx/logs/access_web.log -p /usr/local/goaccess/etc/goaccess/goaccess.conf -o /usr/local/nginx/html/k8s/k8s.abcdocker.com/go.html
    

    定时任务设置每45分钟刷新一次
    当Nginx日志被切割后,可以使用--keep-db-file进行分析新产生的日志
    GoAccess演示地址
    https://k.i4t.com/go.html
    45分钟刷新一次
    image_1de4j2ced1k8o12o0efj1h8l1gr43t.png-392.3kB

    相关文章:

    1. Kubernetes 1.14 二进制集群安装
    2. Kuerbernetes 1.11 集群二进制安装
    3. 搭建分布式文件系统FastDFS集群
    4. Nagios 配置及监控

    相关文章

    服务器端口转发,带你了解服务器端口转发
    服务器开放端口,服务器开放端口的步骤
    产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
    如何使用 WinGet 下载 Microsoft Store 应用
    百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
    百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

    发布评论