Azure Monitor 中 Log Analytics 代理的自定义日志数据源允许从 Windows 和 Linux 计算机上的文本文件中收集事件。 许多应用程序将信息记录到文本文件,而不是标准日志记录服务,例如 Windows 事件日志或 Syslog。 收集数据后,可以将数据分析为查询中的单个字段,或在收集期间将其提取到单个字段。
重要
本文介绍如何使用 Log Analytics 代理收集文本日志。 如果使用 Azure Monitor 代理,请参阅 使用 Azure Monitor 代理收集文本日志。
重要
自 2024 年 8 月 31 日起,旧版 Log Analytics 代理已弃用。 Microsoft将不再为 Log Analytics 代理提供任何支持。 如果使用 Log Analytics 代理将数据引入 Azure Monitor,请立即迁移到 Azure Monitor 代理。
要收集的日志文件必须符合以下条件:
日志每行必须有一个条目,或者在每个条目开始时使用以下格式之一的时间戳:
YYYY-MM-DD HH:MM:SS
M/D/YYYY HH:MM:SS AM/PM
Mon DD、YYYY HH:MM:SS
yyMMdd HH:mm:ss
ddMMyy HH:mm:ss
MMM d hh:mm:ss
dd/MMM/yyyy:HH:mm:ss zzz
yyyy-MM-ddTHH:mm:ssK日志文件不得允许循环日志记录。 此行为是日志轮换,其中文件被新条目覆盖,或者重命名该文件,并重复使用同一文件名进行持续日志记录。
日志文件必须使用 ASCII 或 UTF-8 编码。 不支持其他格式,如 UTF-16。
对于 Linux,日志中的时间戳不支持时区转换。
最佳做法是,日志文件应包含创建的日期和时间,以防止日志轮换覆盖或重命名。
注释
如果日志文件中存在重复条目,Azure Monitor 将收集它们。 生成的查询结果将不一致。 筛选器结果将显示的事件数多于结果计数。 必须验证日志,以确定创建日志的应用程序是否导致此行为。 在创建自定义日志收集定义之前,如果可能,请解决此问题。
Log Analytics 工作区支持以下限制:
- 只能创建 500 个自定义日志。
- 表最多支持 500 列。
- 列名的最大字符数为 500。
重要
应用程序写入日志文件时,自定义日志收集要求其定期将日志内容写入磁盘。 这是因为自定义日志收集依赖于要跟踪的日志文件的文件系统更改通知。
定义自定义日志表
使用以下过程定义自定义日志表。 滚动到本文末尾,了解添加自定义日志的示例。
打开自定义日志向导
自定义日志向导在 Azure 门户中运行,并允许定义要收集的新自定义日志。
在 Azure 门户中,选择Log Analytics 工作区,然后选择您的工作区>>。
选择“创建”,然后选择“新建自定义日志”(基于 MMA)。
默认情况下,所有配置更改都会自动推送到所有代理。 对于 Linux 代理,配置文件将发送到 Fluentd 数据收集器。
上传和分析示例日志
若要开始,请上传自定义日志的示例。 向导将分析并显示此文件中的条目供你验证。 Azure Monitor 将使用指定的分隔符来标识每个记录。
New Line 是默认分隔符,用于每行具有单个条目的日志文件。 如果行以一种可用格式的日期和时间开头,则可以指定 时间戳 分隔符,该分隔符支持跨多个行的条目。
如果使用时间戳分隔符,则 Azure Monitor 中存储的每个记录的 TimeGenerated 属性将填充日志文件中为该条目指定的日期和时间。 如果存在新的行分隔符,TimeGenerated 将填充为 Azure Monitor 收集条目时的日期和时间。
选择 “浏览 ”并浏览到示例文件。 此按钮可能在某些浏览器中标记为 “选择文件 ”。
选择“下一步”。
自定义日志向导上传文件并列出它标识的记录。
更改用于标识新记录的分隔符。 选择最能标识日志文件中的记录的分隔符。
选择“下一步”。
添加日志收集路径
必须在代理上定义一个或多个路径,可在其中找到自定义日志。 可以为日志文件提供特定的路径和名称,也可以为该名称指定具有通配符的路径。 此步骤支持每天或一个文件达到特定大小时创建新文件的应用程序。 还可以为单个日志文件提供多个路径。
例如,应用程序可能每天创建一个日志文件,其中包含名称中的日期,如 log20100316.txt中所示。 此类日志的模式可能是 log*.txt,该模式适用于应用程序命名方案后的任何日志文件。
下表提供了用于指定不同日志文件的有效模式的示例。
| Description | 路径 |
|---|---|
| 在 Windows 代理上具有 .txt 扩展名的 C:\Logs 中的所有文件 | C:\Logs\*.txt |
| C:\Logs 中所有在 Windows 代理上名称以 log 开头并具有 .txt 扩展名的文件 | C:\Logs\log*.txt |
| Linux 代理上具有 .txt 扩展名的 /var/log/audit 中的所有文件 | /var/log/audit/*.txt |
| /var/log/audit 中所有以 log 开头且 .txt 扩展名的文件,在 Linux 代理上。 | /var/log/audit/log*.txt |
- 选择 Windows 或 Linux 以指定要添加的路径格式。
- 输入路径并选择 + 按钮。
- 对任何其他路径重复此过程。
提供日志的名称和说明
指定的名称将用于日志类型,如前所述。 它始终以_CL结束,以将其区分为自定义日志。
- 输入日志的名称。 会自动提供 _CL 后缀。
- 添加可选 说明。
- 选择 “下一步 ”保存自定义日志定义。
验证是否正在收集自定义日志
可能需要长达一小时才能在 Azure Monitor 中显示来自新自定义日志的初始数据。 Azure Monitor 将从您定义自定义日志的时间点开始收集位于您指定路径中的日志条目。 它不会保留在自定义日志创建过程中上传的条目。 它将收集它找到的日志文件中已有的条目。
Azure Monitor 开始从自定义日志收集数据后,其记录将可以通过日志查询进行访问。 在查询中使用您为自定义日志指定的名称作为 Type。
注释
如果查询中缺少 RawData 属性,则可能需要关闭并重新打开浏览器。
分析自定义日志条目
整个日志条目将存储在名为 RawData 的单个属性中。 你可能希望将每个条目中的不同信息拆分为每个记录的单独属性。 有关将 RawData 分析为多个属性的选项,请参阅 Azure Monitor 中的分析文本数据。
删除自定义日志表
请参阅 “删除表”。
数据收集
Azure Monitor 大约每 5 分钟从每个自定义日志收集新条目。 代理在它收集的每个日志文件中记录自己的位置。 如果代理在一段时间内处于脱机状态,Azure Monitor 会从上次离开的位置收集条目,即使这些条目是在代理脱机时创建的。
日志条目的全部内容将写入名为 RawData 的单个属性。 有关将每个导入的日志条目分析到多个属性的方法,请参阅 Azure Monitor 中的分析文本数据。
自定义日志记录属性
自定义日志记录具有你提供的日志名称的类型以及下表中的属性。
| 资产 | Description |
|---|---|
| TimeGenerated | Azure Monitor 收集记录的日期和时间。 如果日志使用基于时间的分隔符,则这是从条目中收集的时间。 |
| SourceSystem | 从中收集记录的代理类型。 OpsManager – Windows 代理,可以直接连接或通过 System Center Operations Manager 进行连接 Linux – 所有 Linux 代理 |
| RawData | 收集的条目的全文。 你很可能希望 将此数据分析为单个属性。 |
| 管理组名称 | System Center Operations Manager 代理的管理组名称。 对于其他代理,此名称为 AOI-<工作区 ID>。 |
添加自定义日志的示例演练
以下部分将演练创建自定义日志的示例。 所收集的示例日志在每个行上都有一个条目,从日期和时间开始,然后为代码、状态和消息使用逗号分隔的字段。 显示了多个示例条目。
2019-08-27 01:34:36 207,Success,Client 05a26a97-272a-4bc9-8f64-269d154b0e39 connected
2019-08-27 01:33:33 208,Warning,Client ec53d95c-1c88-41ae-8174-92104212de5d disconnected
2019-08-27 01:35:44 209,Success,Transaction 10d65890-b003-48f8-9cfc-9c74b51189c8 succeeded
2019-08-27 01:38:22 302,Error,Application could not connect to database
2019-08-27 01:31:34 303,Error,Application lost connection to database
上传和分析示例日志
我们提供其中一个日志文件,并可以查看要收集的事件。 在这种情况下, 新行 是一个足够的分隔符。 不过,如果日志中的单个条目可以跨越多行,则需要使用时间戳分隔符。
添加日志收集路径
日志文件将位于 C:\MyApp\Logs 中。 每天将创建一个新文件,其中包含模式 appYYYYMMDD.log中的日期的名称。 此日志的足够模式为 C:\MyApp\Logs\*.log。
提供日志的名称和说明
我们使用 MyApp_CL 的名称并在 说明中键入。
验证是否正在收集自定义日志
我们使用 MyApp_CL 的简单查询从收集的日志中返回所有记录。
自定义日志的替代项
如果数据符合列出的条件,则自定义日志非常有用,但在某些情况下需要另一种策略:
- 数据不适合所需的结构,例如采用不同格式的时间戳。
- 日志文件不符合文件编码或不支持的文件夹结构等要求。
- 在收集之前,数据需要预处理或筛选。
如果无法使用自定义日志收集数据,请考虑以下备用策略:
- 使用自定义脚本或其他方法将数据写入 Azure Monitor 收集的 Windows 事件 或 Syslog。
- 使用 HTTP 数据收集器 API 将数据直接发送到 Azure Monitor。
后续步骤
- 有关将每个导入的日志条目分析到多个属性的方法,请参阅 Azure Monitor 中的分析文本数据 。
- 了解 日志查询 ,以分析从数据源和解决方案收集的数据。