创建(非常好的)假ncsa组合日志格式access.log文件,用于测试日志使用系统,如splunk、activemq、amazon mq、rabbitmq、kafka、fluentd、flume、pulsar、nifi……
flan的Python项目详细描述
flan:apache或nginx的假(访问)日志
flan是一个python 3.x实用程序,它创建一个或多个伪apache或nginx access.log文件,其中的伪条目基于您提供的真实access.log文件中的条目。名称本身实际上是伪造的:它可以为任何消耗NCSA组合日志格式的日志生成日志,但是FLNCSACLF看起来像是旺卡品牌鼻腔喷雾剂的名称,而不是适当的苦行僧GITHUB项目缩写,所以
功能亮点
- 它速度快,速度增强,如回放能力;
- 它是真实的,部分地从您提供的一个或多个示例"模板"日志文件生成数据,并使用有效的IP和用户-代理组合,这是有意义的;
- 您可以选择保留会话和会话语义,同时混淆它们的原始源;
- 在生成的文件中使用不同的流量分布:在指定的开始日期和结束日期之间使用normal(bell curve)、even(random)等;
- 您可以包括或不包括bot流量;
- 您只能包含实际出现在您提供的模板日志文件中的bot、在野外出现的bot(按实际出现的比例)、两者,或者根本不包含bot;
- 您可以只包括模板文件中的用户代理、通用的用户代理(按它们实际出现的比例),或者两者都包括;
- 支持并混淆IPv4和IPv6,使用智能规则保证有效的全局IP,同时维护非全局IP,如环回和专用网络,无需混淆;
- 写入文件,或将结果流式传输到stdout;
- 可选地gzip任何或所有生成的日志文件。
- 以交互方式运行,或作为服务/守护程序运行。
支持的模板日志输入源
- 标准access.log[.n]格式的未压缩文件
- 标准access.log[.n][.gz]格式的压缩文件
- 通过企业api进行splunk(来自可自定义splunk查询的日志格式结果)
支持的输出目标
- 写入/流到stdout
- 以标准access.log.n格式写入未压缩文件
- 以标准access.log.n.gz格式写入gzip文件
- 通过企业api或通用转发器(文本或json)splunk
- 卡夫卡(文本、json或avro)
- activemq artemis、amazon mq、rabbitmq、apollo或任何其他stomp 1.x兼容的排队系统(文本或json)
- fluentd(json)
- aws sqs(简单队列服务)
真实世界用例
在真实数据上使用Splunk的ML功能进行测试,以查看找到的真实模式,但在受限制的POC实验室环境中进行测试…
正在将访问日志数据从生产splunk索引复制到非生产安全团队限制索引…
同时确保用户、IP和位置匿名性和会话语义!< /P> 我需要一种方法来测试在以下环境中使用access.log条目的某些系统: 以及其他一些注意事项。 我在寻找解决办法,但他们缺乏。90%的人生成随机数据,包括无效的IP地址,或者用户代理与真实的用户代理分布不匹配,这对我的即时需求(欺诈研究)很重要。另外10%的人不能处理我的特殊用例,比如保护合作伙伴/搜索引擎优化机器人和私有网络IP。所以,我创造了法兰。 flan每次运行最多生成1 k个test access.log文件,每个文件最多包含1百万条记录。在我的Mac电脑上,它可以在30秒内通过基本设置在详细模式下生成20万条记录,因此在任何OLEC2或GCE服务器上都非常快,包括免费的层内容。 为了确保假日志在语义上与生产日志一样真实,它从您提供的实际生产系统(以下称为"模板日志")中读取一个或多个"template"access.logs。模板日志包含多少记录并不重要,但是模板日志越长,生成的假日志就越真实。如果未使用-p标志(如下所述)指定会话保留,则可以指定要生成的文件和记录数,并且模板日志可以大于或小于生成的日志文件。如果指定会话保留,则生成的日志文件将包含与模板日志文件中包含的记录总数相同的记录数。 要提供多个模板日志文件,请使用通配符;例如,"/var/logs/access.log*"。您的模板日志可能被gzip压缩;如果它们有一个".gz"扩展名,flan将在读取它们时解压缩它们。您可以在通配符规范中混合使用非压缩文件和gzip文件。 您可以指定要生成的access.log文件的数量,以及每个文件的条目。访问日志是使用标准后缀access.log、access.log.1、access.log.2等创建的。 您可以为生成的日志项指定开始和结束日期时间a,这些日志项可以(但不必)匹配模板日志中的日期。但是,不能保证会生成与开始日期和结束日期完全匹配的条目。它们只是保证在您选定的日期之间。 模板日志中的IP地址 非全局IP(私有、环回等)保持原样。所有生成的IP都保证有效:例如,192.168.0.0是一个网络标识符,从不分配给接口,169.254.0.0/16链接局部变量不可路由,因此它不会使用任何这些值。 m参数允许您使用一对多或一对一映射来混淆IP。一对多将混淆相同的IP到结果日志文件中的一个或多个随机IP。一对一将确保IP"X"在任何给定运行期间每次都被模糊到相同的IP"Y"。运行之间不保留一对一映射。 用户代理 真正的设备代理是从最顶级的真实世界用户代理列表中生成的,按出现频率加权,并与模板日志中的浏览器、操作系统和桌面/移动可能性的分布相匹配。如果您的模板日志只包含mobile safari uas,那么您将在生成的日志中看到的只是mobile safari uas。如果你有70%的移动浏览器和30%的桌面所有其他在你的模板日志,你会得到的。 你可以控制你得到的机器人和非机器人无人机的比例(目前,这是硬编码到我使用的,21.9%的机器人和78.1%的其他东西,但这很容易改变)。您可以选择包含在提供的user-agents.json文件中的常见bot列表中的bot,也可以选择仅包含模板文件中的bot,或者选择不包含bot。-u和-b命令行参数控制出现的机器人程序。有关详细信息,请参见命令行参数说明。 一个IP为123.4.5.6的模板日志条目chromebook mac ua被扩展到一个或多个生成的条目,ip s的范围为123.4.5.0/24(bc it's global)+chromebook mac ua 一个带有IP 10.1.2.3、Linux、curl UA的模板日志条目被扩展到一个或多个具有IP 10.1.2.3(BC它是私有的)的生成条目+相同的Linux curl UA googlebot保持googlebot:相同的ua,ips 您可以指定要在日志中显示的总时间分布,其中之一: normal 偶数指定使用随机(偶数)分布。如果您是一家国际公司,并且没有一个时区唤醒/睡眠周期控制您的网站/应用程序的使用模式,则您可能希望使用此功能。 生成的条目总数等于-n参数值乘以-r参数值,在-s和-e参数开始和结束日期时间之间指定的时间范围内分布在选定的分布中。 生成的条目总数等于-r参数值,在-s和-e参数开始和结束日期时间之间指定的时间范围内分布在选定的分布中。 忽略-e end datetime,flan流记录,直到达到settings.r_max(100000000),或者您按ctrl-c或关闭服务,或者直到它达到unix maxdate,或者您耗尽内存或其他东西,然后它出错:-)。指定--减慢速度。 注意:从v0.0.31开始,会话保留(-p)不再将生成的记录数限制为模板日志的大小。 内存是flan使用的主要资源。内存消耗主要受两个因素影响: 使用的模板日志文件的大小,特别是其中唯一的用户代理字符串的数目,以及; 需要在内存中缓存整个时间分布周期,以便在运行时"保持分布的形状"。-s和-e之间的秒数决定了此操作使用了多少内存。 一个500k的记录模板日志文件,其-n 10-r 100000在我的mac上使用的内存不足1gb。你的结果可能不同。使用flan的--profile开关查看内存消耗。 磁盘使用(如果使用的是文件模式)高度依赖于用户代理和请求路径的长度。对于我的测试文件,使用-n 10-r 1000000,我可以为每个文件获得大约250MB的存储空间,总共有2.5GB的磁盘空间。 CPU周期主要由我添加的隐藏比特币矿工占用(只是开玩笑…flan不是特别占用cpu的)。背景
flan在语义上生成与生产环境类似的日志文件
全局地址被混淆。IPv4的最后三位(/24)或六位(/16)或IPv6的最后四位(/116)是随机的。这提供了最小的IP混淆,同时最大限度地保留了IP地址中其他有趣的属性,如用户的地理位置、商业与住宅等。
对模板日志中的所有用户代理进行基本的bot或not检查。所有被标识为bot的用户代理都会被提取出来,并有选择地按原样重播到生成的假日志中,其中包含它们的真实原始IP。IP/用户代理示例
时间分布
指定应生成条目的正态分布,以开始和结束日期时间之间的中点时间为中心。这是默认设置,因为大多数现实世界的Web访问遵循自然的唤醒/睡眠周期。它生成多少条记录?
如果不是连续流式传输(未指定-c)
如果要将输出写入文件:
< Buff行情>或者如果要将输出流传输到stdout、kafka、splunk或其他流目标:
< Buff行情>如果您是连续流媒体(指定了-c)
< Buff行情>从资源角度看,这要花多少钱?
我目前不支持跨时间分布时段边界保存会话。这意味着我必须同时缓存多个时间分布周期,这只会消耗内存。因此,例如,从午夜开始到结束日期之间的3天范围,使用正态分布和会话保留,创建了一个"3驼峰"模式,鞍在午夜,峰值在中午,会话保留在每天/驼峰内,但不跨越天/驼峰。
说明
flan是在python 3.7上开发和测试的(截至2019年7月)。它还没有在其他版本上测试过。
依赖关系
< Buff行情>努比
python dateutil
吡喃<Br/>
服务
ua解析器
用户代理
BOTO(如果使用AWS集成)
合流卡夫卡(如果使用卡夫卡集成)
fluent记录器(如果使用fluentd集成)
splunk sdk(如果使用splunk集成)
stomp.py(如果使用stomp mq集成)
安装
来自PIP
PIP安装法兰
来源于
下载并将所有*.py文件、*requirements.txt文件和(可选)user-agents.json解压到您选择的安装目录。如果不运行单元测试,则不需要tests文件夹或其内容。这个练习留给读者。
(可选)设置python 3.7virtualenv并激活它。这个练习留给读者。
安装依赖项要求。您可以选择首先注释掉不需要的任何集成依赖项:
pip install-r requirements.txt
运行setup.py:
python setup.py安装
选项:如果您(可能)希望以后卸载,请改为使用此命令记录安装过程中在本地创建的文件:
python setup.py install--记录flanstalledfiles.txt
运行:
flan[arguments]template.log outputdir
卸载
xargs rm-rf<;flanstalledfiles.txt
更新
卸载,然后使用上面列出的相同安装说明重新安装。
语法和参数
交互模式(使用命令行参数)
文件输出:
flan -n <number of files to write> -r <number of records per file> [arguments] templatelogspec outputdir
流输出:
flan -c [-o outputtarget] [--pace] [arguments] templatelogspec
服务/后台程序模式(使用flan.config.yaml)
flan [ start | stop | status ]
通过参数和配置控制法兰
对于服务模式,请使用flan.config.yaml而不是命令行参数。每个条目将一对一映射到下面的一个参数。quiet(-q)、stats(-stats)、profile(-profile)和overwrite(-w)在服务模式下设置为固定默认值,如果在flan.config.yaml中设置,则忽略这些值。在交互模式下忽略flan.config.yaml。
<表><广告>——botfilter
all=使用模板日志和user-agents.json文件中的bots。
——
normal=对时间维度使用以开始和结束日期时间中间为中心的正态分布;
random=使用随机("喷枪爆炸")分布。
-end
-ipfilter
-gzip
-inputsource
file s=load template log(s)from one or more files as controlled by the flan.files.yaml config file's"import"section;
splunk=load template logs from the ncsa combined log format entries from the splunk server and index specified在flan.splunk.yaml文件的"导入"部分。
——linedelimiter
[n one,no,false,n,f];
[comma,c];
[tab,t];
cr;
lf;
crlf。
-ipmapping
otm24=将一个IPv4映射到最多255个IPv4/24地址,或将一个IPv6映射到最多约65K个IPv6/116地址(会话销毁);
oto24=将一个IPv4/IPv6地址映射到同一/24或/116块中的一个IPv4/IPv6地址(session preserving);
oto16=将一个IPv4/IPv6地址映射到同一/16或/116块(会话保留)内的一个IPv4/IPv6地址;
off=不混淆IP(会话保留)。
——numfiles
fluentd=流到fluentd远程,如flan.fluentd.yaml配置文件的"导出"部分中定义的
stdout=流到stdout
json=以json格式发送条目;
-records
10000
——start
-timeformat
-uafilter
——regex
——timezone
在哪里可以使用access.log文件进行测试?
测试日志文件位于"测试"文件夹中。
这是另一个资源:
https://gist.github.com/rm hull/bd60aed44024e9986e3c
或者,只需谷歌"example access.log files"。
未来的增强功能
当然:
- 集成:各种aws服务,google云发布/订阅,redis发布/订阅,apache flume,apache pulsar,apache nifi…如果您想要集成、询问或提交PR。
可能:
能够指定特定cidr、asnum块、ip范围等的生成。这有特定的用例;
能够将自定义数据注入到用户代理字段中,或以特定方式(将用户代理映射到另一个用户代理)更改用户代理以进行下游标记/检测;
支持特定用例的其他时间分布。示例:模拟不太可能的事件/ddos的重尾poisson分布、模拟api/restful活动的离散/退化分布等。有关注意事项,请参见:
https://en.wikipedia.org/wiki/web_traffic
https://www.nngroup.com/articles/traffic log-patterns
https://en.wikipedia.org/wiki/traffic_generation_model
https://en.wikipedia.org/wiki/list\u of\u probability\u发行版
引文
crawler-user-agents.json版权所有(c)2019 martin monperrus
https://github.com/monperrus/crawler-user-agents/blob/master/crawler-user-agents.json
免责声明
本软件中包含的材料按"原样"提供给您,无任何形式的明示、暗示或其他保证,包括但不限于任何特定用途的适用性保证。您对本软件的全部或部分使用表明您同意,对于任何形式的直接、特殊、附带、间接或后果性损害,或任何损害,包括但不限于利润损失、使用损失、节省或收入损失,我不对您或任何其他人负责。,或第三方的索赔,无论我是否已被告知此类损失的可能性,无论是由何种原因造成的,以及根据任何责任理论,由本软件的拥有、使用或性能引起的或与之相关的。