专栏首页云原生生态圈带命令行控制台的轻量级日志分析工具-GoAccess

带命令行控制台的轻量级日志分析工具-GoAccess

使用场景

对于想在短时间内快速的生成小站点访问情况的统计数据,一般会选择使用sedawkgrep三剑客,但是对于要对数据的展示就需要填充到已有开发面板中,比较耗时费力,当然对于也可以使用ELK/EFK专业日志分析平台来做,但搭建缓慢,服务笨重,不是小站点的首选,这里介绍一个使用C语言研发的轻量级日志分析工具GoAccess[1],性能稳定,可作为小站点日志分析统计的首选。

基础功能

GoAccess随着不断地版本迭代,其支持的功能也越来与丰富、越来越能满足基本的需求,下面列举几个基础功能,更多可参见GoAccess Feature[2]

  • 可以实时分析几乎所有的web日志格式,并且还支持自定义日志格式
  • 满足日常需要关注的基础指标
  • 安装和部署简单,只需要依赖一个ncurses
  • 可以在命令行终端试试显示统计报告,也可以输出到静态html页面展示分析统计数据报告。
  • 支持扩展的模块...

实践说明

安装goaccess仅有需要依赖的ncurses库

sudo apt-get install libncursesw5-dev

当需要把Nginx访问日志中的geoip给统计导入到新的文件中时,需要GeoIP库的支持

$ wget https://github.com/maxmind/geoip-api-c/releases/download/v1.6.11/GeoIP-1.6.11.tar.gz
$ tar -xzvf GeoIP-1.6.11.tar.gz
$ cd GeoIP-1.6.11
$ ./configure
$ make
$ make install

完成Goaccess依赖的环境之后,开始构建goacess工具

wget http://tar.goaccess.io/goaccess-1.2.tar.gz
tar xf goaccess-1.2.tar.gz && cd goaccess-1.2/
./configure --enable-utf8 --enable-geoip=legacy --with-openssl
make && make install

我们使用Nginx的日志为例,通过解析nginx访问日志进行数据的展示,为了能准确的获取数据,下面提供一下测试时使用的nginx日志格式,log_format配置在nginx.confhttp配置段中:

# 配置nginx访问日志格式
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"';

下面配置安装好GoAccess之后的配置文件:

root@master:/webserver/nginx18# cat /etc/goaccess.conf |egrep -v '^$|^#'
time-format %H:%M:%S
date-format %d/%b/%Y
log-format %h %^[%d:%t %^] "%r" %s %b "%R" "%u"
...
# 上面的三行添加到配置文件中,其余的位置不需要改动

下面对部分的日志格式选项进行说明,更多的选项的使用可以直接参考官方文章自定义日志格式部分[3]

%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  请求所花费的时间,单位秒
%^  忽略这一字段

在配置好之后,我们启动一个使用该nginx日志格式的服务proxy.devopsman.cn,配置文件如下:

server {
 server_name proxy.devopsman.cn;
 listen 80;
        access_log logs/proxy.devopsman.cn.log;
 location / {
  proxy_set_header Host $host;
  proxy_set_header X-Real_IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_pass http://192.168.99.1;
 }
}

通过命令行进行访问该服务,并且启动GoAccess的命令行控制台模式

curl http://proxy.devopsman.cn
goaccess -a -d -f ./proxy.devopsman.cn.log -p /etc/goaccess.conf
root@master:/webserver/nginx18/logs# pwd
/webserver/nginx18/logs
goaccess -a -d -f ./proxy.devopsman.cn.log -p /etc/goaccess.conf -o ${proxy.devopsman.cn}/index.html # goaccess分析的文件输出到proxy.devopsman.cn的目录下,通过服务直接访问
goaccess -a -d -f ./proxy.devopsman.cn.log -p /etc/goaccess.conf -o ${proxy.devopsman.cn}/index.html --real-time-html --daemonize
# 也可以通过以上命令实时分析日志文件,渲染到html页面

Reference

[1]

Goaccess: https://goaccess.io/

[2]

GoAccess Feature: http://goaccess.io/features

[3]

GoAccess custom-log: http://goaccess.io/man#custom-log

本文分享自微信公众号 - 云原生生态圈(CloudNativeEcoSystem),作者:Marionxue

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-07-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何在腾讯云上搭建博客

    Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。

    公众号: 云原生生态圈
  • MYSQL数据同步之基于GTID事务数据同步

    本文通过Docker以及mysql5.7 镜像进行基于GTID数据复制的同步实践。

    公众号: 云原生生态圈
  • Logoly-P站&YouTobe风格Logo在线生成器

    最近发现很多的微信文章上出现了一种logo设计,跟P站的logo设计风格一样让人印象深刻,黑底白字,配上一小撮橙色,给人极强的冲击力。后来查了一下在Github...

    公众号: 云原生生态圈
  • ROS2初学者教程(Dashing和Eloquent)Windows

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明...

    zhangrelay
  • Linux内核事件通知链(notifier chain)

    内核许多子系统之间关联紧密,因此在一个子系统发生或者检测到的事件信息很可能对其他子系统来说也是有价值的。为了满足其他子系统对这些事件信息的需求,即在某个子系统内...

    IT大咖说
  • JS示例21-如何进行元素属性操作(3种方式)

    1、oTxt.value 2、oTxt['value'] 3、oTxt.setAttribute('value','Dom方式')

    专注APP开发
  • 【分析工具介绍】工欲善其事必先利其器

    用户1756920
  • 聊聊细节 - 你知道缓存的正确打开方式么?(1)

    大的架构设计,各种高大上的概念层出不穷,相信很多人也或多或少的了解过,但其实,我们真的要把一个系统做强壮,做好,打磨细节才是根本,有句老话:细节是魔鬼,所以会来...

    桶哥
  • 【AI 引擎】Windows 10的机器学习能力 | 30年内,长生不老成真? | 群通信机器人方向实现突破

    1.Windows 10的Windows Defender机器学习能力 ? 今天微软club网站上公布了Windows 10系统Windows Defender...

    新智元
  • Linux内核通知链(Notifier)

    在linux内核中,各个子系统之间有很强的相互关系,某些子系统可能对其他子系统产生的事件比较感兴趣。因此内核引入了notifier机制,当然了notifier机...

    DragonKingZhu

扫码关注云+社区

领取腾讯云代金券