《日志管理与分析权威指南》一2.2.2 日志语法

本文涉及的产品
云解析DNS,个人版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:

本节书摘来华章计算机《日志管理与分析权威指南》一书中的第2章 ,第2.2.2节,(美) Anton A. Chuvakin Kevin J. Schmidt Christopher Phillips 著 姚 军 简于涵 刘 晖 等译更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.2.2 日志语法

任何格式的日志文件都具有语法,日志语法在概念上与语言(如英语)语法相似。人类语言语法中的句子通常包含一个主语、一个谓语、有时还包含一个表语,当然还有补语和定语。句子的语法涵盖句子成员之间的关系和他们的含义。需要注意的是,语法并不涉及消息的内容。换句话说,语法处理的是如何构造我们所要表述的内容,而不是我们使用的具体词语。
那么,在日志消息的环境下语法又有什么意义呢?当然,每条日志消息都有表征它的结构。一些类型的日志消息自身具有人类语言的部分语法,日志消息每部分由各种类型的信息模式组成。基于规则,可以定义一组通用的日志字段。而正是由于其必要性,故应存在于每条日志条目中。例如,常见的一组字段如下:
1)日期/时间(理想的情况下应包含时区)
2)日志条目的类型
3)产生该条目的系统
4)产生该条目的应用程序或组件
5)成功与失败的指示
6)日志消息的严重性、优先级或重要性(通常存在于所有syslog消息)
7)和该日志相关的任何用户活动,也可记录用户名
网络设备制造商通常在其日志中遵循上述结构,但是,缺乏某些细节的例外情况也很多。
日志的句子中有哪些内容?让我们试着对syslog的单行记录做次“语法分析”。作为最灵活(也最混乱)的日志格式的例子,我们将使用syslog的一条日志消息。
image

它看上去是否很晦涩?我们故意选择了相当长且深奥的一行日志。我们可以知道“主语”(表明了“什么”)是一个命名进程,指出用户应该“check_hints”(“谓语”)指定DNS服务器,这个事件发生在11月16日00:26(令人吃惊的是,syslog在其日志时间戳中并不记载年份,这会在本章后面更详细地解释)。满足一下大家的好奇心,这里发生的事件其实就是根DNS服务器中的一个IP地址改变了,但这个DNS服务器(产生上面这条日志的服务器)依旧使用其配置文件中的旧信息发起查询(例如,可以参见论文《Some error message and problems with DNS》:http://www.reedmedia.net/misc/dns/errors.html)。
日志消息的语法有什么意义?日志语法对于任何一种日志数据的自动分析(本书讨论的主题)都非常重要。我们需要按照语法将日志分解成各个组成部分,才能从日志数据中得出明智的结论。
一些日志分析相关的软件产品(商用和开源)已经开发了“消息模式”(message schema)来确定各种日志类型的语法。这种模式被设计成可以满足从各种设备、系统、应用程序和其他来源日志文件产生的任何消息。
对读者来说,大部分上面的日志消息例子显然都适合于这种模式。例如如下的Dragon NIDS消息:
image

上例很容易融入表2.1所示的通用模式。这条消息表明,服务器10.1.1.3遭到从10.208.231.102发起的IIS Web服务器攻击(可能是由黑客或蠕虫病毒等恶意软件发起的)。此攻击与Internet Information Services(IIS,一个标准的Windows Web服务)的Unicolde解码漏洞相关。
image

image

注意,在收集这些消息时还添加了一些数据(由日志分析解决方案提供)。
注意,日志分析系统添加了EVENT和EVENT_TYPE以及变量名称(NDNS,NetBIOS,以及其他),以完成Dragon入侵检测系统所描绘的情景。
来自“不寻常应用程序”(尽管我们不确定是否曾经见过任何“正常”的应用程序日志)等特殊日志来源的数据如何处理呢?这种情况下,人们可能会使用通用的“自定义”字段存储这类数据。虽然这样会使日志结构看上去很混乱,但是很遗憾,当前日志分析的特性就是如此。
总的来说,在做任何一种日志分析之前,对日志文件语法有一定了解都是至关重要的。有些人可以在自己头脑中执行这样的分析,但这并不影响此方法的价值,只是说明这样的分析可能很简单(也凸显了人类对机器有一定的优势)。大多数情况下,自动化日志分析系统需要理解日志语法,这种理解通常被编码成某种模板。
总体上,各种各样的系统和设备供应商会采用少数特定日志记录类型,并结合几种常见语法(在前一小节中定义)。例如,一些安全日志被记录为XML格式,以便进行更简单、信息更丰富的集成。很多运营日志通过syslog记录,采用非结构化文本或半结构化消息。与此相似,许多调试日志采用syslog甚至临时文本文件。而高性能日志记录常常采用二进制和专有格式。
常用设备日志记录选项在表2.2进行了总结。
image

除了这些知名的日志记录方法之外,少数网络设备还会将日志记录为逗号分隔(CSV)或ELF格式(前文已经提到)。当然这些情况相对较少出现。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
5天前
|
SQL 运维 监控
SLS 数据加工全面升级,集成 SPL 语法
在系统开发、运维过程中,日志是最重要的信息之一,其最大的优点是简单直接。SLS 数据加工功能旨在解决非结构化的日志数据处理,当前全面升级,集成 SPL 语言、更强的数据处理性能、更优的使用成本。
|
15天前
|
监控
查看服务器/IIS日志、log、访问信息基本方法
除了手动查看,你也可以使用日志分析工具,如Log Parser、AWStats等,这些工具可以帮助你更方便地分析日志数据。
8 1
|
22天前
|
Java 测试技术 Apache
《手把手教你》系列基础篇(八十六)-java+ selenium自动化测试-框架设计基础-Log4j实现日志输出(详解教程)
【7月更文挑战第4天】Apache Log4j 是一个广泛使用的 Java 日志框架,它允许开发者控制日志信息的输出目的地、格式和级别。Log4j 包含三个主要组件:Loggers(记录器)负责生成日志信息,Appenders(输出源)确定日志输出的位置(如控制台、文件、数据库等),而 Layouts(布局)则控制日志信息的格式。通过配置 Log4j,可以灵活地定制日志记录行为。
33 4
|
23天前
|
运维 Java Apache
Java中的日志框架:Log4j与SLF4J详解
Java中的日志框架:Log4j与SLF4J详解
|
5天前
|
存储 大数据 数据库
为什么要利用pt-query-digest定期分析slow query log并进行优化
为什么要利用pt-query-digest定期分析slow query log并进行优化
|
20天前
|
XML Java 测试技术
《手把手教你》系列基础篇(八十八)-java+ selenium自动化测试-框架设计基础-Log4j 2实现日志输出-下篇(详解教程)
【7月更文挑战第6天】本文介绍了如何使用Log4j2将日志输出到文件中,重点在于配置文件的结构和作用。配置文件包含两个主要部分:`appenders`和`loggers`。`appenders`定义了日志输出的目标,如控制台(Console)或其他文件,如RollingFile,设置输出格式和策略。`loggers`定义了日志记录器,通过`name`属性关联到特定的类或包,并通过`appender-ref`引用`appenders`来指定输出位置。`additivity`属性控制是否继承父logger的配置。
22 0
|
21天前
|
JSON 应用服务中间件 开发工具
Ngnix的http块自定义服务日志,access.log和error.log,log_format指定日志输出格式设置
Ngnix的http块自定义服务日志,access.log和error.log,log_format指定日志输出格式设置
|
21天前
|
应用服务中间件 Linux 开发工具
Nginx14---目录结构分析,查看Ngnix访问日志命令的写法​
Nginx14---目录结构分析,查看Ngnix访问日志命令的写法​
|
21天前
|
应用服务中间件 开发工具 nginx
Ngnix09目录结构分析,使用tree工具可以Ngnix目录中以一个树的方式呈现出来,yum install -y tree,tail -f nginx/logs/access.log
Ngnix09目录结构分析,使用tree工具可以Ngnix目录中以一个树的方式呈现出来,yum install -y tree,tail -f nginx/logs/access.log
|
21天前
|
XML Java 测试技术
《手把手教你》系列基础篇(八十七)-java+ selenium自动化测试-框架设计基础-Log4j 2实现日志输出-上篇(详解教程)
【7月更文挑战第5天】Apache Log4j 2是一个日志框架,它是Log4j的升级版,提供了显著的性能提升,借鉴并改进了Logback的功能,同时修复了Logback架构中的问题。Log4j2的特点包括API与实现的分离,支持SLF4J,自动重新加载配置,以及高级过滤选项。它还引入了基于lambda表达式的延迟评估,低延迟的异步记录器和无垃圾模式。配置文件通常使用XML,但也可以是JSON或YAML,其中定义了日志级别、输出目的地(Appender)和布局(Layout)。
22 0