源声明 - 适用于 Microsoft Windows 的 Amazon Kinesis 代理

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

源声明

在适用于微软 Windows 的 Amazon Kinesis 代理程序中,源声明描述应该在何处收集哪些日志、事件和指标数据。它们还可以选择性地指定用于解析数据的信息,以便对数据进行转换。以下部分介绍了针对 Windows 的 Kinesis 代理中可用的内置源类型的配置。由于 Windows 的 Kinesis 代理是可扩展的,因此,您可以添加自定义源类型。每种源类型通常都需要配置对象中与该源类型相关的特定键/值对。

所有源声明都必须至少包含以下键/值对:

Id

一个唯一字符串,用于标识配置文件中的特定源对象。

SourceType

此源对象的源类型的名称。源类型指定此源对象正在收集的日志、事件或指标数据的来源。它还控制可声明源的其他方面。

有关使用不同类型的源声明的完整配置文件的示例,请参阅从不同源流式传输到 Kinesis Data Streams

DirectorySource 配置

Overview

DirectorySource 源类型从存储在指定目录中的文件收集日志。由于日志文件有许多不同的格式,因此,DirectorySource 声明允许您指定日志文件中数据的格式。然后,您可以将日志内容转换为标准格式(如 JSON 或 XML),然后再将该内容流式传输到各种 AWS 服务。

以下是示例 DirectorySource 声明:

{ "Id": "myLog", "SourceType": "DirectorySource", "Directory": "C:\\Program Data\\MyCompany\\MyService\\logs", "FileNameFilter": "*.log", "IncludeSubdirectories": true, "IncludeDirectoryFilter": "cpu\\cpu-1;cpu\\cpu-2;load;memory", "RecordParser": "Timestamp", "TimestampFormat": "yyyy-MM-dd HH:mm:ss.ffff", "Pattern": "\\d{4}-\\d{2}-\\d(2}", "ExtractionPattern": "", "TimeZoneKind": "UTC", "SkipLines": 0, "Encoding": "utf-16", "ExtractionRegexOptions": "Multiline" }

所有 DirectorySource 声明都可以提供以下键/值对:

SourceType

必须是文本字符串 "DirectorySource"(必需)。

Directory

包含日志文件的目录的路径(必需)。

FileNameFilter

(可选)根据通配符文件命名模式限制从中收集日志数据的目录中的文件集。如果您有多个日志文件名模式,则此功能允许您使用单个DirectorySource,如以下示例所示。

FileNameFilter: "*.log|*.txt"

系统管理员有时会在归档日志文件之前压缩日志文件。如果您指定"*.*"FileNameFilter,已知的压缩文件现在将被排除。此功能可防止.zip.gz, 和.bz2文件被意外流式传输。如果未指定此键/值对,则默认情况下会收集目录中所有文件中的数据。

IncludeSubdirectories

指定将子目录监视到受操作系统限制的任意深度。此功能对于监控具有多个网站的 Web 服务器非常有用。您也可以使用IncludeDirectoryFilter属性以仅监视过滤器中指定的某些子目录。

RecordParser

指定 DirectorySource 源类型应如何解析在指定目录中找到的日志文件。此键/值对是必需的,有效值如下所示:

  • SingleLine— 日志文件的每一行都是一条日志记录。

  • SingleLineJson— 日志文件的每一行都是一条 JSON 格式的日志记录。当您想使用对象修饰向 JSON 添加其他键/值对时,此解析程序非常有用。有关更多信息,请参阅 配置接收器修饰。有关使用 SingleLineJson 记录解析程序的示例,请参阅教程:使用适用于 Windows 的 Kinesis 代理将 JSON 日志文件流式传输到 Amazon S3

  • Timestamp— 一行或多行可以包含一条日志记录。日志记录的开头为时间戳。此选项要求指定 TimestampFormat 键/值对。

  • Regex— 每条记录都以匹配特定正则表达式的文本开头。此选项要求指定 Pattern 键/值对。

  • SysLog— 指示日志文件写入syslog标准格式。根据该规范将日志文件解析为记录。

  • Delimited— 一个更简单的 Regex 记录解析程序版本,其中日志记录中的数据项由一致的分隔符分隔。此选项比 Regex 解析程序更容易使用且执行速度更快,当此选项可用时,它是首选。在使用此选项时,您必须指定 Delimiter 键/值对。

TimestampField

指定哪个 JSON 字段包含记录的时间戳。它仅可与 SingleLineJson RecordParser 结合使用。键/值对是可选的。如果未指定此项,Windows 的 Kinesis 代理使用读取记录的时间作为时间戳。指定此键/值对的一个优点是,由 Windows 的 Kinesis 代理生成的延迟统计信息更准确。

TimestampFormat

指定如何解析与记录关联的日期和时间。该值可以是字符串 epoch 或 .NET 日期/时间格式字符串。如果值为 epoch,则根据 UNIX 纪元时间来解析时间。有关 UNIX 纪元时间的更多信息,请参阅 Unix 时间。有关 .NET 日期/时间格式字符串的更多信息,请参阅 Microsoft .NET 文档中的自定义日期和时间格式字符串。此键/值对仅在以下情况下是必需的:指定了 Timestamp 记录解析程序或将 SingleLineJson 记录解析程序与 TimestampField 键/值对一起指定。

Pattern

指定必须与可能的多行记录的第一行匹配的正则表达式。此键/值对仅对于 Regex 记录解析程序是必需的。

ExtractionPattern

指定应使用命名组的正则表达式。使用此正则表达式解析记录,并且命名组构成已解析记录的字段。然后,这些字段将用作构建 JSON 或 XML 对象或文档的基础,这些对象或文档随后由接收器流式传输到各种 AWS 服务。键/值对是可选的,并且可用于Regex记录解析器和时间戳解析器。

Timestamp 组名称经过特殊处理,因为它向 Regex 解析程序指示哪个字段包含每个日志文件中每条记录的日期和时间。

Delimiter

指定分隔每条日志记录中每个项目的字符或字符串。此键/值对必须(且只能)用于 Delimited 记录解析程序。使用双字符序列 \t 表示制表符。

HeaderPattern

指定用于匹配日志文件中包含记录标头集的行的正则表达式。如果日志文件不包含任何标头信息,请使用 Headers 键/值对指定隐式标题。HeaderPattern 键/值对是可选的,并且仅对 Delimited 记录解析程序有效。

注意

列的空(0 长度)标头条目导致从 DirectorySource 解析输出的最终输出中筛选出该列的数据。

Headers

指定使用指定分隔符解析的数据列的名称。此键/值对是可选的,并且仅对 Delimited 记录解析程序有效。

注意

列的空(0 长度)标头条目导致从 DirectorySource 解析输出的最终输出中筛选出该列的数据。

RecordPattern

指定标识日志文件中包含记录数据的行的正则表达式。除了 HeaderPattern 标识的可选标题行之外,在记录处理期间将忽略与指定的 RecordPattern 不匹配的行。此键/值对是可选的,并且仅对 Delimited 记录解析程序有效。如果未提供此项,则默认情况下将任何与可选 HeaderPattern 或可选 CommentPattern 不匹配的行视为包含可解析记录数据的行。

CommentPattern

指定一个正则表达式,该表达式标识在解析日志文件中的数据之前应排除的日志文件中的行。此键/值对是可选的,并且仅对 Delimited 记录解析程序有效。如果未提供此项,则默认情况下将任何与可选 HeaderPattern 不匹配的行视为包含可解析记录数据的行,除非指定了 RecordPattern

TimeZoneKind

指定是应在本地时区还是 UTC 时区中考虑日志文件中的时间戳。这是可选的,默认值为 UTC。此键/值对的唯一有效值为 LocalUTC。如果未指定 TimeZoneKind 或值为 UTC,则绝不会更改时间戳。时间戳将转换为 UTC 时TimeZoneKind值为Local,接收时间戳的接收器为 CloudWatch Logs,或将解析后的记录发送到其他接收器。不会转换消息中嵌入的日期和时间。

SkipLines

在指定此项时,控制在记录解析发生之前在每个日志文件的开头忽略的行数。这是可选的,默认值为 0。

编码

默认情况下,Windows 的 Kinesis 代理可以自动检测从字节标记的编码。但是,自动编码可能无法在某些较旧的 unicode 格式上正常工作。以下示例指定流式传输 Microsoft SQL Server 日志所需的编码。

"Encoding": "utf-16"

有关编码名称的列表,请参阅编码列表在微软 .NET 文档中。

提取正则表达式选项

您可以使用ExtractionRegexOptions来简化正则表达式。键/值对是可选的。默认为 "None"

以下示例指定"."表达式匹配任何字符,包括\r\n

"ExtractionRegexOptions" = "Multiline"

有关提取正则表达式选项的可能字段的列表,请参阅正则表达式选项枚举在微软 .NET 文档中。

Regex 记录解析程序

您可以将 Regex 记录解析程序与 TimestampFormatPatternExtractionPattern 键/值对结合使用来解析非结构化文本日志。例如,假设您的日志文件如下所示:

[FATAL][2017/05/03 21:31:00.534][0x00003ca8][0000059c][][ActivationSubSystem][GetActivationForSystemID][0] 'ActivationException.File: EQCASLicensingSubSystem.cpp' [FATAL][2017/05/03 21:31:00.535][0x00003ca8][0000059c][][ActivationSubSystem][GetActivationForSystemID][0] 'ActivationException.Line: 3999'

您可以为 Pattern 键/值对指定以下正则表达式,以帮助将日志文件分解为单条日志记录:

^\[\w+\]\[(?<TimeStamp>\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}\.\d{3})\]

此正则表达式匹配以下序列:

  1. 要评估的字符串的开头。

  2. 由方括号括起的一个或多个单词字符。

  3. 由方括号括起的时间戳。时间戳匹配以下序列:

    1. 四位数年份

    2. 正斜杠

    3. 两位数月份

    4. 正斜杠

    5. 两位数日期

    6. 空格字符

    7. 两位数小时

    8. 冒号

    9. 两位数分钟

    10. 冒号

    11. 两位数秒

    12. 句点

    13. 三位数毫秒

您可以为 TimestampFormat 键/值对指定以下格式,以将文本时间戳转换为日期和时间:

yyyy/MM/dd HH:mm:ss.fff

您可以使用以下正则表达式通过 ExtractionPattern 键/值对提取日志记录的字段。

^\[(?<Severity>\w+)\]\[(?<TimeStamp>\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}\.\d{3})\]\[[^]]*\]\[[^]]*\]\[[^]]*\]\[(?<SubSystem>\w+)\]\[(?<Module>\w+)\]\[[^]]*\] '(?<Message>.*)'$

此正则表达式匹配序列中的以下组:

  1. Severity— 用方括号括起的一个或多个单词字符。

  2. TimeStamp— 参阅时间戳的上一描述。

  3. 跳过三个包含 0 个或多个字符的用方括号括起的未命名序列。

  4. SubSystem— 用方括号括起的一个或多个单词字符。

  5. Module— 用方括号括起的一个或多个单词字符。

  6. 跳过一个包含 0 个或多个字符的用方括号括起的未命名序列。

  7. 跳过一个未指定空格。

  8. Message— 用单引号括起的 0 个或多个字符。

以下源声明将这些正则表达式和日期时间格式组合在一起,为 Windows 的 Kinesis 代理提供了有关解析此类日志文件的完整说明。

{ "Id": "PrintLog", "SourceType": "DirectorySource", "Directory": "C:\\temp\\PrintLogTest", "FileNameFilter": "*.log", "RecordParser": "Regex", "TimestampFormat": "yyyy/MM/dd HH:mm:ss.fff", "Pattern": "^\\[\\w+\\]\\[(?<TimeStamp>\\d{4}/\\d{2}/\\d{2} \\d{2}:\\d{2}:\\d{2}\\.\\d{3})\\]", "ExtractionPattern": "^\\[(?<Severity>\\w+)\\]\\[(?<TimeStamp>\\d{4}/\\d{2}/\\d{2} \\d{2}:\\d{2}:\\d{2}\\.\\d{3})\\]\\[[^]]*\\]\\[[^]]*\\]\\[[^]]*\\]\\[(?<SubSystem>\\w+)\\]\\[(?<Module>\\w+)\\]\\[[^]]*\\] '(?<Message>.*)'$", "TimeZoneKind": "UTC" }
注意

必须使用额外的反斜杠对 JSON 格式的文件中的反斜杠进行转义。

有关正则表达式的更多信息,请参阅 Microsoft .NET 文档中的正则表达式语言 – 快速参考

Delimited 记录解析程序

您可以使用 Delimited 记录解析程序来解析半结构化日志和数据文件,其中存在一致的字符序列,用于分隔每行数据中的每列数据。例如,CSV 文件使用逗号分隔每列数据,TSV 文件使用选项卡。

假设您要解析由网络策略服务器生成的 Microsoft NPS 数据库格式的日志文件。此类文件可能如下所示:

"NPS-MASTER","IAS",03/22/2018,23:07:55,1,"user1","Domain1\user1",,,,,,,,0,"192.168.86.137","Nate - Test 1",,,,,,,1,,0,"311 1 192.168.0.213 03/15/2018 08:14:29 1",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"Use Windows authentication for all users",1,,,, "NPS-MASTER","IAS",03/22/2018,23:07:55,3,,"Domain1\user1",,,,,,,,0,"192.168.86.137","Nate - Test 1",,,,,,,1,,16,"311 1 192.168.0.213 03/15/2018 08:14:29 1",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"Use Windows authentication for all users",1,,,,

以下示例 appsettings.json 配置文件包含一个 DirectorySource 声明,该声明使用 Delimited 记录解析程序来将此文本解析为对象表示形式。然后,它将 JSON 格式的数据流式传输到 Kinesis Data Firehose:

{ "Sources": [ { "Id": "NPS", "SourceType": "DirectorySource", "Directory": "C:\\temp\\NPS", "FileNameFilter": "*.log", "RecordParser": "Delimited", "Delimiter": ",", "Headers": "ComputerName,ServiceName,Record-Date,Record-Time,Packet-Type,User-Name,Fully-Qualified-Distinguished-Name,Called-Station-ID,Calling-Station-ID,Callback-Number,Framed-IP-Address,NAS-Identifier,NAS-IP-Address,NAS-Port,Client-Vendor,Client-IP-Address,Client-Friendly-Name,Event-Timestamp,Port-Limit,NAS-Port-Type,Connect-Info,Framed-Protocol,Service-Type,Authentication-Type,Policy-Name,Reason-Code,Class,Session-Timeout,Idle-Timeout,Termination-Action,EAP-Friendly-Name,Acct-Status-Type,Acct-Delay-Time,Acct-Input-Octets,Acct-Output-Octets,Acct-Session-Id,Acct-Authentic,Acct-Session-Time,Acct-Input-Packets,Acct-Output-Packets,Acct-Terminate-Cause,Acct-Multi-Ssn-ID,Acct-Link-Count,Acct-Interim-Interval,Tunnel-Type,Tunnel-Medium-Type,Tunnel-Client-Endpt,Tunnel-Server-Endpt,Acct-Tunnel-Conn,Tunnel-Pvt-Group-ID,Tunnel-Assignment-ID,Tunnel-Preference,MS-Acct-Auth-Type,MS-Acct-EAP-Type,MS-RAS-Version,MS-RAS-Vendor,MS-CHAP-Error,MS-CHAP-Domain,MS-MPPE-Encryption-Types,MS-MPPE-Encryption-Policy,Proxy-Policy-Name,Provider-Type,Provider-Name,Remote-Server-Address,MS-RAS-Client-Name,MS-RAS-Client-Version", "TimestampField": "{Record-Date} {Record-Time}", "TimestampFormat": "MM/dd/yyyy HH:mm:ss" } ], "Sinks": [ { "Id": "npslogtest", "SinkType": "KinesisFirehose", "Region": "us-west-2", "StreamName": "npslogtest", "Format": "json" } ], "Pipes": [ { "Id": "W3SVCLog1ToKinesisStream", "SourceRef": "NPS", "SinkRef": "npslogtest" } ] }

流式传输到 Kinesis 数据防火器的 JSON 格式的数据如下所示:

{ "ComputerName": "NPS-MASTER", "ServiceName": "IAS", "Record-Date": "03/22/2018", "Record-Time": "23:07:55", "Packet-Type": "1", "User-Name": "user1", "Fully-Qualified-Distinguished-Name": "Domain1\\user1", "Called-Station-ID": "", "Calling-Station-ID": "", "Callback-Number": "", "Framed-IP-Address": "", "NAS-Identifier": "", "NAS-IP-Address": "", "NAS-Port": "", "Client-Vendor": "0", "Client-IP-Address": "192.168.86.137", "Client-Friendly-Name": "Nate - Test 1", "Event-Timestamp": "", "Port-Limit": "", "NAS-Port-Type": "", "Connect-Info": "", "Framed-Protocol": "", "Service-Type": "", "Authentication-Type": "1", "Policy-Name": "", "Reason-Code": "0", "Class": "311 1 192.168.0.213 03/15/2018 08:14:29 1", "Session-Timeout": "", "Idle-Timeout": "", "Termination-Action": "", "EAP-Friendly-Name": "", "Acct-Status-Type": "", "Acct-Delay-Time": "", "Acct-Input-Octets": "", "Acct-Output-Octets": "", "Acct-Session-Id": "", "Acct-Authentic": "", "Acct-Session-Time": "", "Acct-Input-Packets": "", "Acct-Output-Packets": "", "Acct-Terminate-Cause": "", "Acct-Multi-Ssn-ID": "", "Acct-Link-Count": "", "Acct-Interim-Interval": "", "Tunnel-Type": "", "Tunnel-Medium-Type": "", "Tunnel-Client-Endpt": "", "Tunnel-Server-Endpt": "", "Acct-Tunnel-Conn": "", "Tunnel-Pvt-Group-ID": "", "Tunnel-Assignment-ID": "", "Tunnel-Preference": "", "MS-Acct-Auth-Type": "", "MS-Acct-EAP-Type": "", "MS-RAS-Version": "", "MS-RAS-Vendor": "", "MS-CHAP-Error": "", "MS-CHAP-Domain": "", "MS-MPPE-Encryption-Types": "", "MS-MPPE-Encryption-Policy": "", "Proxy-Policy-Name": "Use Windows authentication for all users", "Provider-Type": "1", "Provider-Name": "", "Remote-Server-Address": "", "MS-RAS-Client-Name": "", "MS-RAS-Client-Version": "" }

SysLog 记录解析程序

对于 SysLog 记录解析程序,源的解析输出包含以下信息:

属性 类型 描述
SysLogTimeStamp 字符串 syslog 格式的日志文件中的原始日期和时间。
Hostname 字符串 syslog 格式的日志文件所在的计算机的名称。
Program 字符串 生成日志文件的应用程序或服务的名称。
Message 字符串 应用程序或服务生成的日志消息。
TimeStamp 字符串 ISO 8601 格式的解析的日期和时间。

以下是转换为 JSON 的 SysLog 数据的示例:

{ "SysLogTimeStamp": "Jun 18 01:34:56", "Hostname": "myhost1.example.mydomain.com", "Program": "mymailservice:", "Message": "Info: ICID 123456789 close", "TimeStamp": "2017-06-18T01:34.56.000" }

Summary

以下是可用于 DirectorySource 源的键/值对以及与这些键/值对相关的 RecordParser 的摘要。

密钥名称 RecordParser 备注
SourceType 对于所有项是必需的 必须具有值 DirectorySource
Directory 对于所有项是必需的
FileNameFilter 对于所有项是可选的
RecordParser 对于所有项是必需的
TimestampField 对于 SingleLineJson 是可选的
TimestampFormat 对于 Timestamp 是必需的,对于 SingleLineJson 是可选的(如果指定 TimestampField
Pattern 对于 Regex 是必需的
ExtractionPattern 对于 Regex 是可选的 对于 Regex 是必需的(如果接收器指定 jsonxml 格式)
Delimiter 对于 Delimited 是必需的
HeaderPattern 对于 Delimited 是可选的
Headers 对于 Delimited 是可选的
RecordPattern 对于 Delimited 是可选的
CommentPattern 对于 Delimited 是可选的
TimeZoneKind 对于 RegexTimestampSysLogSingleLineJson 是可选的(如果标识时间戳字段)
SkipLines 对于所有项是可选的

ExchangeLogSource 配置

ExchangeLogSource 类型用于从 Microsoft Exchange 收集日志。Exchange 以多种不同的日志格式生成日志。此源类型解析所有这些日志。虽然可以将 DirectorySource 类型与 Regex 记录解析程序结合使用来解析日志,但使用 ExchangeLogSource 要简单得多。这是因为您不需要为日志文件格式设计和提供正则表达式。以下是示例 ExchangeLogSource 声明:

{ "Id": "MyExchangeLog", "SourceType": "ExchangeLogSource", "Directory": "C:\\temp\\ExchangeLogTest", "FileNameFilter": "*.log" }

所有交换声明都可以提供以下键/值对:

SourceType

必须是文本字符串 "ExchangeLogSource"(必需)。

Directory

包含日志文件的目录的路径(必需)。

FileNameFilter

(可选)根据通配符文件命名模式限制从中收集日志数据的目录中的文件集。如果未指定此键/值对,则默认情况下会收集目录中所有文件的日志数据。

TimestampField

包含记录的日期和时间的列的名称。此键/值对是可选的,如果字段名为 date-timeDateTime,则无需指定它。否则,它是必需的。

W3SVCLogSource 配置

W3SVCLogSource 类型用于从 Internet Information Services (IIS) for Windows 收集日志。

以下是示例 W3SVCLogSource 声明:

{ "Id": "MyW3SVCLog", "SourceType": "W3SVCLogSource", "Directory": "C:\\inetpub\\logs\\LogFiles\\W3SVC1", "FileNameFilter": "*.log" }

所有 W3SVCLogSource 声明都可以提供以下键/值对:

SourceType

必须是文本字符串 "W3SVCLogSource"(必需)。

Directory

包含日志文件的目录的路径(必需)。

FileNameFilter

(可选)根据通配符文件命名模式限制从中收集日志数据的目录中的文件集。如果未指定此键/值对,则默认情况下会收集目录中所有文件的日志数据。

UlsSource 配置

UlsSource 类型用于从 Microsoft SharePoint 收集日志。以下是示例 UlsSource 声明:

{ "Id": "UlsSource", "SourceType": "UlsSource", "Directory": "C:\\temp\\uls", "FileNameFilter": "*.log" }

所有 UlsSource 声明都可以提供以下键/值对:

SourceType

必须是文本字符串 "UlsSource"(必需)。

Directory

包含日志文件的目录的路径(必需)。

FileNameFilter

(可选)根据通配符文件命名模式限制从中收集日志数据的目录中的文件集。如果未指定此键/值对,则默认情况下会收集目录中所有文件的日志数据。

WindowsEventLogSource 配置

WindowsEventLogSource 类型用于从 Windows Event Log 服务收集事件。以下是示例 WindowsEventLogSource 声明:

{ "Id": "mySecurityLog", "SourceType": "WindowsEventLogSource", "LogName": "Security" }

所有 WindowsEventLogSource 声明都可以提供以下键/值对:

SourceType

必须是文本字符串 "WindowsEventLogSource"(必需)。

LogName

从指定日志收集事件。常见值包括 ApplicationSecuritySystem,但您可以指定任何有效的 Windows 事件日志名称。此键/值对是必需的。

Query

(可选)限制从 WindowsEventLogSource 输出的事件。如果未指定此键/值对,则默认情况下会输出所有事件。有关此值的语法的信息,请参阅 Windows 文档中的事件查询和事件 XML。有关日志级别定义的信息,请参阅 Windows 文档中的事件类型

IncludeEventData

当此键/值对的值为 "true" 时,(可选)启用与指定 Windows 事件日志中的事件关联的特定于提供程序的事件数据的收集和流式传输。仅包括可成功序列化的事件数据。此键/值对是可选的,如果未指定它,则不会收集特定于提供程序的事件数据。

注意

包含事件数据可能会显著增加从此源流式传输的数据量。事件的最大大小可以是 262143 字节(包括事件数据)。

WindowsEventLogSource 解析的输出包含以下信息:

属性 类型 描述
EventId Int 事件类型的标识符。
Description 字符串 描述事件详细信息的文本。
LevelDisplayName 字符串 事件类别(“错误”、“警告”、“信息”、“成功审核”、“失败审核”之一)。
LogName 字符串 记录事件的位置(典型值为 ApplicationSecuritySystem,但有很多可能性)。
MachineName 字符串 记录了事件的计算机。
ProviderName 字符串 记录了事件的应用程序或服务。
TimeCreated 字符串 事件发生(用 ISO 8601 格式)的时间。
Index Int 项在日志中的位置。
UserName 字符串 项的创建者(如果知道)。
Keywords 字符串 事件类型。标准值包括 AuditFailure(失败的安全审核事件)、AuditSuccess(成功的安全审核事件)、Classic(使用 RaiseEvent 函数引发的事件)、Correlation Hint(传输事件)、SQM(Service Quality Mechanism 事件)、WDI Context(Windows Diagnostic Infrastructure 上下文事件)和 WDI Diag(Windows Diagnostic Infrastructure 诊断事件)。
EventData 对象列表 有关日志事件的可选的特定于提供程序的额外数据。仅在 IncludeEventData 键/值对的值为 "true" 时包含此项。

以下是转换为 JSON 的示例事件:

{[ "EventId": 7036, "Description": "The Amazon SSM Agent service entered the stopped state.", "LevelDisplayName": "Informational", "LogName": "System", "MachineName": "mymachine.mycompany.com", "ProviderName": "Service Control Manager", "TimeCreated": "2017-10-04T16:42:53.8921205Z", "Index": 462335, "UserName": null, "Keywords": "Classic", "EventData": [ "Amazon SSM Agent", "stopped", "rPctBAMZFhYubF8zVLcrBd3bTTcNzHvY5Jc2Br0aMrxxx==" ]}

窗口七个日志轮询源配置

WindowsEventLogPollingSource使用基于轮询的机制从事件日志中收集与配置的参数匹配的所有新事件。根据上次轮询期间收集的事件数量,轮询间隔会在 100 ms 到 5000 ms 之间动态更新。以下是示例 WindowsEventLogPollingSource 声明:

{ "Id": "MySecurityLog", "SourceType": "WindowsEventLogPollingSource", "LogName": "Security", "IncludeEventData": "true", "Query": "", "CustomFilters": "ExcludeOwnSecurityEvents" }

所有 WindowsEventLogPollingSource 声明都可以提供以下键/值对:

SourceType

必须是文本字符串 "WindowsEventLogPollingSource"(必需)。

LogName

指定日志。有效选项为ApplicationSecuritySystem或其他有效日志。

IncludeEventData

可选。何时true,指定以 JSON 和 XML 的形式流式传输时包含额外的 EventData。默认为 false

Query

可选。Windows 事件日志支持使用 XPath 表达式查询事件,您可以使用Query。有关更多信息,请参阅 。事件查询和事件 XML在微软文档中。

CustomFilters

可选。用分号隔开的筛选器列表 (;)。可以指定以下筛选器。

ExcludeOwnSecurityEvents

排除 Windows 本身的 Kinesis 代理生成的安全事件。

WindowsETWEventSource 配置

WindowsETWEventSource 类型用于通过名为 Windows 事件跟踪 (ETW) 的功能来收集应用程序和服务事件跟踪。有关更多信息,请参阅 Windows 文档中的事件跟踪

以下是示例 WindowsETWEventSource 声明:

{ "Id": "ClrETWEventSource", "SourceType": "WindowsETWEventSource", "ProviderName": "Microsoft-Windows-DotNETRuntime", "TraceLevel": "Verbose", "MatchAnyKeyword": 32768 }

所有 WindowsETWEventSource 声明都可以提供以下键/值对:

SourceType

必须是文本字符串 "WindowsETWEventSource"(必需)。

ProviderName

指定用于收集跟踪事件的事件提供程序。这必须是已安装的提供程序的有效 ETW 提供程序名称。要确定安装了哪些提供程序,请在 Windows 命令提示符窗口中执行以下命令:

logman query providers
TraceLevel

指定应收集哪些类别的跟踪事件。允许的值包括 CriticalErrorWarningInformationalVerbose。确切含义取决于所选的 ETW 提供程序。

MatchAnyKeyword

该值是一个 64 位数,其中每个位代表一个单独的关键字。每个关键字都描述了要收集的事件类别。有关受支持的关键字及其值以及它们与 TraceLevel 的关联方式,请参阅该提供程序的文档。例如,有关 CLR ETW 提供程序的信息,请参阅 Microsoft .NET Framework 文档中的 CLR ETW 关键字和级别

在前面的示例中,32768 (0x00008000) 表示 CLR ETW 提供程序的 ExceptionKeyword,它指示提供程序收集有关引发的异常的信息。虽然 JSON 本身不支持十六进制常量,但您可以通过将它们放在一个字符串中为 MatchAnyKeyword 指定它们。您也可以指定多个常量(用逗号分隔)。例如,使用以下命令指定 ExceptionKeywordSecurityKeyword (0x00000400):

{ "Id": "MyClrETWEventSource", "SourceType": "WindowsETWEventSource", "ProviderName": "Microsoft-Windows-DotNETRuntime", "TraceLevel": "Verbose", "MatchAnyKeyword": "0x00008000, 0x00000400" }

为了确保为提供程序启用所有指定的关键字,使用 OR 组合多个关键字值并将其传递给该提供程序。

来自 WindowsETWEventSource 的输出包含每个事件的以下信息:

属性 类型 描述
EventName 字符串 发生的事件的类型。
ProviderName 字符串 检测到事件的提供程序。
FormattedMessage 字符串 事件的文本摘要。
ProcessID Int 报告了事件的过程。
ExecutingThreadID Int 报告了事件的过程中的线程。
MachineName 字符串 报告事件的桌面设备或服务器的名称。
Payload 哈希表 具有字符串键和任何类型的对象作为值的表。键是负载项名称,值是负载项的值。负载依赖于提供程序。

以下是转换为 JSON 的示例事件:

{ "EventName": "Exception/Start", "ProviderName": "Microsoft-Windows-DotNETRuntime", "FormattedMessage": "ExceptionType=System.Exception;\r\nExceptionMessage=Intentionally unhandled exception.;\r\nExceptionEIP=0x2ab0499;\r\nExceptionHRESULT=-2,146,233,088;\r\nExceptionFlags=CLSCompliant;\r\nClrInstanceID=9 ", "ProcessID": 3328, "ExecutingThreadID": 6172, "MachineName": "MyHost.MyCompany.com", "Payload": { "ExceptionType": "System.Exception", "ExceptionMessage": "Intentionally unhandled exception.", "ExceptionEIP": 44762265, "ExceptionHRESULT": -2146233088, "ExceptionFlags": 16, "ClrInstanceID": 9 } }

WindowsPerformanceCounterSource 配置

WindowsPerformanceCounterSource 类型从 Windows 中收集性能计数器指标。以下是示例 WindowsPerformanceCounterSource 声明:

{ "Id": "MyPerformanceCounter", "SourceType": "WindowsPerformanceCounterSource", "Categories": [{ "Category": "Server", "Counters": ["Files Open", "Logon Total", "Logon/sec", "Pool Nonpaged Bytes"] }, { "Category": "System", "Counters": ["Processes", "Processor Queue Length", "System Up Time"] }, { "Category": "LogicalDisk", "Instances": "*", "Counters": [ "% Free Space", "Avg. Disk Queue Length", { "Counter": "Disk Reads/sec", "Unit": "Count/Second" }, "Disk Writes/sec" ] }, { "Category": "Network Adapter", "Instances": "^Local Area Connection\* \d$", "Counters": ["Bytes Received/sec", "Bytes Sent/sec"] } ] }

所有 WindowsPerformanceCounterSource 声明都可以提供以下键/值对:

SourceType

必须是文本字符串 "WindowsPerformanceCounterSource"(必需)。

Categories

指定要从 Windows 中收集的一组性能计数器指标组。每个指标组都包含以下键/值对:

Category

指定要收集的指标的计数器集(必需)。

Instances

当每个对象都有一组唯一的性能计数器时,指定感兴趣的对象集。例如,当类别为 LogicalDisk 时,每个磁盘驱动器都有一组性能计数器。键/值对是可选的。您可以使用通配符 *? 匹配多个实例。要聚合所有实例的值,请指定 _Total

您还可以使用InstanceRegex,它接受包含*通配符作为实例名称的一部分。

Counters

指定要为指定类别收集的指标。此键/值对是必需的。您可以使用通配符 *? 匹配多个计数器。您可以仅使用名称或使用名称和单位来指定 Counters。如果未指定计数器单位,则 Windows 的 Kinesis 代理会尝试从名称推断单位。如果这些推理不正确,则可以明确指定单位。如果需要,您可以更改 Counter 名称。计数器的更复杂的表示形式是具有以下键/值对的对象:

Counter

计数器的名称。此键/值对是必需的。

Rename

要提供给接收器的计数器的名称。键/值对是可选的。

Unit

与计数器关联的值的含义。有关有效设备名称的完整列表,请参阅MetricDatum中的Amazon CloudWatch API 参考

以下是复杂计数器规范的示例:

{ "Counter": "Disk Reads/sec, "Rename": "Disk Reads per second", "Unit": "Count/Second" }

WindowsPerformanceCounterSource只能与指定 Amazon CloudWatch 接收器的管道结合使用。如果 Windows Kinesis 代理内置指标也流式传输到 CloudWatch,请使用单独的接收器。检查适用于 Windows 的 Kinesis 代理日志,以确定在未指定单位时,为计数器推断了哪些单位。WindowsPerformanceCounterSource声明。使用 PowerShell 确定类别、实例和计数器的有效名称。

要查看有关所有类别的信息(包括与计数器集关联的计数器),请在 PowerShell 窗口中执行以下命令:

Get-Counter -ListSet * | Sort-Object

要确定计数器集中每个计数器可用的实例,请在 PowerShell 窗口中执行类似于以下示例的命令:

Get-Counter -Counter "\Process(*)\% Processor Time"

Counter 参数的值应是上一个 Get-Counter -ListSet 命令调用列出的 PathsWithInstances 成员中的路径之一。

Windows 内置指标源的 Kinesis 代理

除了普通指标来源(如WindowsPerformanceCounterSource类型(请参阅WindowsPerformanceCounterSource 配置),CloudWatch 接收器类型可以从收集有关适用于 Windows 本身的 Kinesis 代理的指标的特殊源接收指标。Windows 指标的 Kinesis 代理还可用于KinesisTap类别的 Windows 性能计数器。

这些区域有:MetricsFilter键 Kinesis 值对指定哪些指标从内置的 Windows 功能代理程序指标源流式传输到 CloudWatch。该值是一个字符串,其中包含一个或多个用分号分隔的筛选表达式;例如:

"MetricsFilter": "FilterExpression1;FilterExpression2"

与一个或多个筛选表达式匹配的指标将流式传输到 CloudWatch。

单实例指标本质上是全局的,不与特定的源或接收器关联。多实例指标是多维的,并且基于源或接收器声明 Id。每个源或接收器类型均可具有一组不同的指标。

有关 Windows 指标名称的内置 Kinesis 代理的列表,请参阅适用于 Windows 指标的 Kinesis 代理列表

对于单实例指标,筛选表达式是指标的名称;例如:

"MetricsFilter": "SourcesFailedToStart;SinksFailedToStart"

对于多实例指标,筛选表达式依次包含指标名称、句点 (.) 和生成该指标的源或接收器声明的 Id。例如,假设有一个 IdMyFirehose 的接收器声明:

"MetricsFilter": "KinesisFirehoseRecordsFailedNonrecoverable.MyFirehose"

您可以使用旨在区分单实例指标和多实例指标的特殊通配符模式。

  • 星号 (*) 将匹配 0 个或多个字符,句点 (.) 除外。

  • 问号 (?) 匹配一个字符,句点除外。

  • 任何其他字符仅匹配自身。

  • _Total 是一个特殊标记,它会导致跨维度聚合所有匹配的多实例值。

以下示例匹配所有单实例指标:

"MetricsFilter": "*"

由于星号与句点字符不匹配,因此,仅包含单实例指标。

以下示例匹配所有多实例指标:

"MetricsFilter": "*.*"

以下示例匹配所有指标(单个和多个):

"MetricsFilter": "*;*.*"

以下示例跨所有源和接收器聚合所有多实例指标:

"MetricsFilter": "*._Total"

以下示例聚合所有 Kinesis Data Firehose 收器的所有 Kinesis 数据防火管指标:

"MetricsFilter": "*Firehose*._Total"

以下示例匹配所有单实例和多实例错误指标:

"MetricsFilter": "*Failed*;*Error*.*;*Failed*.*"

以下示例匹配跨所有源和接收器聚合的所有不可恢复的错误指标:

"MetricsFilter": "*Nonrecoverable*._Total"

有关如何指定使用适用于 Windows 的 Kinesis 代理的内置指标源的信息,请参阅为 Windows 度量管道配置 Kinesis 代理

适用于 Windows 指标的 Kinesis 代理列表

以下是对适用于 Windows 的 Kinesis 代理可用的单实例指标和多实例指标的列表。

单实例指标

提供了以下单实例指标:

KinesisTapBuildNumber

Windows 的 Kinesis 代理的版本号。

PipesConnected

已成功将其源连接到其接收器的管道的数目。

PipesFailedToConnect

已成功将其源连接到其接收器的管道的数目。

SinkFactoriesFailedToLoad

未成功加载到 Windows 的 Kinesis 代理的接收器类型的数目。

SinkFactoriesLoaded

已成功加载到 Windows Kinesis 代理的接收器类型的数目。

SinksFailedToStart

未成功启动(通常是因接收器声明不正确导致的)的接收器的数目。

SinksStarted

已成功启动的接收器的数目。

SourcesFailedToStart

未成功启动(通常是因源声明不正确导致的)的源的数目。

SourcesStarted

已成功启动的源的数目。

SourceFactoriesFailedToLoad

未成功加载到 Windows 的 Kinesis 代理的源类型的数目。

SourceFactoriesLoaded

已成功加载到 Windows Kinesis 代理的源类型的数目。

多实例指标

提供了以下多实例指标:

DirectorySource 指标

DirectorySourceBytesRead

在此 DirectorySource 的间隔期间读取的字节的数目。

DirectorySourceBytesToRead

已知可供读取但尚未由 Kinesis 代理读取的字节数(适用于 Windows)。

DirectorySourceFilesToProcess

需要检查但尚未由 Kinesis 代理的 Windows 检查的已知文件的数目。

DirectorySourceRecordsRead

在此 DirectorySource 的间隔期间已读取的记录数。

WindowsEventLogSource 指标

EventLogSourceEventsError

未成功读取的 Windows 事件日志事件的数目。

EventLogSourceEventsRead

已成功读取的 Windows 事件日志事件的数目。

KinesisFirehose 接收器指标

KinesisFirehoseBytesAccepted

间隔期间已接受的字节数。

KinesisFirehoseClientLatency

记录生成和记录流式传输到 Kinesis Data Firehose 服务之间经过的时间。

KinesisFirehoseLatency

Kinesis Data Firehose 服务的记录流的开始和结束之间经过的时间。

KinesisFirehoseNonrecoverableServiceErrors

无法无错误地将记录发送到 Kinesis 数据消防软管服务的次数(尽管已重试)。

KinesisFirehoseRecordsAttempted

已尝试流式传输到 Kinesis 数据消防软管服务的记录的数目。

KinesisFirehoseRecordsFailedNonrecoverable

未成功流式传输到 Kinesis 数据消防软管服务的记录的数目(尽管已重试)。

KinesisFirehoseRecordsFailedRecoverable

已成功流式传输到 Kinesis 数据消防软管服务的记录的数目(但仅在重试的情况下)。

KinesisFirehoseRecordsSuccess

已成功流式传输到 Kinesis 数据防火管服务的记录的数目(无需重试)。

KinesisFirehoseRecoverableServiceErrors

将记录成功发送到 Kinesis 数据消防软管服务的次数(但仅在重试的情况下)。

KinesisStream 指标

KinesisStreamBytesAccepted

间隔期间已接受的字节数。

KinesisStreamClientLatency

记录生成和记录流式传输到 Kinesis Data Streams 服务之间经过的时间。

KinesisStreamLatency

Kinesis 数据流服务的记录流的开始和结束之间经过的时间。

KinesisStreamNonrecoverableServiceErrors

无法无错误地将记录发送到 Kinesis 数据流服务的次数(尽管已重试)。

KinesisStreamRecordsAttempted

已尝试流式传输到 Kinesis 数据流服务的记录的数目。

KinesisStreamRecordsFailedNonrecoverable

未成功流式传输到 Kinesis 数据流服务的记录的数目(尽管已重试)。

KinesisStreamRecordsFailedRecoverable

已成功流式传输到 Kinesis 数据流服务的记录的数目(但仅在重试的情况下)。

KinesisStreamRecordsSuccess

已成功流式传输到 Kinesis Data Streams 服务的记录的数目。

KinesisStreamRecoverableServiceErrors

将记录成功发送到 Kinesis 数据流服务的次数(但仅在重试的情况下)。

CloudWatchLog 指标

CloudWatchLogBytesAccepted

间隔期间已接受的字节数。

CloudWatchLogClientLatency

记录生成和记录流式传输到 CloudWatch Logs 服务之间经过的时间。

CloudWatchLogLatency

CloudWatch Logs 服务的记录流的开始和结束之间经过的时间。

CloudWatchLogNonrecoverableServiceErrors

无法无错误地将记录发送到 CloudWatch Logs 服务的次数(尽管已重试)。

CloudWatchLogRecordsAttempted

已尝试流式传输到 CloudWatch Logs 服务的记录的数目。

CloudWatchLogRecordsFailedNonrecoverable

未成功流式传输到 CloudWatch Logs 服务的记录的数目(尽管已重试)。

CloudWatchLogRecordsFailedRecoverable

已成功流式传输到 CloudWatch Logs 服务的记录的数目(但仅在重试的情况下)。

CloudWatchLogRecordsSuccess

已成功流式传输到 CloudWatch Logs 服务的记录的数目。

CloudWatchLogRecoverableServiceErrors

将记录成功发送到 CloudWatch Logs 服务的次数(但仅在重试的情况下)。

CloudWatch 指标

CloudWatchLatency

CloudWatch 服务的指标流的开始和结束之间平均经过的时间。

CloudWatchNonrecoverableServiceErrors

无法无错误地将指标发送到 CloudWatch 服务的次数(尽管已重试)。

CloudWatchRecoverableServiceErrors

无错误地将指标发送到 CloudWatch 服务的次数(但仅在重试的情况下)。

CloudWatchServiceSuccess

无错误地将指标发送到 CloudWatch 服务的次数(无需重试)。

书签配置

默认情况下,Windows 的 Kinesis 代理将日志记录发送到在代理启动后创建的接收器。有时,发送早期日志记录很有用,例如,当在自动更新期间停止时创建的日志记录。书签功能可跟踪已发送到接收器的记录。当 Windows 的 Kinesis 代理处于书签模式中并启动时,它会将在 Windows 的 Kinesis 代理停止后创建的所有日志记录与随后创建的任何日志记录一起发送。要控制此行为,基于文件的源声明可以选择包括以下键/值对:

InitialPosition

指定书签的初始情况。可能值如下所示:

EOS

指定流结束 (EOS)。仅将在代理运行时创建的日志记录发送到接收器。

0

最初发送所有可用的日志记录和事件。然后,创建书签以确保最终将发送在创建书签后创建的每条新日志记录和事件,无论是否正在运行。

Bookmark

书签初始化为最新的日志记录或事件之后的书签。然后,创建书签以确保最终将发送在创建书签后创建的每条新日志记录和事件,无论是否正在运行。

默认情况下已启用书签。文件存储在%ProgramData%\Amazon\KinesisTap目录。

Timestamp

发送在 InitialPositionTimestamp 值(定义如下)之后创建的日志记录和事件。然后,创建书签以确保最终将发送在创建书签后创建的每条新日志记录和事件,无论是否正在运行。

InitialPositionTimestamp

指定所需的最早日志记录或事件时间戳。仅在 InitialPosition 的值为 Timestamp 时指定此键/值对。

BookmarkOnBufferFlush

可以将此设置添加到任何可书签源。如果设置为true,确保书签更新仅在接收器成功向 AWS 发送事件时才进行。您只能为源订阅单个汇。如果您要将日志发送到多个目的地,请复制源以避免数据丢失的潜在问题。

当 Windows 的 Kinesis 代理已停止很长一段时间,可能需要删除这些书签,因为已添加书签的日志记录和事件可能不再存在。给定源 ID 的书签文件位于 %PROGRAMDATA%\Amazon\AWSKinesisTap\source id.bm

书签不适用于已重命名或截断的文件。由于 ETW 事件和性能计数器的性质,无法为它们添加书签。