记录访问服务器的远程主机IP地址,可以得知浏览者来自何处
记录浏览者访问web资源,可以了解网站哪些部分最受欢迎
记录浏览者使用浏览器,可以根据大多数浏览者使用浏览器对站点进行优化
记录浏览者访问时间
1.简介
Apache(音译为阿帕奇)是世界使用最多的Web服务器软件之一。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。Apache是用C语言开发的基于模块化设计的web应用,核心代码不多。多数功能分散在各个模块中
2.日志位置
Apache的配置文件(httpd.conf)中是存在着两个可调配的日志文件的,这两个日志文件分别是访问日志access_log(在Windows上是access.log)和错误日志error_log(在Windows上是error.log)。如果使用 SSL 服务的话,还可能存在 ssl_access_log和ssl_error_log 和 ssl_request_log 三种日志文件。日志文件的路径根据安装方式不同位置也是不一样的,一般都是在Apache安装目录的logs子目录中
默认安装的情况下,Apache的配置文件是在:
windows:
C:\Program Files\Apache Software Foundation\Apache2.4\conf\httpd.conf
linux:
etc/httpd/conf/httpd.conf
3.Apache访问日志格式详解
访问日志access_log记录了所有对Web服务器的访问活动,下面是访问日志access_log中的一个标准记录
192.168.115.5 - - [01/Apr/2018:10:37:19 +0800] “GET / HTTP/1.1” 200 45
日志字段所代表的内容如下:
1.远程主机IP:表明访问网站的是谁
2.空白(E-mail):为了避免用户的邮箱被垃圾邮件骚扰,第二项就用“-”取代了
3.空白(登录名):用于记录浏览者进行身份验证时提供的名字。
4.请求时间:用方括号包围,而且采用“公用日志格式”或者“标准英文格式”。 时间信息最后的“+0800”表示服务器所处时区位于UTC之后的8小时。
5.方法+资源+协议:服务器收到的是一个什么样的请求。该项信息的典型格式是“METHOD RESOURCE PROTOCOL”,即“方法 资源 协议”。
METHOD: GET、POST、HEAD、……
RESOURCE: /、index.html、/default/index.php、……(请求的文件)
PROTOCOL: HTTP+版本号
6.状态代码:请求是否成功,或者遇到了什么样的错误。大多数时候,这项值是200,它表示服务器已经成功地响应浏览器的请求,一切正常。
7.发送字节数:表示发送给客户端的总字节数。它告诉我们传输是否被打断(该数值是否和文件的大小相同)。把日志记录中的这些值加起来就可以得知服务器在一天、一周或者一月内发送了多少数据。
1.简介
Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以作为反向代理进行负载均衡的实现。
2.日志位置
Nginx日志对于统计、系统服务排错很有用。Nginx日志主要分为两种:access_log(访问日志)和error_log(错误日志)。通过访问日志我们可以得到用户的IP地址、浏览器的信息,请求的处理时间等信息。错误日志记录了访问出错的信息,可以帮助我们定位错误的原因。
nginx服务器日志相关指令主要有两条,一条是log_format,用来设置日志格式,另外一条是access_log,用来指定日志文件的存放路径、格式和缓存大小,一般在nginx的配置文件中日记配置(/usr/local/nginx/conf/nginx.conf)。
查找Nginx.conf的位置:
执行 sudo nginx -t 就可以获取配置文件的路径。同时如果你的配置文件nginx.conf修改后有错,该命令执行后也会有相应提示,例如“参数无效”
Nginx日志路径
/var/log/nginx
3.ngnix日志格式设置
nginx的log_format有很多可选的参数用于指示服务器的活动状态,默认的是:
log_format access '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
想要记录更详细的信息需要自己设置log_format,具体可设置的参数格式及说明如下:
Nginx日志格式设置,参考https://blog.51cto.com/shaoniana/2126541
本案例为基于python语言实现web访问日志的加载,打开jupyter,新建
日志生成.ipynb
进行代码编写。
import random
import time
import shutil
import os
os.chdir("./") #切换工作路径为当前目录
ip_slices = [132, 156, 124, 10, 29, 167, 143, 187, 30, 100]
def sample_ip():
slice = random.sample(ip_slices, 4)
return ".".join([str(item) for item in slice])
url_paths = [
"www/2",
"www/1",
"www/6",
"www/4",
"www/3",
"pianhua/130",
"toukouxu/821"
]
def sample_url():
return random.sample(url_paths, 1)[0]
status_code = [404, 302, 200]
def sample_status():
return random.sample(status_code, 1)[0]
http_referers = [
"https://www.baidu.com/s?wd={query}",
"https://www.sogou.com/web?qu={query}",
"http://cn.bing.com/search?q={query}",
"https://www.so.com/s?q={query}"
]
search_keyword = [
"我的祖国",
"西游降魔篇",
"阿甘正传",
"扬名立万",
"杨恩泽"
]
def sample_referer():
if random.uniform(0, 1) > 0.2:
return "-"
refer_str = random.sample(http_referers, 1)
# print refer_str[0]
query_str = random.sample(search_keyword, 1)
# print query_str[0]
return refer_str[0].format(query=query_str[0])
生成userAgent数据:
创建日志文件userAgentcopy文件,notepad++打开该文件,将以下useragent信息粘贴到userAgentcopy中
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"
"Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11"
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6"
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6"
"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1"
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5"
"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5"
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3"
"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3"
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3"
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3"
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3"
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3"
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3"
"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3"
"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3"
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"
"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"
"Mozilla/5.0 (Macintosh; U; Mac OS X Mach-O; en-US; rv:2.0a) Gecko/20040614 Firefox/3.0.0 "
"Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10.5; en-US; rv:1.9.0.3) Gecko/2008092414 Firefox/3.0.3"
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1) Gecko/20090624 Firefox/3.5"
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.14) Gecko/20110218 AlexaToolbar/alxf-2.0 Firefox/3.6.14"
"Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10.5; en-US; rv:1.9.2.15) Gecko/20110303 Firefox/3.6.15"
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101"
"Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11"
"Opera/9.80 (Android 2.3.4; Linux; Opera mobi/adr-1107051709; U; zh-cn) Presto/2.8.149 Version/11.10"
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/531.21.8 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10"
"Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/533.17.8 (KHTML, like Gecko) Version/5.0.1 Safari/533.17.8"
"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5"
"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0"
"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)"
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)"
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
将userAgentcopy上传到jupyter中日志生成文件所在的同级目录下。
读取userAgentcopy文件并加载到列表中,代码如下:
# 读取userAgentcopy文件中的内容,生成一个userAgentlist列表
userAgentlist = []
with open("userAgentcopy",'r',encoding="UTF-8") as f:
for line in f.readlines():
line = line.replace("\"","")
line = line.replace("\n","")
userAgentlist.append(line)
# 随机useragent
def useragent():
return random.sample(userAgentlist,1)
# 生成当前时间
def get_timestamp():
t = time.localtime()
return time.strftime('%Y-%m-%d %H:%M:%S', t)
# 产生log
def generate_log(count=100,filepath="log",filename="log.txt"):
# 日志目录
log_path = os.path.join(os.getcwd(),filepath)
# 日志文件路径
log_name = os.path.join(log_path,filename)
# 判断日志所在目录是否存在
if not os.path.exists(log_path):
os.mkdir(log_path)
print(log_path,"已创建")
elif os.path.exists(log_path) and os.path.exists(log_name):
# 如果日志存在,先删除
print(log_name,"已存在")
# os.remove(log_name)
# shutil.rmtree(log_name)
# 打开日志
with open(log_name,"a+") as f :
# 生成日志
while count >= 1:
# 获取当前时间
time_str = get_timestamp()
# 定义日志格式
log_format = "{ip}\t{localtime}\t\"GET {url} HTTP/1.0\"\t{referece}\t{status1}\t{useragent}"
# 生成日志信息
query_log = log_format.format(
ip=sample_ip(),
url=sample_url(),
status1=sample_status(),
referece=sample_referer(),
localtime=time_str,
useragent = useragent()
)
# 将日志写入文件
f.write(query_log + "\n")
count = count - 1;
# 随机休眠
time.sleep(random.uniform(0,2))
# time.sleep(0.5)
if __name__ == '__main__':
generate_log(count=50,filepath="log",filename="log1.txt")
本文主要介绍常见的web服务器与web日志的格式,并基于python实现了随机日志生成。在实现过程中,主要解决了userAgent的随机生成,本地时间的动态生成。
https://blog.51cto.com/shaoniana/2126541
https://blog.csdn.net/qq_41861558/article/details/105252105