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

简介: 除正则表达式方式外,日志服务还支持分隔符模式的日志,分隔符支持单字符和多字符两种方式。本文通过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工具管理配置

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
|
9月前
|
数据采集 缓存 大数据
【赵渝强老师】大数据日志采集引擎Flume
Apache Flume 是一个分布式、可靠的数据采集系统,支持从多种数据源收集日志信息,并传输至指定目的地。其核心架构由Source、Channel、Sink三组件构成,通过Event封装数据,保障高效与可靠传输。
481 1
|
10月前
|
存储 Kubernetes 监控
Kubernetes日志管理:使用Loki进行日志采集
通过以上步骤,在Kubernetes环境下利用LoKi进行有效率且易于管理地logs采集变成可能。此外,在实施过程中需要注意版本兼容性问题,并跟进社区最新动态以获取功能更新或安全补丁信息。
591 16
|
11月前
|
存储 缓存 Apache
StarRocks+Paimon 落地阿里日志采集:万亿级实时数据秒级查询
A+流量分析平台是阿里集团统一的全域流量数据分析平台,致力于通过埋点、采集、计算构建流量数据闭环,助力业务提升流量转化。面对万亿级日志数据带来的写入与查询挑战,平台采用Flink+Paimon+StarRocks技术方案,实现高吞吐写入与秒级查询,优化存储成本与扩展性,提升日志分析效率。
1469 1
|
12月前
|
JSON 安全 网络安全
LoongCollector 安全日志接入实践:企业级防火墙场景的日志标准化采集
LoonCollector 是一款轻量级日志采集工具,支持多源安全日志的标准化接入,兼容 Syslog、JSON、CSV 等格式,适用于长亭 WAF、FortiGate、Palo Alto 等主流安全设备。通过灵活配置解析规则,LoonCollector 可将原始日志转换为结构化数据,写入阿里云 SLS 日志库,便于后续查询分析、威胁检测与合规审计,有效降低数据孤岛问题,提升企业安全运营效率。
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
5078 32
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
监控 安全 Apache
什么是Apache日志?为什么Apache日志分析很重要?
Apache是全球广泛使用的Web服务器软件,支持超过30%的活跃网站。它通过接收和处理HTTP请求,与后端服务器通信,返回响应并记录日志,确保网页请求的快速准确处理。Apache日志分为访问日志和错误日志,对提升用户体验、保障安全及优化性能至关重要。EventLog Analyzer等工具可有效管理和分析这些日志,增强Web服务的安全性和可靠性。
634 9
|
监控 容灾 算法
阿里云 SLS 多云日志接入最佳实践:链路、成本与高可用性优化
本文探讨了如何高效、经济且可靠地将海外应用与基础设施日志统一采集至阿里云日志服务(SLS),解决全球化业务扩展中的关键挑战。重点介绍了高性能日志采集Agent(iLogtail/LoongCollector)在海外场景的应用,推荐使用LoongCollector以获得更优的稳定性和网络容错能力。同时分析了多种网络接入方案,包括公网直连、全球加速优化、阿里云内网及专线/CEN/VPN接入等,并提供了成本优化策略和多目标发送配置指导,帮助企业构建稳定、低成本、高可用的全球日志系统。
1348 55
|
存储 缓存 关系型数据库
图解MySQL【日志】——Redo Log
Redo Log(重做日志)是数据库中用于记录数据页修改的物理日志,确保事务的持久性和一致性。其主要作用包括崩溃恢复、提高性能和保证事务一致性。Redo Log 通过先写日志的方式,在内存中缓存修改操作,并在适当时候刷入磁盘,减少随机写入带来的性能损耗。WAL(Write-Ahead Logging)技术的核心思想是先将修改操作记录到日志文件中,再择机写入磁盘,从而实现高效且安全的数据持久化。Redo Log 的持久化过程涉及 Redo Log Buffer 和不同刷盘时机的控制参数(如 `innodb_flush_log_at_trx_commit`),以平衡性能与数据安全性。
952 5
图解MySQL【日志】——Redo Log

热门文章

最新文章

相关产品

  • 日志服务