在 Azure Monitor 中使用 Log Analytics 代理收集文本日志

使用 Azure Monitor 中 Log Analytics 代理的自定义日志数据源可以从 Windows 和 Linux 计算机上的文本文件中收集事件。 许多应用程序将信息记录到文本文件,而不是标准日志记录服务(例如 Windows 事件日志或 Syslog)。 在收集数据后,可以将数据分析到查询中的各个字段,或者在收集期间将数据提取到各个字段。

重要

本文介绍如何使用 Log Analytics 代理收集文本日志。 如果使用 Azure Monitor 代理,请参阅使用 Azure Monitor 代理收集文本日志

重要

旧版 Log Analytics 代理将于 2024 年 8 月弃用。 在此日期之后,Azure 将不再为 Log Analytics 代理提供任何支持。 请在 2024 年 8 月之前迁移到 Azure Monitor 代理,这样才能继续引入数据。

Diagram that shows custom log collection.

要收集的日志文件必须符合以下条件:

  • 每行日志必须有单个条目,或在每个条目的开头使用时间戳,时间戳可匹配以下任一种格式:

    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 门户中运行,使用它可以定义要收集的新自定义日志。

  1. 在 Azure 门户中,选择“Log Analytics 工作区”> 你的工作区 >“”。

  2. 选择“创建”,然后选择“新的自定义日志(基于 MMA)”。

    默认情况下,所有配置更改均会自动推送到所有代理。 对于 Linux 代理,配置文件会发送到 Fluentd 数据收集器。

上载和分析示例日志

若要开始,请上传自定义日志示例。 该向导将分析并显示此文件中的条目,以便进行验证。 Azure Monitor 将使用指定的分隔符标识每个记录。

“换行” 是默认分隔符,用于每行包含单个条目的日志文件。 如果行以日期和时间开头且格式符合要求,则可以指定“时间戳”分隔符,它可支持跨多行的条目。

如果使用时间戳分隔符,则存储在 Azure Monitor 中的每个记录的 TimeGenerated 属性将填充在日志文件中为该条目指定的日期和时间。 如果使用换行分隔符,则 TimeGenerated 将填充为 Azure Monitor 收集此条目的日期和时间。

  1. 选择“浏览”并浏览到示例文件。 此按钮在某些浏览器中可能标记为“选择文件”。

  2. 选择“下一步”。

    自定义日志向导将上传文件,并列出其标识的记录。

  3. 更改用于标识新记录的分隔符。 根据日志文件中的记录,选择标识效果最好的分隔符。

  4. 选择“下一步”。

添加日志集合路径

必须在可查找自定义日志的代理上定义一个或多个路径; 可以提供日志文件的特定路径和名称,也可以使用通配符为名称指定路径。 此步骤支持每天创建新文件,或者在某个文件达到一定大小时创建新文件的应用程序。 还可以为单个日志文件提供多个路径。

例如,应用程序可能会每天创建日志文件,将日期包括在如 log20100316.txt 的名称中。 此类日志的模式可能是 log*.txt,它将按照应用程序命名方案应用于任何日志文件。

下表提供了有效模式示例,用来指定不同的日志文件。

说明 路径
Windows 代理上的 C:\Logs 中带 .txt 扩展名的所有文件 C:\Logs\*.txt
Windows 代理上的 C:\Logs 中具有以 log 开头的名称和 .txt 扩展名的所有文件 C:\Logs\log*.txt
Linux 代理上的 /var/log/audit 中带 .txt 扩展名的所有文件 /var/log/audit/*.txt
Linux 代理上的 /var/log/audit 中名称以 log 开头并带 .txt 扩展名的所有文件 /var/log/audit/log*.txt
  1. 选择 Windows 或 Linux,指定正在添加的路径格式。
  2. 输入路径并选择 + 按钮。
  3. 对其他任何路径重复该过程。

提供日志名称及描述

指定的名称用于日志类型,如上所述。 它将始终以 _CL 结尾,以将其与自定义日志区分开来。

  1. 输入日志的名称。 系统会自动提供 _CL 后缀。
  2. 添加可选“说明” 。
  3. 选择“下一步”,保存自定义日志定义。

验证是否正在收集自定义日志

新自定义日志的初始数据可能需要一个小时才能在 Azure Monitor 中出现。 Azure Monitor 将从指定路径的日志中,收集在自定义日志的定义时间之后生成的条目。 它不会保留在自定义日志创建过程中上传的条目。 它会收集所找到的日志文件中的现有条目。

Azure Monitor 开始从自定义日志收集后,它的记录将可用于日志查询。 将为自定义日志指定的名称用作查询中的类型

注意

如果查询中缺少 RawData 属性,则可能需要关闭并重新打开浏览器。

分析自定义日志条目

全部日志条目将存储在名为 RawData 的单个属性中。 你很可能希望将每个条目中信息的不同部分分离到每条记录的各个属性中。 有关用于将 RawData 分析到多个属性中的选项,请参阅在 Azure Monitor 中分析文本数据

删除自定义日志表

请参阅删除表

数据收集

Azure Monitor 大概每隔 5 分钟就会从每个自定义日志中收集新条目。 代理会在从中进行收集的每个日志文件中记录其位置。 如果代理在一段时间内处于脱机状态,则 Azure Monitor 会从其上次脱机的位置收集条目,即使这些条目是在代理脱机期间创建的。

日志条目的全部内容写入到名为 RawData 的单个属性中。 有关用于将每个导入的日志条目分析到多个属性中的方法,请参阅在 Azure Monitor 中分析文本数据

自定义日志记录属性

自定义日志记录的类型与提供的日志名称一致,且具有下表中的属性。

properties 说明
TimeGenerated Azure Monitor 收集该记录时的日期和时间。 如果日志使用基于时间的分隔符,则此时间是从条目中收集的时间。
SourceSystem 从中收集记录的代理类型。
OpsManager - Windows 代理,直接连接或 System Center Operations Manager
Linux - 所有 Linux 代理
RawData 收集的条目的完整文本。 你很可能希望将此数据分析到各个属性中
ManagementGroupName 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

上载和分析示例日志

我们提供其中一个日志文件,然后可以看到它将收集的事件。 在这种情况下,换行是有效的分隔符。 如果日志中的单个条目跨过多行,则需要使用时间戳分隔符。

Screenshot that shows uploading and parsing a sample log.

添加日志集合路径

日志文件位于 C:\MyApp\Logs。 每天将创建一个新文件,名称为包括日期的 appYYYYMMDD.log 模式。 此日志的有效模式是 C:\MyApp\Logs\*.log。

Screenshot that shows adding a log collection path.

提供日志名称及描述

我们使用 名称“MyApp_CL”,然后键入“说明” 。

Screenshot that shows adding a log name.

验证是否正在收集自定义日志

我们使用简单的查询 MyApp_CL 来从收集的日志中返回所有记录。

Screenshot that shows a log query with no custom fields.

自定义日志的替代方法

虽然在数据符合所列条件的情况下自定义日志很有用,但在某些情况下需要其他策略:

  • 数据不符合所需的结构,如具有不同格式的时间戳。
  • 日志文件不符合要求,如文件编码或不受支持的文件夹结构。
  • 集合之前需要对数据进行预处理或筛选。

在不能使用自定义日志收集数据的情况下,请考虑下列备用策略:

后续步骤