网站日志分析最完整实践

  分析网站日志能够帮助咱们了解用户地域信息,统计用户行为,发现网站缺陷。操做会面临几个问题linux

  日志分析工具splunk如何使用?web

  日志格式信息不全,如何配置日志打印出全面信息?shell

  有大量爬虫访问,并不是真实流量,如何去掉这些流量?数据库

  若是网站用了CDN加速,反向代理,网关等,日志打印的是这些设备的ip,那么用户的真实ip如何得到呢?apache

  阅读本文能帮您有效解决上述问题浏览器

  splunk服务器

  splunk安装使用工具

  日志分析工具splunk是一款商业软件,但有免费版,免费版天天处理日志限制500M之内。对于简单分析,500M也能够挖掘出不少信息了。本文使用免费版splunk分析Apache离线日志。网站

  先要到splunk官网注册用户,注册用户填写的信息除邮箱外不须要真实,公司瞎填便可。注册完成到下载页面选择Linux 64位版本,this

  

网站日志分析最完整实践

 

  选择命令行下载,会给出一个wget的指令,

  

网站日志分析最完整实践

 

  复制wgt指令,到Linux上执行,获得压缩包。 (wget指令splunk-8.0.5-xxx的xxx每一个人都不一样)

  [root@localhost splunk]# wget -O splunk-8.0.5-xxx-Linux-x86_64.tgz 'https://www.splunk.com/bin/splunk/DownloadActivityServlet?architecture=x86_64&platform=linux&version=8.0.5&product=splunk&filename=splunk-8.0.5-xxx-Linux-x86_64.tgz&wget=true'

  解压压缩包,到bin目录下执行

  ./splunk start

  看见协议条款按q,是否赞成协议位置输入y

  Do you agree with this license? [y/n]: y

  用户名输入 admin

  密码输入 adminroot

  出现

  The Splunk web interface is at http://192.168.56.106:8000

  表示启动成功。相比于开源工具(ELK,graylog)确实省心太多了。确保Linux防火墙是关闭状态,而后浏览器输入前面8000地址打开登陆。首次会有引导教程指导如何上传文件。平常若是想上传文件,直接点击左上角splunk->enterprise进入主界面,而后选择添加数据,

  

网站日志分析最完整实践

 

  有多种添加数据的方式,这里选择上载,就是日志文件已经在我电脑里了,像上传附件同样传给splunk。过程所有默认,上载文件须要等一段时间。Apache日志设置“来源类型”时选择web里的access_combined。

  

网站日志分析最完整实践

 

  下一步,“检查”,“提交”都是默认。显示文件上载成功,点击“开始搜索”按钮,搜索刚才上传的日志数据。

  

网站日志分析最完整实践

 

  搜索框是放搜索限制条件的,右下方是原始日志,左侧是各个字段的名称,这些字段是工具内置的,知足格式的日志会自动被解析出这些字段,好比每条日志开头都有个客户端的ip,就是左侧的clientip,鼠标点击clientip会看见统计结果,默认是出现频率最高的前10个ip。若是要统计更多,须要在搜索框用对应语法查询。

  

网站日志分析最完整实践

 

  splunk搜索语言介绍(SPL语法)

  语法用于在搜索框中使用,达到限制范围,统计所须要指标的目的。语法像“搜索引擎 + SQL + shell”的混合体。若是能熟练运用功能很是强大。

  基本语法,

  source="access2020-09-11.log" host="basicserver" sourcetype="access_combined"

  source表示数据来源文件名,host是splunk所在的主机名称,sourcetype是导入时配置的。这些均可以变换,我想统计10号的数据,将access2020-09-10.log做为source就达到了效果。若是想查看basicserver里的全部数据不分日期,把source条件去掉,只保留host和sourcetype两个条件。搜索框最少要有一个条件。

  访问频率最高的200个ip

  host="basicserver" | top clientip limit=200

  客户端ip的地理信息

  host="basicserver" | iplocation clientip

  执行后左侧下方“感兴趣的字段”会比刚才多出City Country Region字段,这些和客户端ip的地理位置是对应的。

  访问频率最高的十个城市

  host="basicserver" | iplocation clientip | top City limit=10

  地图查看ip分布

  host="basicserver" | iplocation clientip | geostats count

  

网站日志分析最完整实践

 

  有多少不一样的ip访问网站

  host="basicserver" | stats dc(clientip)

  全部日志记录按时间正序排列

  host="basicserver" | sort _time

  默认按照倒序,最新的日志排在最前面

  访问次数最少的ip

  host="basicserver" | rare clientip

  被访问最多的uri

  host="basicserver" | top uri limit=20

  clientip不等于某两个网段的记录

  host=basicserver clientip!="158.111.2.*" clientip!="192.190.2.*"

  补充一句,搜索框能够输入不少条件,条件增多搜索框会随着变大,不要担忧条件多装不下。

  数据可视化

  搜索栏下方依次有 事件、模式、统计信息、可视化 选项,最后的可视化选项能生成图表,最好是在搜索命令计算了某个统计指标,而后点击可视化。若是没计算指标直接点击可视化,配置会比较繁琐才能生成图表。

  假设搜索栏统计某天访问次数最高的20个clientip,命令为

  source="access2020-09-11.log" | top clientip limit=20

  执行完会在统计信息下方列出前20个ip,点击可视化,选择柱状图。

  

网站日志分析最完整实践

 

  柱状图出来后,点击格式能够配置让坐标ip竖着显示,看着更舒服。

  

网站日志分析最完整实践

 

  ip地址的地理信息数据库如何更新

  统计ip的地理位置依赖于地理信息库,安装时有个内置的库,不是最新的。若是要更新到最新的须要到https://dev.maxmind.com/zh-hans/geoip/geoip2/geolite2/下载最新的GeoLite2-City.mmdb(要先注册),把这个文件复制到splunk/share目录下覆盖原来的同名文件便可。

  删除数据

  删除全部数据./splunk clean eventdata -f

  删除属于索引indexname的数据 ./splunk clean eventdata -index indexname -f

  Apache日志须要注意的

  common和combined两种格式

  日志格式有common和combined两种格式,combined格式信息更全面,比common格式多了refer和useragent信息。下面是apache/conf下的httpd.conf文件里对两种格式的定义

  LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

  LogFormat "%h %l %u %t \"%r\" %>s %b" common

  若是common日志知足不了分析要求,能够把格式改为common格式。方法是修改apache/conf下的httpd.conf文件,把里面CustomLog末尾配置为combined

  CustomLog "|/opt/apache/bin/rotatelogs /opt/apache/logs/access%Y-%m-%d.log 86400" combined

  没法直接看到用户真实ip怎么办

  若是网站前方有反向代理或者网关,或者网站作了CDN加速,那么日志的clientip是代理服务器、网关或者CDN加速服务器的ip,没什么分析价值。

  

网站日志分析最完整实践

 

  要获取用户真实ip能够修改httpd.conf的LogFormat,加上%{X-FORWARDED-FOR}i (简称XFF),我直接将XFF加到了%h的后面,

  LogFormat "%h %{X-FORWARDED-FOR}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined  郑州看男科医院哪家好http://www.120zzxbyy.com/

  LogFormat "%h %{X-FORWARDED-FOR}i %l %u %t \"%r\" %>s %b" common

  假设网站有CDN加速(其它状况同理分析),按上面格式,每条日志首先打印的是CDN加速服务器ip,而后是XFF的ip(也就是用户真实ip)。若是用户没有通过CDN直接访问,那么XFF就是一条横线"-"。  郑州割包皮哪一个医院好http://www.zztongji120.com/

  

网站日志分析最完整实践

 

  Apache动态载入配置文件

  修改完配置文件,不须要重启Apache,到Apache/bin下执行./apachectl graceful能够动态载入配置文件,不中止服务,新的配置马上生效。

  splunk如何解析XFF字段

  splunk内置的access_combined和access_common格式都没法解析XFF,若是要正确解析须要修改splunk/etc/system/default/transforms.conf

  新增[xff]段配置XFF的正则

相关文章
相关标签/搜索