日志分析实战之清洗日志小实例5:实现获取不能访问url

简介: 日志分析实战之清洗日志小实例5:实现获取不能访问url

上篇文章简单的统计了一些信息,下一步希望找到404对应的url。

思路:



1.获取request字段

2.过滤不需要字符

3.实现获取url,并打印输出



1.创建getRequest函数获取request字段


// get the `request` field from an access log record
def getRequest(rawAccessLogString: String): Option[String] = {
  val accessLogRecordOption = p.parseRecord(rawAccessLogString)
  accessLogRecordOption match {
    case Some(rec) => Some(rec.request)
    case None => None
  }
}

2.创建extractUriFromRequest函数



// val request = "GET /foo HTTP/1.0"
def extractUriFromRequest(requestField: String) = requestField.split(" ")(1)

这个目的大家可以猜猜它的作用


获取404页面,并且打印出请求的URL.

val distinctRecs = log.filter(line => getStatusCode(p.parseRecord(line)) == "404")
                     .map(getRequest(_))
                     .collect { case Some(requestField) => requestField }
                     .map(extractUriFromRequest(_))
                     .distinct

2d833e05641577862c51d20f444d8bc6.jpg


distinctRecs.count

84ce32f2fabe39d389c4971bce684eb4.jpg

distinctRecs.collect().foreach(println(_))

85031a62cf213d0f82706aded46a1e84.jpg

3.获取url



val distinctRecs = log.filter(line => getStatusCode(p.parseRecord(line)) == "404")
                     .map(getRequest(_))
                     .collect { case Some(requestField) => requestField }
                     .map(extractUriFromRequest(_))
                     .distinct

通过上面看,其实挺简单。Scala本身是非常简洁的。


相关说明:


上面看似简单,其实有很多需要说明的


val recs = log.filter(line => getStatusCode(p.parseRecord(line)) == "404").map(getRequest(_))

上面得出404对应的url.getRequest是上面我们定义的函数

val distinctRecs = log.filter(line => getStatusCode(p.parseRecord(line)) == "404").map(getRequest(_)).distinct

这里多了distinct是为了去重,下面是直接打印。

distinctRecs.collect().foreach(println(_))。


对于extractUriFromRequest,这个主要为过滤我们不想要的内容。如下面,GET 和HTTP/1.1都不是我们想要的。所以我们取第二个元素即可。


GET /foo HTTP/1.0
GET /foo HTTP/1.1


知识补充:


对于collect() 函数,是比较常见的,但是对于下面内容,是什么意思。

collect { case Some(requestField) => requestField }这个作用,类似map。

##################

更多信息:


在Scala中,当我需要对集合的元素进行转换时,自然而然会使用到map方法。而当我们在对tuple类型的集合或者针对Map进行map操作时,通常更倾向于在map方法中使用case语句,这比直接使用_1与_2更加可读。例如:


val languageToCount = Map("Scala" -> 10, "Java" -> 20, "Ruby" -> 5)
languageToCount map { case (_, count) => count + 1 }



然而对于上述场景,其实我们也可以使用collect方法:

languageToCount collect { case (_, count) => count + 1 }



相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
目录
相关文章
|
5月前
|
存储 监控 算法
防止员工泄密软件中文件访问日志管理的 Go 语言 B + 树算法
B+树凭借高效范围查询与稳定插入删除性能,为防止员工泄密软件提供高响应、可追溯的日志管理方案,显著提升海量文件操作日志的存储与检索效率。
180 2
|
8月前
|
运维 安全 数据可视化
日志审查安排工具实战攻略:中小团队如何通过日志审查安排工具建立可控、安全的审查机制?
在审计敏感时代,日志审查安排工具成为安全运维与合规管理的关键利器。它实现审查任务的流程化、周期化与可视化,支持多系统协作、责任到人,确保“可控、可查、可追”的日志治理。工具如板栗看板、Asana、Monday 等提供任务调度、问题闭环与合规对接能力,助力企业构建高效、透明的日志审查体系,提升安全与合规水平。
|
存储 运维 监控
超越传统模型:从零开始构建高效的日志分析平台——基于Elasticsearch的实战指南
【10月更文挑战第8天】随着互联网应用和微服务架构的普及,系统产生的日志数据量日益增长。有效地收集、存储、检索和分析这些日志对于监控系统健康状态、快速定位问题以及优化性能至关重要。Elasticsearch 作为一种分布式的搜索和分析引擎,以其强大的全文检索能力和实时数据分析能力成为日志处理的理想选择。
1062 6
|
11月前
|
监控 NoSQL 算法
百万级URL重定向工程:大规模网站架构设计与性能优化实战
本文深入探讨了大规模重定向系统的核心挑战与解决方案,涵盖技术瓶颈分析、分布式架构设计、十亿级URL处理策略、全球化部署方案及全链路监控体系。通过数学建模与性能优化,提出三层架构模型,并结合一致性哈希分片算法实现高效路由。同时,对比不同架构的吞吐量与容灾能力,分享某电商平台实践案例,展示性能显著提升。最后展望重定向即服务(RaaS)未来趋势,包括AI动态路由、量子安全跳转和边缘智能等关键技术,为企业提供扩展性强、稳定性高的系统设计参考。
415 25
|
9月前
|
机器学习/深度学习 存储 算法
基于 C++ 布隆过滤器算法的局域网上网行为控制:URL 访问过滤的高效实现研究
本文探讨了一种基于布隆过滤器的局域网上网行为控制方法,旨在解决传统黑白名单机制在处理海量URL数据时存储与查询效率低的问题。通过C++实现URL访问过滤功能,实验表明该方法可将内存占用降至传统方案的八分之一,查询速度提升约40%,假阳性率可控。研究为优化企业网络管理提供了新思路,并提出结合机器学习、改进哈希函数及分布式协同等未来优化方向。
277 0
|
9月前
|
人工智能 运维 监控
Aipy实战:分析apache2日志中的网站攻击痕迹
Apache2日志系统灵活且信息全面,但安全分析、实时分析和合规性审计存在较高技术门槛。为降低难度,可借助AI工具如aipy高效分析日志,快速发现攻击痕迹并提供反制措施。通过结合AI与学习技术知识,新手运维人员能更轻松掌握复杂日志分析任务,提升工作效率与技能水平。
|
域名解析 应用服务中间件 网络安全
阿里云个人博客外网访问中断应急指南:从安全组到日志的七步排查法
1. 检查安全组配置:确认阿里云安全组已开放HTTP/HTTPS端口,添加规则允许目标端口(如80/443),授权对象设为`0.0.0.0/0`。 2. 本地防火墙设置:确保服务器防火墙未阻止外部流量,Windows启用入站规则,Linux检查iptables或临时关闭防火墙测试。 3. 验证Web服务状态:检查Apache/Nginx/IIS是否运行并监听所有IP,使用命令行工具确认监听状态。 4. 测试网络连通性:使用外部工具和内网工具测试服务器端口是否开放,排除本地可访问但外网不可的问题。 5. 排查DNS解析:确认域名A记录指向正确公网IP,使用`ping/nslookup`验证解析正
469 2
|
PHP Apache
【ThinkPHP框架教程·Part-04】URL访问模式
本章节介绍 ThinkPHP6.0 的 URL 访问模式,解析其访问方法。ThinkPHP 框架通过 URL 实现多种操作,默认为单应用模式。
【ThinkPHP框架教程·Part-04】URL访问模式
|
Java 程序员 应用服务中间件
「测试线排查的一些经验-中篇」&& 调试日志实战
「测试线排查的一些经验-中篇」&& 调试日志实战
269 1
「测试线排查的一些经验-中篇」&& 调试日志实战
|
监控 应用服务中间件 定位技术
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
1309 3