分享好友 系统运维首页 频道列表

一个用 Python 分析 Apache 日志的故事

apache教程  2023-03-08 11:090

介绍

不久前,公司里有人告诉我“我想知道 Apache 的访问日志是否可以用来做一些事情”。

数据分析,Apache,发文章,我是初学者,写的不好请见谅。

访问日志分析

导入模块

我正在使用以下模块。

# データの処理
import pandas as pd
import numpy as np

# グラフ表示
import plotly.express as px
from plotly import tools
import seaborn as sns
import matplotlib.pyplot as plt

# その他
import datetime,time
import ipaddress

加载数据

我阅读了所有日志文件。

col_names = ['ip','c1','c2', 'datetime', 'timezone', 'request', 'status', 'size', 'referer', 'user_agent']
df = pd.read_csv("データのパス", sep=' ', dtype=str, names=col_names)
df[:1]

PythonでApacheログを分析してみた話

数据整形

IP版本

由于我们要分离 IPv4 和 IPv6,我们使用 ipaddress 模块将 IP 版本数据添加到新列。

def ipcheck(x):
    return ipaddress.ip_address(x.iloc[0]).version

df["ip_ver"] = np.nan
df["ip_ver"] = df.apply(ipcheck, axis=1)

设备信息

虽然是蛮力,但操作系统是由 UserAgent 确定并添加数据。

def device(x):
    ua = x.iloc[9]
    dev = "etc"
    if "iPhone" in ua:
        dev="iPhone"
    elif "Android" in ua:
        dev="Android"
    elif "Win" in ua:
        dev="Windows"
    elif "Mac" in ua:
        dev="Macintosh"
    elif "Linux" in ua:
        dev="Linux"
    return dev

df["device"] = np.nan
df["device"] = df.apply(device, axis=1)

日期和时间

由于读取时日期和时区是分开的,因此将其存储为 Python 日期时间类型。

#datetime,timezoneをpythonのdatetime型に変換して挿入
datetime_str = df.datetime + df.timezone
time_trimmed = datetime_str.map(lambda s: s.strip('[]').split('+')[0])
df['datetime'] = pd.to_datetime(time_trimmed, format='%d/%b/%Y:%H:%M:%S')

我们还为热图添加了仅限时间的数据。 (也许我不应该费心添加它......)

def hourcheck(x):
    dt = x.iloc[3]
    return dt.strftime('%H')

df["hour"] = np.nan
df["hour"] = df.apply(hourcheck, axis=1)

删除不必要的数据

列名 c1 和 c2 似乎是“客户端标识符”和“经过身份验证的用户名”,但由于此日志中没有特定信息,我将它们删除。我也删除了时区,因为我不再需要它了。

del df['c1']
del df['c2']
del df['timezone']

用饼图可视化

首先,让我们使用 plotly.express 进行可视化。

IPv4/IPv6 比率

让我们通过关注具有大量数字的 status:200 来可视化 IPv4/IPv6 比率。

df_ip = df.pivot_table(index="ip_ver",columns="status",aggfunc='size',fill_value=0)

ip_fig_title = 'IPv4/v6比率'
ip_fig = px.pie(data_frame=df_ip,
       values='200',
       names=df_ip.index,
       hover_name=df_ip.index,
       labels={'ip_ver':'IP version','200':'count'})
ip_fig.update_layout(xaxis={'categoryorder':'category ascending'},  title=ip_fig_title)
ip_fig.update_traces(textinfo='percent+label')
ip_fig.show()

PythonでApacheログを分析してみた話
虽然是一点点,但似乎v4有更多。

设备类型比例

同样,让我们​​关注 status: 200 并显示终端类型的百分比。

df_device = df.pivot_table(index="device",columns="status",aggfunc='size',fill_value=0)

ip_fig_title = 'IPv4/v6比率'
ip_fig = px.pie(data_frame=df_ip,
       values='200',
       names=df_ip.index,
       hover_name=df_ip.index,
       labels={'ip_ver':'IP version','200':'count'})
ip_fig.update_layout(xaxis={'categoryorder':'category ascending'},  title=ip_fig_title)
ip_fig.update_traces(textinfo='percent+label')
ip_fig.show()

PythonでApacheログを分析してみた話
Windows、iPhone 和 Android 上超过 90% 的结果。
毕竟,iPhone 用户比 Android 用户多。

IPv4/IPv6 每种终端类型的百分比

接下来我们分别看一下IPv4/IPv6的终端类型比例。

df_device_ip = df.pivot_table(index="device",columns="ip_ver",aggfunc='size',fill_value=0)

device_fig_ip_title = '端末種別比率(v4)'
device_fig_ip = px.pie(data_frame=df_device_ip,
       values=4,
       names=df_device_ip.index,
       hover_name=df_device_ip.index,
       labels={'device':'Device',4:'count'})
device_fig_ip.update_layout(xaxis={'categoryorder':'category ascending'},  title=device_fig_ip_title)
device_fig_ip.update_traces(textinfo='percent+label')
device_fig_ip.show()

device_fig_ip6_title = '端末種別比率(v6)'
device_fig_ip6 = px.pie(data_frame=df_device_ip,
       values=6,
       names=df_device_ip.index,
       hover_name=df_device_ip.index,
       labels={'device':'Device',6:'count'})
device_fig_ip6.update_layout(xaxis={'categoryorder':'category ascending'},  title=device_fig_ip6_title)
device_fig_ip6.update_traces(textinfo='percent+label')
device_fig_ip6.show()

PythonでApacheログを分析してみた話

虽然是一点点,但是我们可以看到,在 IPv4 中,PC 很多,而在 IPv6 中,移动终端却很多。
这次我没有研究有什么不同,但我有点好奇。

用热图可视化

接下来,让我们看一下使用 seaborn 的热图。

按时间段的访问次数

  • IPv4/IPV6
figure = sns.heatmap(pd.crosstab(df['ip_ver'], df['hour']), fmt="1.1f", lw=0.7, cmap='Blues')

PythonでApacheログを分析してみた話

  • 按设备类型
figure = sns.heatmap(pd.crosstab(df['device'], df['hour']), fmt="1.1f", lw=0.7, cmap='Blues')

PythonでApacheログを分析してみた話

热图也有一些特点。
・白天从PC(公司内部访问量大吗?)
・20:00~21:00,回家路上的电车上用智能手机看吗?
一边想着一边看着热图的时候,出奇地有趣。

参考页

题外话

当我在学习的同时尝试分析数据时,我能够看到一些特征,这很有趣,因为我的想象力扩大了。
作为在未来开发中利用访问日志的一种方式,我们提出了将访问日志分析到传递服务故障信息的页面的想法。 ``增加访问权限'' ⇒ ``无法使用服务的人数增加'' ⇒ ``服务失败的可能性'',我认为这会导致无法检测到警报的静默故障... !? 由于有更新,它不再是 Apache,我想单独工作。 . .


原创声明:本文系作者授权爱码网发表,未经许可,不得转载;

原文地址:https://www.likecs.com/show-308632748.html

查看更多关于【apache教程】的文章

展开全文
相关推荐
反对 0
举报 0
评论 0
图文资讯
热门推荐
优选好物
更多热点专题
更多推荐文章
Hadoop中mapreduce运行WordCount程序报错Error: java.io.IOException: Type mismatch in key from map: expected o
这个问题是因为map的方法参数与继承mapper定义的参数类型不一致导致的,应该将Mapper的key参数类型设置成Object,就可以解决这个问题 

0评论2023-03-08965

[转]用apache反向代理解决单外网ip对应内网多个web主机的问题
用apache反向代理解决单外网ip对应内网多个web主机的问题  转载一个有独立外网IP,需内网服务器对外发布的例子,是应用apache虚拟主机的。来源地址:http://www.itshantou.com/Servers/web/06/10/44219.html    几年前开始在学校的服务器上建网站,那时

0评论2023-02-10583

Apache service named reported the following error(OS 10055)由于系统缓冲区空间不足或队列已满解决办法?
apache启动失败报错:The Apache service named reported the following error: AH00451: no listening sockets available, shutting down . The Apache service named reported the following error: (OS 10055)由于系统缓冲区空间不足或队列已满,不能执行

0评论2023-02-10403

struts布局管理---SiteMesh一个优于Apache Tiles的Web页面布局、装饰框架
1. SiteMesh的基本原理       一个请求到服务器后,如果该请求需要sitemesh装饰,服务器先解释被请求的资源,然后根据配置文件 获得用于该请求的装饰器,最后用装饰器装饰被请求资源,将结果一同返回给客户端浏览器。 2. 如何使用SiteMesh    这里以st

0评论2023-02-10726

linux 安装 apache2.2.31
 Linux下安装和配置Apache 概要:本文介绍在CentOS5.4 Linux中安装和配置Apache2.2.14,并且实现Apache和Tomcat6的整合。文章分为三部分,分别是删除系统自带的Apache、安装Apache2.2.14和配置Apache2.2.14。 文章中介绍的知识也可以在其它版本的Linux中

0评论2023-02-10408

apache下ab.exe使用方法。。 apache ab工具
自己在cmd中写了半天的路径也没有写对。。最后网上的一个哥们告诉我说没有共同语言了。。。毛线啊 差距确实很大!大能猫死panda早晚干掉你,叫你丫整天嘲讽我!比如我的ab.exe在D盘的wamp文件夹下apache文件夹下bin文件夹下。那么在cmd中可以这么写:"D:\wamp

0评论2023-02-10478

CentOS 下的apache服务器配置与管理
一、WEB服务器与Apache1、web服务器与网址2、Apache的历史3、补充http://www.netcraft.com/可以查看apache服务器的市场占有率同时必须注意的是ngnix,正处于强势增长的上升时期,大有和apache一争天下的感觉,真是后生可畏~~~二、Apache服务器的管理命令1、命

0评论2023-02-10950

apache 的FTPClient使用以及注意事项
      tomcat+apache+jk进行集群后,图片要进行共享,经过网上的搜索可以有多种方式实现。        一种是使用jcifs。jcifs可以实现网络***享文件的读写,但是前提是,文件必须共享,还要在同一个局域网内。所以如果电脑上禁止了文件共享的话,就

0评论2023-02-10427

apache错误02:安装完后,系统找不到指定的文件 No installed service named "Apache2"的解决办法
解决办法:在“开始 -〉运行”处输入 cmd 回车,转到apache的安装目录,然后进入bin 目录,即cd bin ,在这里敲入 apache.exe -k install 后回车,然后重启Apache 就OK了。

0评论2023-02-10851

Apache提示You don't have permission to access / on this server 解决
 ;建议针对/private/var/log/apache2/中error来看[Sun Jun 02 18:00:37.760853 2019] [core:error] [pid 1677] (13)Permission denied: [client 127.0.0.1:53454] AH00035: access to / denied (filesystem path ‘/Users/sf/Documents/phpstorm’) because

0评论2023-02-10912

windows Apache 配置支持HTTPS的SSL证书
在设置Apache + SSL之前, 需要做:安装Apache, 下载安装Apache时请下载带有ssl版本的Apache安装程序.并且ssl需要的文件在如下的位置:     [Apache安装目录]/modules/ mod_ssl.so    [Apache安装目录]/bin/ openssl.exe, libeay32.dll, ssleay32.dll, ope

0评论2023-02-10924

mysql_pconnect的水挺深,apache下的数据库长连接
  php的mysql持久化连接,美好的目标,却拥有糟糕的口碑,往往令人敬而远之。这到底是为啥么。近距离观察后发现,这家伙也不容易啊,要看apache的脸色,还得听mysql指挥。  对于做为apache模块运行的php来说,要实现mysql持久化连接,首先得取决于apache这个

0评论2023-02-10314

网页504超时 apache php
1. 修改apache 配置apache-default.conf  timeout设置成12002. 修改php.ini 配置php.inimax_execution_time = 1200max_input_time = 1200max_execution_time = 1200 后来发现还没有解决问题,到60s就超时了排查到合作的一个代理https的服务器,他们默认60s

0评论2023-02-10635

更多推荐