Logtail从入门到精通(五):分隔符Nginx访问日志采集实战

本文涉及的产品
对象存储 OSS,20GB 3个月
日志服务 SLS,月写入数据量 50GB 1个月
文件存储 NAS,50GB 3个月
简介: 除正则表达式方式外,日志服务还支持分隔符模式的日志,分隔符支持单字符和多字符两种方式。本文通过Nginx分隔符访问日志为大家介绍如何使用Logtail采集分隔符类型的日志。

前言


上一节中我们介绍了如何使用正则表达式的方式来解析日志,将非结构化的日志转化为半结构的数据。除正则表达式方式外,日志服务还支持分隔符模式的日志,分隔符支持单字符和多字符两种方式。本文通过Nginx分隔符访问日志为大家介绍如何使用Logtail采集分隔符类型的日志。


分隔符日志介绍


分隔符日志使用分隔符(Separator)将一条日志切分成多个字段,一般会分为支持单字符和多字符两种模式。其中单字符分隔符较难理解和掌握,配置方式也更加复杂,建议大家使用简单易用的多字符分隔符


单字符模式


单字符模式通过匹配单字符进行日志切分,例如制表符(\t)、空格、竖线(|)、逗号(,)、分号(;)等单字符。


单字符分隔符容易出现日志字段中包含分隔符的场景,为避免日志字段被误分割,需要使用Quote(${Quote})对日志字段进行包裹隔离。如果内容中在非Quote情况下出现双引号,则需要进行转义,处理成两个Quote,即${Quote}${Quote}。Quote必须在字段的边界单次出现,要么作为字段内数据成对出现(
{Quote}`),其它情况不符合分隔符日志的格式定义,解析会出错。


正常情况下${Quote}一般设置为",但很多用户并不理解,在使用中容易出现各种问题。因此在日志服务中,默认的${Quote}设置成\u0001(不可见字符)。


例如,逗号,作为分隔符,双引号"作为Quote。双引号和逗号作为日志字段中的一部分,需要将包含逗号的日志字段用Quote包裹,同时将日志字段中的双引号转义为成对的双引号""。处理后的日志格式为:1999,Chevy,"Venture ""Extended Edition, Very Large""","",5000.00。该日志可以被解析为五个字段: 1999ChevyVenture "Extended Edition, Very Large"、空字段和5000.00


多字符分隔符


多字符模式中,分隔符可以包括2~3个字符,如(||)、(&&&)、(^_^)等多字符。多字符分隔符模式下,日志解析完全根据分隔符进行匹配,您无需使用Quote对日志进行包裹。


  • 注意:  多字符分隔符中没有Quote概念,您 唯一需要关心 的是:需确保日志字段内容中不会出现分隔符的完整匹配,否则会产生字段误分割。


例如,分隔符设置为&&的情况下,日志:1997&&Ford&&E350&&ac&abs&moon&&3000.00会被解析为5个字段:1997FordE350ac&abs&moon3000.00


使用多字符分隔符解析Nginx access日志


为何使用多字符分隔符


一般Nginx访问日志使用正则或者grok的方式来进行解析,但这两种方式相对多字符分隔符都存在一个非常重要的缺陷:解析效率太低。多字符分隔符通俗易懂,而且解析性能极高,只需一遍简单的字符匹配查找,性能是正则或者grok的3倍以上。因此若您的Nginx访问日志量极大,建议使用多字符分隔符类型的access log,可节省相当多的CPU。


Nginx access日志格式配置


如何配置nginx access日志格式,您可以参考Nginx配置示例Nginx log module


配置Nginx多字符分隔符的日志,需要特殊注意的一点是:requests, referrers, user-agents等字段中不能出现相同的多字符分隔符。因此需要给多字符分隔符中配置一个不会再这些字段直接出现的符号,例如"。下面是一个配置示例:


log_format parsable '$remote_addr |"| $remote_user |"| $time_local |"|'
                      '$request |"| $status |"| $body_bytes_sent |"|'
                      '$http_referer |"| $http_user_agent';


Logtail配置多字符分隔符


日志样例


上述配置的Nginx access日志示例如下:


66.249.65.159|"|-|"|06/Nov/2014:19:10:38 +0600|"|GET /news/53f8d72920ba2744fe873ebc.html HTTP/1.1|"|404|"|177|"|-|"|Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)


解析配置


  1. 创建采集配置:在数据接入页面中,我们选择自定义数据中的文本文件接入。
  2. 在采集配置中我们选择分隔符模式,日志路径中的文件夹和文件名分别输入/var/log/nginxaccess.log
  3. 在日志样例中输入上述样例。
  4. 分隔符输入|"|
  5. 分隔符输入完毕后,配置页面会自动分解出8个字段,此时填上分解出的key名称。


最后配置如下:


9b5c858e-e07d-4bd8-982b-8b6f75f44d72.png


采集结果


配置应用到机器组后,Logtail会对新产生的日志执行多字符分割,最后采集到服务端的效果如下:


afb3045d-f7c6-4ccb-8a28-634bda9b2f13.png


高级定制


在日志服务控制台中,您可以完成80%以上常用的配置管理。但也有一定情况下,控制台无法满足您的配置功能,例如:


  1. 设置Quote(默认为\u0001
  2. 将分隔符设置为不可见字符或空格
  3. 隐藏的高级配置


如果您有上述需求,可以使用日志服务的CLI(command language interface)来满足您的需求:


建议初次使用的同学们按照以下方式使用:


  1. 安装CLI工具,具体请参考使用手册
  2. 在控制台创建一个分隔符配置
  3. 使用CLI工具获取该配置,保存到本地文件中
  4. 修改本地文件,把其中您需要修改的字段替换
  5. 调用CLI工具的update_logtail_config命令更新配置


操作示例如下:


aliyun log get_logtail_config --project_name="demo-log-project" --config_name="delimiter-log" > temp.json
vim temp.json
aliyun log update_logtail_config --project_name="demo-log-project" --config_detail="file://./temp.json"


相关文档和参考


Nginx配置样例


Nginx日志格式配置


分隔符日志帮助文档


日志服务cli工具使用说明


使用cli工具管理配置

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
17天前
|
JavaScript 应用服务中间件 nginx
【项目部署系列教程】5. nginx配置反向代理,解决跨域接口的访问
【项目部署系列教程】5. nginx配置反向代理,解决跨域接口的访问
43 10
|
12天前
|
Python
Python编程实战:利用闭包与装饰器优化日志记录功能
【7月更文挑战第7天】Python的闭包和装饰器简化了日志记录。通过定义如`log_decorator`的装饰器,可以在不修改原函数代码的情况下添加日志功能。当@log_decorator用于`add(x, y)`函数时,调用时自动记录日志。进一步,`timestamp_log_decorator`展示了如何创建特定功能的装饰器,如添加时间戳。这些技术减少了代码冗余,提高了代码的可维护性。
17 1
|
15天前
|
前端开发 应用服务中间件 nginx
网页设计,若依项目修改(It must be done)01----若依打包位置,nginx代理前端静态资源和后端接口,就是怎样设置转载,访问固定端口,让他访问其他资料的配置文件,访问/,给你那些
网页设计,若依项目修改(It must be done)01----若依打包位置,nginx代理前端静态资源和后端接口,就是怎样设置转载,访问固定端口,让他访问其他资料的配置文件,访问/,给你那些
|
18天前
|
网络协议 应用服务中间件 网络安全
如何排查Nginx配置问题导致的域名访问错误
如何排查Nginx配置问题导致的域名访问错误
42 2
|
23天前
|
安全 应用服务中间件 nginx
Nginx访问403
Nginx访问403
28 3
|
26天前
|
弹性计算 应用服务中间件 Linux
双剑合璧:在同一ECS服务器上共存Apache与Nginx的实战攻略
在ECS服务器上同时部署Apache和Nginx的实战:安装更新系统,Ubuntu用`sudo apt install apache2 nginx`,CentOS用`sudo yum install httpd nginx`。配置Nginx作为反向代理,处理静态内容及转发动态请求到Apache(监听8080端口)。调整Apache的`ports.conf`监听8080。重启服务测试,实现两者高效协同,提升Web服务性能。记得根据流量和需求优化配置。【6月更文挑战第21天】
175 1
|
27天前
|
安全 Ubuntu 应用服务中间件
NGINX环境下实现Web网站访问控制的实战指南
在NGINX中设置基于IP的访问控制可提升网站安全性。步骤包括安装NGINX、备份配置文件、编辑`/etc/nginx/sites-available/default`,添加`allow`和`deny`指令限制特定IP访问,如`allow 192.168.1.100; deny all;`,然后测试配置并重启服务。成功后,仅允许的IP能访问网站,否则会收到403错误。这为Web安全提供基础保障,还可扩展实现更多高级控制策略。【6月更文挑战第20天】
91 3
|
11天前
|
缓存 负载均衡 监控
Nginx性能调优5招35式不可不知的策略实战
以上 V 哥总结的5个方面关于 Nginx性能调优的策略,实际应用中需要结合实际项目的情况来测试,希望对你有帮助,欢迎关注威哥爱编程,技术路上我们一起成长。
|
13天前
|
应用服务中间件 Linux 开发工具
Nginx14---目录结构分析,查看Ngnix访问日志命令的写法​
Nginx14---目录结构分析,查看Ngnix访问日志命令的写法​
|
16天前
|
消息中间件 NoSQL Kafka
基于Kafka的nginx日志收集分析与监控平台(3)
基于Kafka的nginx日志收集分析与监控平台(3)

相关产品

  • 日志服务