美文网首页
使用GoAccess分析nginx的日志

使用GoAccess分析nginx的日志

作者: 小钟钟同学 | 来源:发表于2018-04-13 16:01 被阅读309次

    为了更加直观的分析nginx的日志

    原文参考地址:https://www.fanhaobai.com/2017/06/go-access.html

    Nginx日志格式配置

    为了提高 GoAccess 分析准确度,需要配置 nginx.conf 的 log_format 项。

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for" "$request_body"';
    

    安装

    # yum install glib2 glib2-devel GeoIP-devel  ncurses-devel zlib zlib-devel
    # yum install goaccess
    

    查看配置文件:

    [root@localhost etc]# whereis goaccess
    goaccess: /usr/bin/goaccess /etc/goaccess.conf /usr/share/man/man1/goaccess.1.gz
    

    修改配置文件(在配置文件的末尾处添加上):

    time-format %H:%M:%S
    date-format %d/%b/%Y
    log-format %h %^[%d:%t %^] "%r" %s %b "%R" "%u"
    

    其中,log-format 与 access.log 的 log_format 格式对应,每个参数以空格或者制表符分割。参数说明如下:

    %t  匹配time-format格式的时间字段
    %d  匹配date-format格式的日期字段
    %h  host(客户端ip地址,包括ipv4和ipv6)
    %r  来自客户端的请求行
    %m  请求的方法
    %U  URL路径
    %H  请求协议
    %s  服务器响应的状态码
    %b  服务器返回的内容大小
    %R  HTTP请求头的referer字段
    %u  用户代理的HTTP请求报头
    %D  请求所花费的时间,单位微秒
    %T  请求所花费的时间,单位秒
    %^  忽略这一字段
    

    开始分析相关日志(我采取上传日志的方式):

    1)控制台模式

    [root@localhost bak]# goaccess -a -d -f /data/bak/ysj_read_sight_api_access\ \(10\).log -p /etc/goaccess.conf 
    

    效果:

    image.png

    2)HTML模式
    PS参数说明:
    指定输入日志文件的路径。如果在配置文件中指定了输入文件,则其优先级要高于在命令行中通过 -f 参数指定。

    -f --log-file=<logfile>
    

    开启 UserAgent 列表。开启后会降低解析速度。

    -a --agent-list
    

    输出 HTML 或者 JSON 报告时开启 IP 解析。

    -d --with-output-resolver
    

    将给定文件重定向到标准输出,通过后缀名决定输出格式:

    -o --output=<json|csv>
    

    具体命令

    [root@localhost xiaozhong]# goaccess -a -d -f /data/bak/ysj_read_sight_api_access\ \(10\).log -p /etc/goaccess.conf -o /data/bak/xiaozhong/ysj-go-access.html
    
    # goaccess -f /var/log/httpd/access_log > reports.html
    
    image.png

    效果把文件导出本地或自己搭建一个简单的服务读取配置文件:


    最终效果图

    扩展学习--日志格式规范

    参考:https://blog.csdn.net/iamxiaoxiong/article/details/50527041
    参考:https://blog.csdn.net/lgq421033770/article/details/51512986

    官网地址:https://goaccess.io/man#custom-log

    image.png

    原始格式:

        log_format  main  '[$time_local] $remote_addr  $upstream_addr  $status  $body_bytes_sent  [$request_time] '
                          '"$request" "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
    
    

    参考格式:

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for" "$request_body"';
    

    当前使用格式

    
    log_format  main  '$remote_addr - $upstream_addr $remote_user [$time_local] "$request" [$request_time] [$upstream_response_time]'
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for" "$request_body"';
    
    
    time-format %H:%M:%S
    date-format %d/%b/%Y
    log-format %h %^ %^[%d:%t %^] "%r" [%T] %^ %s %b "%R" "%u"
    
    

    关于格式匹配问题:
    说明: 不一定要只是一个空格 两个空格也是可以匹配到的

    重要
    如果同时使用了多个处理时间的特殊说明符,则在格式字符串中第一个指定的选项具有最高优先级。
    GoAccess 要求下列字段:

    有效的 IPv4/6 地址 %h
    有效的日期 %d
    请求 %r

    日志示例:

    100.116.221.68 - - [13/Apr/2018:19:02:14 +0800] "GET /course/sub/?code=A23dDFMq52 HTTP/1.1" 0.286  200 71 "http://xxxxxxxxxxxxxx/pActive/activity_5.html?channelId=rouqiu0403&short_key=ivAELV3UK" "Mozilla/5.0 (iPhone; CPU iPhone OS 11_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.0 Mobile/15E148 Safari/604.1" "220.249.163.55" "-"
    

    对应配置文件:


    image.png

    错误提示示例说明:

    image.png

    命令示例:

    # goaccess -a -d -f /data/logs/nginx/xxxxxxxxx_access.log -p /etc/goaccess.conf -o /tmp/ysj-0626.html
    

    相关文章

      网友评论

          本文标题:使用GoAccess分析nginx的日志

          本文链接:https://www.haomeiwen.com/subject/hjyckftx.html