时间:2023-03-14 06:40:01 | 来源:电子商务
时间:2023-03-14 06:40:01 来源:电子商务
分析网站日志可以帮助我们了解用户地域信息,统计用户行为,发现网站缺陷。操作会面临几个问题[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
用户名输入 adminThe Splunk web interface is at http://192.168.56.106:8000
表示启动成功。相比于开源工具(ELK,graylog)确实省心太多了。确保Linux防火墙是关闭状态,然后浏览器输入前面8000地址打开登录。首次会有引导教程指导如何上传文件。日常如果想上传文件,直接点击左上角splunk->enterprise进入主界面,然后选择添加数据,source="access2020-09-11.log" host="basicserver" sourcetype="access_combined"
source表示数据来源文件名,host是splunk所在的主机名称,sourcetype是导入时配置的。这些都可以变换,我想统计10号的数据,将access2020-09-10.log作为source就达到了效果。如果想查看basicserver里的所有数据不分日期,把source条件去掉,只保留host和sourcetype两个条件。搜索框最少要有一个条件。host="basicserver" | top clientip limit=200
host="basicserver" | iplocation clientip
执行后左侧下方“感兴趣的字段”会比刚才多出City Country Region字段,这些和客户端ip的地理位置是对应的。 - 访问频率最高的十个城市host="basicserver" | iplocation clientip | top City limit=10
host="basicserver" | iplocation clientip | geostats count
host="basicserver" | stats dc(clientip)
host="basicserver" | sort _time
默认按照倒序,最新的日志排在最前面 - 访问次数最少的ip host="basicserver" | rare clientip
host="basicserver" | top uri limit=20
host=basicserver clientip!="158.111.2.*" clientip!="192.190.2.*"
补充一句,搜索框可以输入很多条件,条件增多搜索框会随着变大,不要担心条件多装不下。source="access2020-09-11.log" | top clientip limit=20
执行完会在统计信息下方列出前20个ip,点击可视化,选择柱状图。 LogFormat "%h %l %u %t /"%r/" %>s %b /"%{Referer}i/" /"%{User-Agent}i/"" combinedLogFormat "%h %l %u %t /"%r/" %>s %b" common
如果common日志满足不了分析要求,可以把格式改成common格式。方法是修改apache/conf下的httpd.conf文件,把里面CustomLog末尾配置为combinedCustomLog "|/opt/apache/bin/rotatelogs /opt/apache/logs/access%Y-%m-%d.log 86400" combined
LogFormat "%h %{X-FORWARDED-FOR}i %l %u %t /"%r/" %>s %b /"%{Referer}i/" /"%{User-Agent}i/"" combinedLogFormat "%h %{X-FORWARDED-FOR}i %l %u %t /"%r/" %>s %b" common
假设网站有CDN加速(其它情况同理分析),按上面格式,每条日志首先打印的是CDN加速服务器ip,然后是XFF的ip(也就是用户真实ip)。如果用户没有经过CDN直接访问,那么XFF就是一条横线"-"。 下图是用户直连网站的情况,clientip就是用户真是IP。[xff]REGEX = /d{1,3}(/./d{1,3}){2,3}
修改[access-extractions]段,在clientip后增加([[nspaces:xff]]/s++)?,用来匹配XFF[access-extractions]REGEX = ^[[nspaces:clientip]]/s++([[nspaces:xff]]/s++)?[[nspaces:ident]]/s++[[nspaces:user]]/s++[[sbstring:req_time]]/s++[[access-request]]/s++[[nspaces:status]]/s++[[nspaces:bytes]](?:/s++"(?<referer>[[bc_domain:referer_]]?+[^"]*+)"(?:/s++[[qstring:useragent]](?:/s++[[qstring:cookie]])?+)?+)?[[all:other]]
[xff]段的位置不重要,写在哪里都行。配置完成,重启splunk,上传带有XFF的日志,左侧会看见“感兴趣的字段”出现了xffUser-agent: BaiduspiderDisallow: /
如果要任何爬虫都不能爬任何数据,就写成 User-agent: *Disallow: /
复杂的规则如指定引擎可以爬取某些目录,某些目录不可以爬,robots协议也是支持的。 robots协议是“君子协定”,它并没有通过技术手段限制爬虫,要靠爬虫的自觉遵守。 按我经验,百度、谷歌、360、字节、都能遵守协议,搜狗很流氓,不遵守协议。# nslookup 49.7.21.76Server: 219.141.136.10Address: 219.141.136.10#53Non-authoritative answer:76.21.7.49.in-addr.arpa name = sogouspider-49-7-21-76.crawl.sogou.com.# host 111.206.198.6969.198.206.111.in-addr.arpa domain name pointer baiduspider-111-206-198-69.crawl.baidu.com.
另外,各大搜索引擎的站长平台会教如何判断ip是否是自己的爬虫,百度站长平台就有“轻松两步,教你快速识别百度蜘蛛”,介绍了百度蜘蛛useragent的格式和判断方法。关键词:完整,实践,分析,日志