SKYSUKA's Studio.

云服务器日志自动化分析

字数统计: 1.3k阅读时长: 4 min
2019/10/04 Share

更多好用的开发工具或技术文章可以查看我的TechRepo~

GoAccess

最近发现一款颜值颇高的开源日志分析工具GoAccess,话不多说先上图,也可以直接查看本站的实时日志分析地址

于是也有了写作本篇blog的动机,用于收录一些实用的服务器日志分析工具,本篇blog也将不时更新内容。

简介

GoAccess is an open source real-time web log analyzer and interactive viewer that runs in a terminal in *nix systems or through your browser.

分析日志文件对于管理员而言是一件不容易的事情,里面包含了非常繁杂的各种信息,目前Linux中有许多工具可以轻松的分析日志,GoAccess就是其中的一款。

正如头图一样,高颜值的可视化日志分析功能是GoAccess是其一大特点,除此之外还有如下功能:

  • 实时。终端200ms刷新,HTML输出1s刷新
  • 支持几乎所有Web Log格式。比如Apache, Nginx, Amazon, S3, Elastic Load Balancing, CloudFront
  • 跟踪页面的响应时间。特别适合发现哪些页面拖慢了整个网站的响应
  • 依赖安装少。GoAccess是用C写的,只需要安装ncurses即可运行
  • 多种输出形式。刚才头图给出的是HTML格式的输出,GoAccess还能提供终端输出:

安装与运行

GoAccess的安装具体可以查看官网,本处贴出centos上的安装方式:

1
2
3
4
5
6
$ wget https://tar.goaccess.io/goaccess-1.3.tar.gz
$ tar -xzvf goaccess-1.3.tar.gz
$ cd goaccess-1.3/
$ ./configure --enable-utf8 --enable-geoip=legacy
$ make
# make install

可能会提示Missing development files for the GeoIP library,所以按照如下方式安装依赖:

1
yum install geoip-devel ncurses ncurses-devel glib2-devel

GoAccess的运行方式比较直接,安装完毕后,直接在命令行里输入如下指令即可:

1
goaccess /var/log/nginx/access.log -o /home/linqunshu.cn/www/report/report.html --log-format=COMBINED --real-time-html

由于GoAccess 默认使用端口 7890 作为 WebSocket 服务器,因此我们需要在服务器的防火墙策略里面添加7890这个端口。上面的指令可以开启一个站点进行监控,除此之外,我们也可以通过命令行的方式进行监控:

1
goaccess /var/log/nginx/access.log -c

关于服务器日志

通过分析日志可以发现有非常多有趣的现象,这一节分享一些在我的个人站点的日志中发现的故事。

Frequent Not Found URLs(404s)

从图中可以看到访问最多404的是/robots.txt,这是robots协议,它通常告诉网络搜索引擎的漫游器(通常称网络爬虫),本网站中的哪些内容是不应被搜索引擎获取的,哪些是可以被获取的,贴一段关于robots.txt的产生背景:

robots.txt并不是某一个公司制定的,而是早在1993、94年就早已出现,当时还没有Google。真实Robots协议的起源,是在互联网从业人员的公开邮件组里面讨论并且诞生的。即便是今天,互联网领域的相关问题也仍然是在一些专门的邮件组中讨论,并产生(主要是在美国)。
1994年6月30日,在经过搜索引擎人员以及被搜索引擎抓取的网站站长共同讨论后,正式发布了一份行业规范,即robots.txt协议。在此之前,相关人员一直在起草这份文档,并在世界互联网技术邮件组发布后,这一协议被几乎所有的搜索引擎采用,包括最早的altavista,infoseek,后来的google,bing,以及中国的百度,搜搜,搜狗等公司也相继采用并严格遵循。

其实从网站的访问量来看,我的个人主站每天400+的请求量中非常大一部分来自于搜索引擎的爬虫,比如Google,Bing的爬虫。

关于部署性能监控页面

工程师可能会希望通过一个页面来实时的监控自己的站点的信息,但是同时也不希望别人能访问这个站点,因此需要对该站点设置访问权限,我们可以通过Nginx密码认证的手段来达到这一目的。

我们首先安装htpasswd这个工具,然后设置用户名和密码,并将用户名和密码保存到指定的文件中:

1
2
3
4
htpasswd -c /usr/share/nginx/passwd skysuka
New password:
Re-type new password:
Adding password for user skysuka

然后在nginx.conf文件中进行具体的配置,配置内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server {
listen 80;
server_name label.molardata.com;
location /monit {
alias /usr/share/nginx/html/monit;
auth_basic "请输入用户名和密码"; # 这里是验证时的提示信息
auth_basic_user_file /usr/share/nginx/report_passwd; # 这是你生成密码存放的文件
proxy_http_version 1.1; # 这三行是为了实现websocket
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}

参考资料

CATALOG
  1. 1. GoAccess
    1. 1.1. 简介
    2. 1.2. 安装与运行
  2. 2. 关于服务器日志
    1. 2.1. Frequent Not Found URLs(404s)
  3. 3. 关于部署性能监控页面
  4. 4. 参考资料