GoAccess自定义log_format日志格式详解及使用

承接上一篇GoAccess安装之后,本文章内容主要为了自定义log_format的解析使用说明

文章主要分为两部分:

  • 一、官方自定义格式说明
  • 二、本次自定义格式解析nginx日志实验

网上大部分说的都是使用GoAccess解析固定的nginx-log_format格式
例如:

nginx log_format配置:
log_format  main  '$remote_addr - $remote_user [$time_local] requesthost:"$http_host"; "$request" requesttime:"$request_time"; '
        '$status $body_bytes_sent "$http_referer" - $request_body'
        '"$http_user_agent" "$http_x_forwarded_for"';

GoAccess log_format配置:
log-format %h - %^ [%d:%t %^] requesthost:"%v"; "%r" requesttime:"%T"; %s %b "%R" - %^"%u"

但是事实上,很多情况下,服务器中nginx早已经存在了,而且日志文件有可能会用于其他方面,所以不方便调整nginx的log_format配置的情况下,可以根据自身之前的log_format配置进行调整GoAccess的log_format的配置。

官方使用手册:

GoAccess 可以解析虚拟的任意 Web 日志格式,以及允许任意的自定义格式字符串。

  • time-format参数:time-format 后跟随一个空格符,指定日志的时间格式,包含普通字符与特殊格式说明符的任意组合。
    eg:他们都由百分号 (%)开始。 %T 或者 %H:%M:%S.
  • date-forma参数:date-format
    后跟随一个空格符,指定日志的日期格式,包含普通字符与特殊格式说明符的任意组合。
    eg:他们都由百分号 (%)开始。

注意: 如果给定的时间戳以微秒计算,则必须在 time-format 中使用参数 %f 。

  • log-forma参数:log-format 后跟随一个空格符或者制表分隔符(\t),用于指定日志字符串格式。

具体特殊格式说明符

  • %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)。

自定义log_format解析实验

      因有解析nginx日志的需求,但是nginx的log_format是已经配置过的,所以在不调整nginx_logformat的情况下,使用GoAccess进行解析

常规的log_format参数配置

nginx log_format配置:
log_format  main  '$remote_addr - $remote_user [$time_local] requesthost:"$http_host"; "$request" requesttime:"$request_time"; '
        '$status $body_bytes_sent "$http_referer" - $request_body'
        '"$http_user_agent" "$http_x_forwarded_for"';

GoAccess log_format配置:
log-format %h - %^ [%d:%t %^] requesthost:"%v"; "%r" requesttime:"%T"; %s %b "%R" - %^"%u"

我的nginx-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" $upstream_addr $request_time';

因nginx和goaccess的log_format配置必须要一一对应的关系,再根据上边特殊格式的含义
去掉requesthost、"%v"、requesttime,后边加上 - %^ %T

注:一定要仔细,一个log_format配置的字符中有一个空格,那另外一个log_format配置中也必须有一个空格

得出自定义的goaccess的log_format

log-format %h - %^ [%d:%t %^]; "%r" %s %b "%R" - %^"%u" - %^ %T

正常情况下,time-format和date-format是不用调整配置的
所以我本次的goaccess的配置如下

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

然后使用该配置文件进行解析日志
(如果日志文件较大,会出现Parsing解析中字样)

[root@k8s-etcd-2 ~]# /usr/local/bin/goaccess -a -c -d -f /var/log/nginx/access.log -p /usr/local/etc/goaccess/goaccess.conf > /home/test.html
Parsing... [215,438] [35,906/s]

等待解析完成之后,查看网页即可

发布了5 篇原创文章 · 获赞 0 · 访问量 1424

猜你喜欢

转载自blog.csdn.net/weixin_43860781/article/details/104668332