网站流量日志埋点收集—日志格式、日志切分|学习笔记

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 快速学习网站流量日志埋点收集—日志格式、日志切分

开发者学堂课程【大数据分析之企业级网站流量运营分析系统开发实战(第一阶段)网站流量日志埋点收集—日志格式、日志切分】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/693/detail/12178


网站流量日志埋点收集—日志格式、日志切分


内容简介

一、日志格式

二、日志切分

三、小结

本节内容我们学习埋点收集数据的细节问题:日志格式和日志切分。这两个知识点的学习主要是帮助我们把系统变得更加完善,更加贴近于实战。


一、日志格式

所谓的日志格式,重点考虑的就是日志当中存在的多个字段,字段之间的分割符该怎么确定?我们当下所采集收集的数据是不是就要我们后面进行处理,分析,那么如果说分隔符确定不好的话,就会给后面的分析处理带来很大的麻烦,或者做一些无用的功。所以日志格式很有必要。

接下来我们看到 nginx 中它原生的字段之间是用空格进行分割的,有好也有不好。

image.png

分隔符确定不好的情况:

我们设置日志格式以@符作为分隔

1@allen@18@Beijing@allen@itcast.cn,这样的分隔符就明显设计的不好,因为当我们后面需要去处理这个数据时,首先要针对数据做切割 split(“&”),这个切割符的弊端就在于邮箱这里的@符,@符到底是分隔符的@,还是邮箱的@,所以这样的分隔符确定不好。

所以说好的日志格式好的分隔符非常方便与我们后续的处理。

我们的处理重点都是在我们的数据仓库 hive 当中分析,hive 当中默认的分隔符是\001。

通常常见的分隔符:

固定数量的字符(ABABA),制表符分隔符,空格分隔符,其他一个或多个字符,特定的开始和结束文本。不管什么分隔符,一切以有利于后续程序的解析为标准。


二、日志的切分

日志的切分主要跟 nginx 软件相关,nginx 软件有一个非常大的弊端,就是它生成的文件,日志默认在我们的 access.log中,它会一直往这一个文件写,不会进行滚动。如果系统上限预警则会导致这个文件会变得越来越大,文件变大后,不管是文件后续的移动还是处理都是不方便的。

这时候就需要针对日志做一个相关的切分,比如按照时间进行切分,一天切割一个文件或一小时切割一个文件,也可以按照大小进行切分等。但不管怎么切分,我们的 ngjnx 中并没有开放这样的参数给我们去控制它。

那我们怎样完成文件的滚动?这里运用了巧妙的技术:首先先普及一个 USR1信号,当我们给一个程序发送这样的信号时,这个程序通常会重载我们的配置文件,重载配置文件的同时打开我们新的日志。

我们怎么间接控制 nginx,完成文件的滚动:

通过 crontab 定时调用一个 shell 脚本实现,脚本负责文件日志的切分,而定时器负责控制按照何种频率进行控制。比如脚本完成后,定时器配置为59min,则会在59min进行控制执行。所以定时器的任务是控制频率,重点在我们的脚本中。

脚本代码:

ngigx _path_ prefix=/usr/1ocal/ nginx

time=` date +%Y%m%d%H^ ,

mv  ${nginx_ path_ prefix) /logs/user _defined. log

$ (nginx_ path_ prefix} /logs/user_ defined-$ {time}. log

kill -USR1  `cat  S{nginx _path _prefix} /logs/nginx. pid

首先定义变量,叫 ngigx _path_ prefix,指向 nginx 安装路径,然后是时间,`是反引号,反引号的目的是表示立即执行命令,获取时间。

这个核心重点是我们做一个 mv 的移动操作,把 nginx_ path_ prefix) /logs/下文件改名字添加日期变成另一个文件,那么为什么要移动?

重点在最后一个脚本 kill -USR1  `cat  S{nginx _path _prefix} /logs/nginx. Pid ,首先这里出现了反引号表示立即执行命令去 cat{nginx _path _prefix} /logs/nginx. Pid 文件,

在文件 nginx.pid记录的是 nginx 运行时的进程号,也即我们首先读取到 nginx 的进程号,给进程发送一个 -USR1的信号,当我们 nginx 进程接到信号后它就会以下操作,停止当前请求然后重新载入配置文件,在重载配置文件的同时打开一个新的文件,而之前的文件通过 mv 移动给它重命名,这样就间接完成了日志的切分。

所以这个技术就是给它发送信号,做一个临时的中断,这样就可以控制我们的 nginx 日志重新打开一个新的日志文件,之前的日志文件通过 mv 的命令操作把它改名就可以滚动然后配合定时器完成定时切分。


三、小结

日志格式和日志切分并不是系统必备的,但是拥有后会使我们的埋点采集数据变得更加完整,立体和丰富。

小结:

日志切分

nginx 默认把日志一直写在一个文件中 access.log 不利于后续的维护移动操作处理

通过shell脚本给nginx进程发送usr1信号告知其重载配置文件在重载配置文件的时候重新打开一个新的日志。

文件在配合 crontab 定时器从而完成间接的通过时间控制文件的滚动。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
2月前
|
PyTorch 算法框架/工具
Pytorch学习笔记(七):F.softmax()和F.log_softmax函数详解
本文介绍了PyTorch中的F.softmax()和F.log_softmax()函数的语法、参数和使用示例,解释了它们在进行归一化处理时的作用和区别。
445 1
Pytorch学习笔记(七):F.softmax()和F.log_softmax函数详解
|
2月前
|
数据可视化
Tensorboard可视化学习笔记(一):如何可视化通过网页查看log日志
关于如何使用TensorBoard进行数据可视化的教程,包括TensorBoard的安装、配置环境变量、将数据写入TensorBoard、启动TensorBoard以及如何通过网页查看日志文件。
226 0
|
4月前
|
jenkins 持续交付
jenkins学习笔记之三:使用jenkins共享库实现日志格式化输出
jenkins学习笔记之三:使用jenkins共享库实现日志格式化输出
jenkins学习笔记之三:使用jenkins共享库实现日志格式化输出
|
2月前
|
监控 网络协议 CDN
阿里云国际监控查询流量、用量查询流量与日志统计流量有差异?
阿里云国际监控查询流量、用量查询流量与日志统计流量有差异?
|
4月前
分享一种接口的日志格式
分享一种接口的日志格式
53 13
|
6月前
|
C++
spdlog 日志库部分源码说明——日志格式设定,DIY你自己喜欢的调试信息,你能调试的远比你想象的还要丰富
spdlog 日志库部分源码说明——日志格式设定,DIY你自己喜欢的调试信息,你能调试的远比你想象的还要丰富
316 6
|
5月前
|
存储 弹性计算 运维
可观测性体系问题之Process Layer在ECS稳定性平台中的工作如何解决
可观测性体系问题之Process Layer在ECS稳定性平台中的工作如何解决
42 0
|
5月前
|
监控 存储
日志存储问题之志格式的乱象如何解决
日志存储问题之志格式的乱象如何解决
|
5月前
|
JSON 应用服务中间件 开发工具
Ngnix的http块自定义服务日志,access.log和error.log,log_format指定日志输出格式设置
Ngnix的http块自定义服务日志,access.log和error.log,log_format指定日志输出格式设置
|
24天前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
176 30
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板