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

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介:

本节书摘来华章计算机《日志管理与分析权威指南》一书中的第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日志并进行多维度分析。
相关文章
|
13天前
|
Kubernetes Ubuntu Windows
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)
|
5天前
|
存储 监控 数据可视化
SLS 虽然不是直接使用 OSS 作为底层存储,但它凭借自身独特的存储架构和功能,为用户提供了一种专业、高效的日志服务解决方案。
【9月更文挑战第2天】SLS 虽然不是直接使用 OSS 作为底层存储,但它凭借自身独特的存储架构和功能,为用户提供了一种专业、高效的日志服务解决方案。
34 9
|
14天前
|
存储 分布式计算 大数据
【Flume的大数据之旅】探索Flume如何成为大数据分析的得力助手,从日志收集到实时处理一网打尽!
【8月更文挑战第24天】Apache Flume是一款高效可靠的数据收集系统,专为Hadoop环境设计。它能在数据产生端与分析/存储端间搭建桥梁,适用于日志收集、数据集成、实时处理及数据备份等多种场景。通过监控不同来源的日志文件并将数据标准化后传输至Hadoop等平台,Flume支持了性能监控、数据分析等多种需求。此外,它还能与Apache Storm或Flink等实时处理框架集成,实现数据的即时分析。下面展示了一个简单的Flume配置示例,说明如何将日志数据导入HDFS进行存储。总之,Flume凭借其灵活性和强大的集成能力,在大数据处理流程中占据了重要地位。
31 3
|
14天前
|
开发框架 .NET Docker
【Azure 应用服务】App Service .NET Core项目在Program.cs中自定义添加的logger.LogInformation,部署到App Service上后日志不显示Log Stream中的问题
【Azure 应用服务】App Service .NET Core项目在Program.cs中自定义添加的logger.LogInformation,部署到App Service上后日志不显示Log Stream中的问题
|
7天前
|
API C# 开发框架
WPF与Web服务集成大揭秘:手把手教你调用RESTful API,客户端与服务器端优劣对比全解析!
【8月更文挑战第31天】在现代软件开发中,WPF 和 Web 服务各具特色。WPF 以其出色的界面展示能力受到欢迎,而 Web 服务则凭借跨平台和易维护性在互联网应用中占有一席之地。本文探讨了 WPF 如何通过 HttpClient 类调用 RESTful API,并展示了基于 ASP.NET Core 的 Web 服务如何实现同样的功能。通过对比分析,揭示了两者各自的优缺点:WPF 客户端直接处理数据,减轻服务器负担,但需处理网络异常;Web 服务则能利用服务器端功能如缓存和权限验证,但可能增加服务器负载。希望本文能帮助开发者根据具体需求选择合适的技术方案。
29 0
|
7天前
|
C# Windows 监控
WPF应用跨界成长秘籍:深度揭秘如何与Windows服务完美交互,扩展功能无界限!
【8月更文挑战第31天】WPF(Windows Presentation Foundation)是 .NET 框架下的图形界面技术,具有丰富的界面设计和灵活的客户端功能。在某些场景下,WPF 应用需与 Windows 服务交互以实现后台任务处理、系统监控等功能。本文探讨了两者交互的方法,并通过示例代码展示了如何扩展 WPF 应用的功能。首先介绍了 Windows 服务的基础知识,然后阐述了创建 Windows 服务、设计通信接口及 WPF 客户端调用服务的具体步骤。通过合理的交互设计,WPF 应用可获得更强的后台处理能力和系统级操作权限,提升应用的整体性能。
21 0
|
9天前
|
存储 消息中间件 监控
Java日志详解:日志级别,优先级、配置文件、常见日志管理系统ELK、日志收集分析
Java日志详解:日志级别,优先级、配置文件、常见日志管理系统、日志收集分析。日志级别从小到大的关系(优先级从低到高): ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF 低级别的会输出高级别的信息,高级别的不会输出低级别的信息
|
10天前
|
算法 关系型数据库 程序员
第一周算法设计与分析:A : log2(N)
这篇文章介绍了解决算法问题"输入一个数N,输出log2N(向下取整)"的三种编程思路,包括使用对数函数和幂函数的转换方法,以及避免浮点数精度问题的整数逼近方法。
|
13天前
|
存储
【Azure Log A workspace】Azure上很多应用日志收集到Log A workspace后如何来分别各自的占比呢?
【Azure Log A workspace】Azure上很多应用日志收集到Log A workspace后如何来分别各自的占比呢?
|
13天前
|
API
【Azure 应用服务】当在Azure App Service的门户上 Log Stream 日志无输出,需要如何操作让其输出Application Logs呢?
【Azure 应用服务】当在Azure App Service的门户上 Log Stream 日志无输出,需要如何操作让其输出Application Logs呢?
下一篇
DDNS