GoAccess 是一款用于Apache或者Nginx的命令行日志分析器和交互式查看器。使用这款工具,你不仅可以浏览到之前提及的相关数据,还可以通过分析网站服务器日志来进一步挖掘数据 – 而且这一切都是在一个终端窗口实时输出的,个人感觉挺好用的,在此为大家推荐一下。
一,安装GoAccess
安装goaccess前需要安装其依赖包,可以在goaccess的官网上找到依赖包 http://goaccess.io/ ,以下是各系统所需的依赖包。
GoAccess Dependencies
Distro NCurses GLib >= 2.0.0 GeoIP (optional) Tokyo Cabinet (optional)
Ubuntu/Debian libncursesw5-dev libglib2.0-dev libgeoip-dev libtokyocabinet-dev
Fedora/RHEL/CentOS ncurses-devel glib2-devel geoip-devel tokyocabinet-devel
Arch Linux ncurses glib2 geoip compile from source
Gentoo sys-libs/ncurses dev-libs/glib:2 dev-libs/geoip dev-db/tokyocabinet

根据自己的系统先安装好依赖包,这些包都是系统有的只需手动安装。
最后使用:

[root@www ~]# yum install -y goaccess

或者

[root@www ~]# apt-get install -y goaccess

也可以自己源码进行安装,可以在以上网站中下载源码。
二,运行 GoAccess
使用GoAccess时,需要对它指定你的Apache访问日志,我是在CentOS6.x上面安装的,以下只说明此版本的用法,其他类似。

[root@www ~]# goaccess -f /var/log/httpd/access_log

当你第一次启动GoAccess,你将会看到如下的屏幕中选择日期和日志格式。你可以按空格键进行选择,并按F10确认。至于日期和日志格式,你可能需要参考Apache 文档来刷新你的记忆。请输入图片描述
使用GoAccess 分析Web日志

可以依据自己爱好来选择,我选择常用的格式。
然后会看到以下画面,请输入图片描述
使用GoAccess 分析Web日志

下面解释各项的意义。
三,详解日志文件
你可以按向下的箭头滚动页面,你会发现以下区域,它们是按请求排序的。这里提及的目录顺序可能会根据你的发行版或者你所选的安装方式(从源和库)不同而不同:
1,每天唯一访客(来自同样IP、同一日期和同一浏览器的请求被认为是是唯一访问)

1 - Unique visitors per day - Including spiders Total: 5/5
Hits having the same IP, date and agent are a unique visit.

1 12.50% 0.0 B 14/May/2015 |||||||||||||||||||||||||||||||||||||||||||||||||
1 12.50% 0.0 B 13/May/2015 |||||||||||||||||||||||||||||||||||||||||||||||||
2 25.00% 0.0 B 12/May/2015 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2 25.00% 0.0 B 11/May/2015 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2 25.00% 0.0 B 10/May/2015 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

2,请求的文件(网页URL)

2 - Requested files (Pages-URL) Total: 46/46
Top Requested Files sorted by hits - [time served] [protocol] [method]

70 13.18% 0.0 B HTTP/1.1 GET /
41 7.72% 0.0 B HTTP/1.1 GET /wp-content/themes/yusi1.0/style.css?ver=1.0
29 5.46% 0.0 B HTTP/1.1 GET /wp-content/themes/yusi1.0/timthumb.php?src=http://vbird.dic.ksu.edu.tw/linux_server/0110network_ 27 5.08% 0.0 B HTTP/1.1 GET /wp-content/themes/yusi1.0/js/jquery.js?ver=1.0
25 4.71% 0.0 B HTTP/1.1 GET /wp-content/themes/yusi1.0/timthumb.php?src=http://192.168.2.101/wp-content/uploads/2015/04/dis
23 4.33% 0.0 B HTTP/1.1 GET /wp-content/themes/yusi1.0/timthumb.php?src=http://192.168.2.101/wp-content/themes/yusi1.0/img/pi
22 4.14% 0.0 B HTTP/1.1 GET /wp-content/themes/yusi1.0/timthumb.php?src=http://192.168.2.101/wp-content/themes/yusi1.0/img/pi

3,请求的静态文件(例如,.png文件,.js文件等等)

3 - Requested static files (e.g., png, js, css, etc.) Total: 7/7
Top Static Files sorted by hits - [time served] [protocol] [method]

4 0.75% 0.0 B HTTP/1.1 GET /wp-content/uploads/2015/04/dis﻾H4﻾I-300x162.jpg
4 0.75% 0.0 B HTTP/1.1 GET /wp-content/themes/yusi1.0/js/html5.js
4 0.75% 0.0 B HTTP/1.1 GET /wp-content/uploads/2015/04/dis﻾H1﻾I-300x162.jpg
4 0.75% 0.0 B HTTP/1.1 GET /wp-content/uploads/2015/04/dis﻾H2﻾I-300x162.jpg
4 0.75% 0.0 B HTTP/1.1 GET /wp-content/themes/yusi1.0/share.css
3 0.56% 0.0 B HTTP/1.1 GET /wp-content/themes/yusi1.0/img/default.png
3 0.56% 0.0 B HTTP/1.1 GET /wp-content/uploads/2015/04/dis﻾H5﻾I-300x162.jpg

4,HTTP 404 未找到的响应代码

4 - HTTP 404 Not Found URLs Total: 5/5
Top 404 Not Found URLs sorted by hits - [time served] [protocol] [method]

14 2.64% 0.0 B HTTP/1.1 GET /
8 1.51% 0.0 B HTTP/1.1 GET /favicon.ico
6 1.13% 0.0 B HTTP/1.1 GET /forum.php
1 0.19% 0.0 B HTTP/1.1 GET /awstates/
1 0.19% 0.0 B HTTP/1.1 GET /awstates

5,主机地址(客户端ip地址)

5 - Hosts Total: 8/8
Top Hosts sorted by hits - [bandwidth] [time served]

418 78.72% 0.0 B 192.168.2.168 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
64 12.05% 0.0 B 192.168.2.119 ||||||||||||||
34 6.40% 0.0 B 192.168.2.101 |||||||
6 1.13% 0.0 B 192.168.0.210 |
5 0.94% 0.0 B 192.168.0.70 |
2 0.38% 0.0 B 192.168.0.71 |
1 0.19% 0.0 B 192.168.0.211 |

6,操作系统

6 - Operating Systems Total: 1/1
Top Operating Systems sorted by unique visitors

8 100.00% Unknown ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

7,浏览器

7 - Browsers Total: 1/1
Top Browsers sorted by unique visitors

8 100.00% Unknown ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

8,引荐网址

8 - Referrers URLs Total: 0/0
Top Requested Referrers sorted by hits

9,参考网站

9 - Referring Sites Total: 0/0
Top Referring Sites sorted by hits

,10,来自谷歌搜索引擎的前几位的关键字

10 - Keyphrases from Google's search engine Total: 0/0
Top Keyphrases sorted by hits

11,HTTP 状态代码

11 - HTTP Status Codes Total: 7/7
Top HTTP Status Codes sorted by hits

294 55.37% 4xx Client Error
123 23.16% 2xx Success
91 17.14% 3xx Redirection
23 4.33% 5xx Server Error

以上为文件的全部信息。
如果想要在每天的凌晨分析下日志文件,不用手动去选择时间格式,可以保存一份在线的分析文件或打印出来,生成一个HTML报告,只需将其添加到定时任务中,第二天再做分析,然后,用web浏览器来将这份报告打开即可,很方便的。

[root@www ~]# goaccess --date-format="%d/%b/%Y" --log-format="%h %^[%d:%^] "%r" %s %b" -f /var/log/httpd/access_log-20150517 > /var/www/date +%F.html

然后,用web浏览器来将这份报告打开即可。
GoAccess是一个非常有价值的工具,它能给系统管理员实时提供可视的HTTP 统计分析。虽然GoAccess的默认输出是标准输出,但是你也可以将他们保存到JSON,HTML或者CSV文件。这种转换可以让 GoAccess在监控和显示网站服务器的统计数据时更有用。

请输入图片描述


SSL For Free 免费 SSL 凭证申请 Let’s Encrypt简单教学
如果你有留意互联网趋势变化,2015年有个名为 Let’s Encrypt 的数位凭证认证机构(CA)推出免费 SSL/TLS 凭证服务,也在年底正式对外开放。这是什么呢?简单来说,以往想为你的网站加入 SSL 加密协议(HTTPS,也就是网址列上的绿色锁头图示),必须支付一笔费用来申请凭证,但有了 Let’s Encrypt 后将能免费申请凭证,且这一过程非常简单、自动化。
1200){google_ad_width=1200;}else if(google_ad_width1200){google_ad_height=1200;}else if(google_ad_height300)&&(google_ad_height>300)){google_ad_height=300;}document.write('');(adsbygoogle=window.adsbygoogle||[]).push({});// ]]>不过 Let’s Encrypt 的运作方式跟一般我们熟悉的 SSL 凭证取得方式有些不同,根据我的实际测试,它没有开放直接从网站输入私密金钥、CSR 档案来取得凭证的介面,如果要安装 Let’s Encrypt 凭证,必须要熟悉 Unix 指令,才能够在远端主机下指令来取得凭证(虽然整个操作步骤不难,但若你从未操作过,可能会需要一些时间)。
如果使用 cPanel、Plesk 等虚拟主机控制台的话,除非主机导入 Let’s Encrypt 功能,否则使用者权限无法享受到 Let’s Encrypt 的 SSL 免费凭证所带来的安全性及好处。真的是这样吗?
最近有开发者推出一款名为 SSL For Free 线上工具,让你从网站上取得免费 SSL 凭证,当然这是连接 Let’s Encrypt 的凭证签发功能,不过无须自己到主机输入安装指令,即可透过网页介面来取得凭证的相关档案(包括私密金钥、CA bundle 和凭证 crt 档),再从控制台 SSL 功能将凭证安装进去就能使用。
但是 Let’s Encrypt 凭证签发为每三个月一次,也就是每 90 天必须更新(renew)一次,不过不用担心,SSL For Free 也已提供订阅通知的机制,你可在稍后填入自己的 Email,在凭证过期前就会收到电子邮件通知。
网站名称:SSL For Free
网站链接:https://www.sslforfree.com/
使用教学
STEP 1
开启 SSL For Free 网站后,直接在上方填入你要申请 Let’s Encrypt 凭证的网域名称,可以用空白来分隔不同的网址,例如「subdomain.domain.com domain.com other.com」,填入后点选右边的「Create Free SSL Certificate」继续。请输入图片描述
SSL For Free 免费 SSL 凭证申请 Let’s Encrypt简单教学
STEP 2
为了确定这个网域名称使你所有,会有两种验证方式,如果你的网站本身开启 FTP 功能的话,可使用「Automatic FTP Verification」来输入相关资讯完成验证;因为要将验证分段操作给读者看,所以我选择使用手动的验证方式,必须自己下载档案,依照说明上传到主机。
点选后,点选下方的「Manually Verify Domain」继续。请输入图片描述
SSL For Free 免费 SSL 凭证申请 Let’s Encrypt简单教学
STEP 3
点选网站上提供的档案下载链接,依照说明建立两层资料夹,将档案放进去即可。记得结束前先通过以下两个链接来看看能否正常读取档案,如果不行,代表你的路径可能错误,重新检查一次吧!总之要让两个链接都能正常开启,再点选最下方的「Download SSL Certificate」。
SSL For Free 免费 SSL 凭证申请 Let’s Encrypt简单教学请输入图片描述
STEP 4
通过验证后,SSL For Free 就会开始为你产生 SSL 凭证。请输入图片描述
SSL For Free 免费 SSL 凭证申请 Let’s Encrypt简单教学
STEP 5
当凭证产生后,你就能在最终的结果页面看到这些资讯。不过在此之前,我会建议你先找到如下面截图标示出来的「Get Notified of Expiration」栏位,设定一组 Email 和密码,即可在凭证过期前取得通知,以免错过延长(renew)时间。请输入图片描述
SSL For Free 免费 SSL 凭证申请 Let’s Encrypt简单教学
从网页最下方点选「Download All SSL Certificate Files」就能打包这些档案,解压缩后可以取得一个私密金钥(Privacy Key)、CA_bundle.crt 和 certificate.crt 三个档案,返回你的主机控制台,即可将凭证安装进去囉!请输入图片描述
SSL For Free 免费 SSL 凭证申请 Let’s Encrypt简单教学
如果对于安装 SSL 凭证不是那么熟悉,或许可以请你的主机商协助处理,或者自己上网搜寻相关教学。
值得一试的三个理由:
使用 Let’s Encrypt 来产生网站的免费 SSL 凭证
无须透过 Unix 指令,网页端也能签发凭证档案
每三个月自动通知使用者重新延长时间

关于收集日志的方式,最简单性能最好的应该是修改nginx的日志存储格式为json,然后直接采集就可以了。
但是实际上会有一个问题,就是如果你之前有很多旧的日志需要全部导入elk上查看,这时就有两个问题,一是原始日志不是json格式,二是原始日志的时间戳不能识别,如果时间不处理,导入之后所有日志的时间戳将全部是导入时间。


下面说一下用grok的方式导入原始日志,当然你也可以直接使用这种方式收集nginx日志,这种方式可以保留nginx的原始日志格式。
1、在官网下载rpm包或者按照guide设置官方repo,安装logstash

yum install -y logstash-5.4.1.rpm

2、导出环境变量

vim /etc/bashrc

export PATH=$PATH:/usr/share/logstash/bin
3、安装 logstash-filter-date 插件,这个date插件用来读取原始日志的时间,并存到ES的@timestamp字段

logstash-plugin install logstash-filter-date

4、添加一个nginx的pattern

rpm -ql logstash | grep patterns

cd /usr/share/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-4.1.0/patterns/

ll

-rw-rw-r-- 1 logstash logstash 1831 May 30 00:41 aws
-rw-rw-r-- 1 logstash logstash 4831 May 30 00:41 bacula
-rw-rw-r-- 1 logstash logstash 260 May 30 00:41 bind
-rw-rw-r-- 1 logstash logstash 2154 May 30 00:41 bro
-rw-rw-r-- 1 logstash logstash 879 May 30 00:41 exim
-rw-rw-r-- 1 logstash logstash 10095 May 30 00:41 firewalls
-rw-rw-r-- 1 logstash logstash 5335 May 30 00:41 grok-patterns
-rw-rw-r-- 1 logstash logstash 3251 May 30 00:41 haproxy
-rw-rw-r-- 1 logstash logstash 980 May 30 00:41 httpd
-rw-rw-r-- 1 logstash logstash 1265 May 30 00:41 java
-rw-rw-r-- 1 logstash logstash 1087 May 30 00:41 junos
-rw-rw-r-- 1 logstash logstash 1037 May 30 00:41 linux-syslog
-rw-rw-r-- 1 logstash logstash 74 May 30 00:41 maven
-rw-rw-r-- 1 logstash logstash 49 May 30 00:41 mcollective
-rw-rw-r-- 1 logstash logstash 190 May 30 00:41 mcollective-patterns
-rw-rw-r-- 1 logstash logstash 614 May 30 00:41 mongodb
-rw-rw-r-- 1 logstash logstash 9597 May 30 00:41 nagios
-rw-r--r-- 1 logstash logstash 312 Jun 23 17:47 nginx
-rw-rw-r-- 1 logstash logstash 142 May 30 00:41 postgresql
-rw-rw-r-- 1 logstash logstash 845 May 30 00:41 rails
-rw-rw-r-- 1 logstash logstash 224 May 30 00:41 redis
-rw-rw-r-- 1 logstash logstash 188 May 30 00:41 ruby
-rw-rw-r-- 1 logstash logstash 404 May 30 00:41 squid
logstash安装包自带了一些应用的pattern示例,但是没有nginx的,上面那个是我加上去的。
这是我针对我自己的线上日志格式调试好的grok表达式:
NGINXACCESS %{IPORHOST:clientip} - %{NOTSPACE:remote_user} [%{HTTPDATE:timestamp}] "%{WORD:verb} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion}" %{QS:request_body} %{INT:status} %{INT:body_bytes_sent} %{QS:referer} %{QS:agent} %{DATA:xforwardedfor} %{NUMBER:request_time} %{NUMBER:upstream_response_time}
这里有一个调试网站:https://grokdebug.herokuapp.com/
安装logstash5.4.1,并使用grok表达式收集nginx日志
5、添加一个logstash配置

vim /etc/logstash/conf.d/nginx_access.conf

input {
file {
path => ["/var/log/nginx/www.opgirl.cn.access.log"]
start_position => "beginning"
ignore_older => 0
}
}

filter {
grok {
match => { "message" => "%{NGINXACCESS}" }
}
date {
match => [ "timestamp","dd/MMM/yyyy:HH:mm:ss Z"]
target => "@timestamp"
}
mutate {
remove_field => "timestamp"
}
}

output {
elasticsearch {
hosts => ["192.168.3.56:9200","192.168.3.49:9200","192.168.3.57:9200"]
index => "logstash-nginx-access-%{+YYYY.MM.dd}"
}
#stdout {codec => rubydebug}
}
6、启动logstash

nohup logstash -f /etc/logstash/conf.d/nginx_acces.conf &

7、添加到kibana查看,这时看到的就是日志本身的生成时间,而不是导入ES的时间