接收器声明 - 适用于 Microsoft Windows 的 Amazon Kinesis 代理

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

接收器声明

接收器声明 指定应从哪里以何种格式将日志、事件和指标发送到各种 AWS 服务。以下部分描述了 Microsoft Windows 的 Amazon Kinesis 代理中可用的内置接收器类型的配置。由于 Windows 的 Kinesis 代理是可扩展的,因此,您可以添加自定义接收器类型。通常在与各个接收器类型关联的配置声明中,需要有该接收器类型的唯一键/值对。

所有接收器声明可以包含以下键/值对:

Id

唯一字符串,在配置文件中标识特定接收器(必需)。

SinkType

此接收器的接收器类型的名称(必需)。接收器类型指定此接收器流式传输的日志、事件或指标数据的目标。

AccessKey

指定在授权访问与接收器类型关联的 AWS 服务时,使用的 AWS 访问密钥。键/值对是可选的。有关更多信息,请参阅 接收器安全配置

SecretKey

指定在授权访问与接收器类型关联的 AWS 服务时,使用的 AWS 私有密钥。键/值对是可选的。有关更多信息,请参阅 接收器安全配置

Region

指定哪个 AWS 区域包含用于流式传输的目标资源。键/值对是可选的。

ProfileName

指定用于身份验证的 AWS 配置文件。键/值对是可选的,但如果指定,则会覆盖任何指定的访问密钥和私有密钥。有关更多信息,请参阅 接收器安全配置

RoleARN

指定在访问与接收器类型关联的 AWS 服务时使用的 IAM 角色。当 Windows Kinesis Agent 在 EC2 实例上运行但其他角色比实例配置文件所引用的角色更合适时,此选项非常有用。例如,跨账户角色可用于定位与 EC2 实例不在相同 AWS 账户中的资源。键/值对是可选的。

Format

指定在流式传输之前,应用到日志和事件数据的序列化类型。有效值为 jsonxml。当数据管道中的下游分析需要或偏好特定格式的数据时,此选项非常有用。此键/值对可选,如果未指定,则将来自源的普通文本从接收器流式传输到与该接收器类型关联的 AWS 服务。

TextDecoration

未指定 Format 时,TextDecoration 指定在流式传输日志或事件记录时应包含的其他文本。有关更多信息,请参阅 配置接收器修饰。键/值对是可选的。

ObjectDecoration

指定了 Format 时,ObjectDecoration 指定在序列化和流式传输之前,日志或事件记录中包含哪些其他数据。有关更多信息,请参阅 配置接收器修饰。键/值对是可选的。

BufferInterval

为了尽可能减少对与接收器类型关联的 AWS 服务的 API 调用,Windows Kinesis Agent 在流式传输之前缓冲多个日志、事件或指标记录。这可以为针对每次 API 调用收费的服务节省费用。BufferInterval 指定在流式传输到 AWS 服务之前,缓冲记录的最大时间长度(以秒为单位)。此键/值对可选,在指定时,使用字符串来表示值。

BufferSize

为了尽可能减少对与接收器类型关联的 AWS 服务的 API 调用,Windows Kinesis Agent 在流式传输之前缓冲多个日志、事件或指标记录。这可以为针对每次 API 调用收费的服务节省费用。BufferSize 指定在流式传输到 AWS 服务之前,缓冲的最大记录数。此键/值对可选,在指定时,使用字符串来表示值。

MaxAttempts

指定在流式传输持续失败时,Windows Kinesis Agent 尝试将一组日志、事件和指标记录流式传输到 AWS 服务的次数。键/值对是可选的。在指定时,使用字符串来表示值。默认值为“3”。

有关使用不同接收器类型的完整配置文件示例,请参阅从 Windows 应用程序事件日志流式传输到接收器

KinesisStream 接收器配置

这些区域有:KinesisStream接收器类型将日志记录和事件流式传输到 Kinesis Data Streams 服务。通常,流式传输到 Kinesis Data Tata Stream 的数据由一个或多个使用各种 AWS 服务执行的自定义应用程序处理。数据流式传输到使用 Kinesis 数据流配置的指定流。有关更多信息,请参阅 。Amazon Kinesis Data Streams 开发人员指南

以下是 Kinesis Data Streams 接收器声明的示例:

{ "Id": "TestKinesisStreamSink", "SinkType": "KinesisStream", "StreamName": "MyTestStream", "Region": "us-west-2" }

所有 KinesisStream 接收器声明可以提供以下额外的键/值对:

SinkType

必须指定,值必须为文本字符串 KinesisStream

StreamName

指定 Kinesis 数据流的名称,该数据流接收从KinesisStream汇类型(必需)。在流式传输数据之前,请在 AWS 管理控制台、AWS CLI 或通过使用 Kinesis Data Street API 的应用程序来配置流。

RecordsPerSecond

指定每秒流式传输到 Kinesis Data Streams 的最大记录数。键/值对是可选的。如果指定,则使用整数来表示值。默认值为 1000 个记录。

BytesPerSecond

指定每秒流式传输到 Kinesis Data Streams 的最大字节数。键/值对是可选的。如果指定,则使用整数来表示值。默认值为 1 MB。

此接收器类型的默认 BufferInterval 为 1 秒,默认 BufferSize 为 500 个记录。

KinesisFirehose 接收器配置

这些区域有:KinesisFirehose接收器类型将日志记录和事件流式传输到 Kinesis Data Firehose 服务。Kinesis Data Firehose 将流式传输的数据提供给其他服务进行存储。通常,接下来在数据管道的后续阶段中会分析存储的数据。数据流式传输到使用 Kinesis Data Firehose 配置的指定传输流。有关更多信息,请参阅 。Amazon Kinesis Data Firehose 开发人员指南

以下是 Kinesis 数据消防器接收器声明的示例:

{ "Id": "TestKinesisFirehoseSink", "SinkType": "KinesisFirehose", "StreamName": "MyTestFirehoseDeliveryStream", "Region": "us-east-1", "CombineRecords": "true" }

所有 KinesisFirehose 接收器声明可以提供以下额外的键/值对:

SinkType

必须指定,值必须为文本字符串 KinesisFirehose

StreamName

指定 Kinesis Data Firehose 传输流的数据流名称,该流接收从KinesisStream汇类型(必需)。在流式传输数据之前,请使用 AWS 管理控制台、AWS CLI 或通过使用 Kinesis Data Firehose API 的应用程序来配置传输流。

CombineRecords

如果设置为true,指定将多个小记录合并成一个最大大小为 5 KB 的大记录。键/值对是可选的。使用此函数组合的记录由\n。如果您使用 AWS Lambda 转换 Kinesis Data Firehose 记录,则 Lambda 函数需要考虑分隔符字符。

RecordsPerSecond

指定每秒流式传输到 Kinesis Data Streams 的最大记录数。键/值对是可选的。如果指定,则使用整数来表示值。默认值为 5000 条记录。

BytesPerSecond

指定每秒流式传输到 Kinesis Data Streams 的最大字节数。键/值对是可选的。如果指定,则使用整数来表示值。默认值为 5 MB。

此接收器类型的默认 BufferInterval 为 1 秒,默认 BufferSize 为 500 个记录。

CloudWatch 接收器配置

这些区域有:CloudWatch接收器类型将指标流式传输到 CloudWatch Service。您可在 AWS 管理控制台中查看指标。有关更多信息,请参阅 Amazon CloudWatch 用户指南

以下为 CloudWatch 接收器声明:

{ "Id": "CloudWatchSink", "SinkType": "CloudWatch" }

所有 CloudWatch 接收器声明可以提供以下额外的键/值对:

SinkType

必须指定,值必须为文本字符串 CloudWatch

Interval

指定 Windows Kinesis 代理程序向 CloudWatch 服务报告指标的频率(以秒为单位)。键/值对是可选的。如果指定,则使用整数来表示值。默认值为 60 秒。如果您希望高分辨率的 CloudWatch 指标,则指定 1 秒。

Namespace

指定指标数据报告到的 CloudWatch 命名空间。CloudWatch 命名空间将指标集分组到一起。键/值对是可选的。默认值为 KinesisTap

Dimensions

指定用于在命名空间中隔离指标集的 CloudWatch 维度。这会非常有用,例如,为各个台式机或服务器提供单独的指标集数据。此键/值对可选,在指定时,其值必须符合以下格式:"key1=value1;key2=value2..."。默认值为 "ComputerName={computername};InstanceId={instance_id}"。此值支持接收器变量替换。有关更多信息,请参阅 配置接收器变量替换

MetricsFilter

指定哪些指标将哪些指标从内置的 Windows Kinesis 代理程序指标源流式传输到 CloudWatch。有关 Windows 指标源的内置 Kinesis Agent 的详细信息,包括此键/值对的值的语法详细信息,请参阅Windows 内置指标源的 Kinesis 代理

CloudWatchLogs 接收器配置

这些区域有:CloudWatchLogs接收器类型将日志记录和事件流式传输到 Amazon CloudWatch Logs。您可在 AWS 管理控制台中查看日志,或者通过数据管道的其他阶段处理它们。数据流式传输到在 CloudWatch 日志中配置的指定日志流。日志流按照指定的日志组排列。有关更多信息,请参阅 。Amazon CloudWatch Logs 用户指南

以下是 CloudWatch Logs 接收器声明的示例:

{ "Id": "MyCloudWatchLogsSink", "SinkType": "CloudWatchLogs", "BufferInterval": "60", "BufferSize": "100", "Region": "us-west-2", "LogGroup": "MyTestLogGroup", "LogStream": "MyTestStream" }

所有 CloudWatchLogs 接收器声明必须提供以下额外的键/值对:

SinkType

必须为文本字符串 CloudWatchLogs

LogGroup

指定 CloudWatch Logs Logs 日志组的名称,该日志组包含的日志流接收由CloudWatchLogs汇类型。如果指定的日志组不存在,Windows 的 Kinesis 代理将尝试创建它。

LogStream

指定 CloudWatch Logs 流的名称,该日志流由CloudWatchLogs汇类型。此值支持接收器变量替换。有关更多信息,请参阅 配置接收器变量替换。如果指定的日志流不存在,Windows 的 Kinesis 代理将尝试创建它。

此接收器类型的默认 BufferInterval 为 1 秒,默认 BufferSize 为 500 个记录。最大缓冲区大小为 10000 个记录。

本地FileSystem接收器配置

汇类型FileSystem将日志和事件记录保存到本地文件系统上的文件中,而不是将其流式传输到 AWS 服务。FileSystem汇对于测试和诊断非常有用。例如,您可以使用此接收器类型在将记录发送到 AWS 之前检查记录。

FileSystem接收器,您还可以使用配置参数来模拟批处理、限制和错误时重试,以模拟实际 AWS 汇的行为。

来自所有源的所有记录连接到FileSystem接收器保存到指定为FilePath。如果FilePath未指定,则会将记录保存到名为SinkId.txt中的%TEMP%目录,通常是C:\Users\UserName\AppData\Local\Temp,其中,SinkId是接收器的唯一标识符,UserName是活动用户的 Windows 用户名。

此接收器类型支持文本装饰属性。有关更多信息,请参阅 配置接收器修饰

一个示例FileSystem接收器类型配置显示在以下示例中。

{ "Id": "LocalFileSink", "SinkType": "FileSystem", "FilePath": "C:\\ProgramData\\Amazon\\local_sink.txt", "Format": "json", "TextDecoration": "", "ObjectDecoration": "" }

这些区域有:FileSystem配置由以下键/值对组成。

SinkType

必须为文本字符串 FileSystem

FilePath

指定保存记录的路径和文件。键/值对是可选的。如果未指定,默认值为TempPath\\SinkId.txt,其中,TempPath是存储在%TEMP%变量和SinkId是接收器的唯一标识符。

Format

将事件的格式指定为json或者xml。此键值对是可选的,不区分大小写。如果省略,事件将以纯文本形式写入文件。

TextDecoration

仅适用于以纯文本形式编写的事件。键/值对是可选的。

ObjectDecoration

仅适用于Format设置为json。键/值对是可选的。

高级使用 — 记录限制和故障模拟

FileSystem可以通过模拟记录限制来模拟 AWS 汇的行为。可使用以下键-值对指定记录限制和失效模拟属性。

通过获取目标文件的锁定并阻止对其进行写入,您可以使用FileSystem汇来模拟和检查网络发生故障时 AWS 汇的行为。

以下示例显示了一个FileSystem配置与模拟属性。

{ "Id": "LocalFileSink", "SinkType": "FileSystem", "FilePath": "C:\\ProgramData\\Amazon\\local_sink.txt", "TextDecoration": "", "RequestsPerSecond": "100", "BufferSize": "10", "MaxBatchSize": "1024" }
RequestsPerSecond

可选并指定为字符串类型。如果省略,默认值为"5"。控制接收器处理的请求速率(即写入文件),而不是记录数。适用于 Windows 的 Kinesis 代理向 AWS 终端节点发出批量请求,因此一个请求可能包含多个记录。

BufferSize

可选并指定为字符串类型。指定在保存到文件之前,接收器批处理的最大事件记录数。

MaxBatchSize

可选并指定为字符串类型。指定接收器在保存到文件之前批处理的最大事件记录数据量(以字节为单位)。

最大记录速率限制是BufferSize,它确定每个请求的最大记录数,RequestsPerSecond。您可以使用以下公式计算每秒记录速率限制。

记录率=BufferSize*RequestsPerSecond

给定上面示例中的配置值,最大记录速率为每秒 1000 条记录。

接收器安全配置

配置身份验证

对于 Windows Kinesis Agent 将日志、事件和指标流式传输到 AWS 服务,必须对访问进行身份验证。有多种方法可以为 Windows 提供身份验证。如何提供身份验证取决于 Windows 的 Kinesis Agent 以及特定组织的特定安全要求。

  • 如果 Windows Kinesis Agent for Windows 在 Amazon EC2 主机上执行,则提供身份验证最简单安全的方法是,创建对所需 AWS 服务的所需操作具有足够访问权限的 IAM 角色,以及引用该角色的 EC2 实例配置文件。有关创建实例配置文件的信息,请参阅使用实例配置文件。有关将哪些策略附加到 IAM 角色的信息,请参阅配置授权

    创建实例配置文件之后,您可以将其与使用适用于 Windows 的 Kinesis Agent 的任意 EC2 实例关联。如果实例已有关联的实例配置文件,您可以将相应的策略附加到与该实例配置文件关联的角色。

  • 如果 Windows Kinesis Agent for Windows 在一个账户中的 EC2 主机上执行,但作为接收器目标的资源位于不同账户中,您可以创建 IAM 角色用于跨账户访问。有关更多信息,请参阅 。教程:使用 IAM 角色委托跨 AWS 账户的访问权限。创建跨账户角色之后,为跨账户角色指定 Amazon 资源名称 (ARN) 作为RoleARN键/值对。然后,在访问与该接收器的接收器类型关联的 AWS 资源时,Windows Kinesis Agent 尝试代入指定的跨账户角色。

  • 如果 Windows Kinesis Agent 在 Amazon EC2 之外执行(例如,本地),则存在多个选项:

    • 如果允许将本地服务器或台式计算机注册为 Amazon EC2 系统管理器托管实例,请使用以下过程来配置身份验证:

      1. 使用在混合环境中设置 AWS Systems Manager 中介绍的过程来设置服务角色、为托管实例创建激活以及安装 SSM 代理。

      2. 将相应的策略附加到服务角色,以允许 Windows Kinesis Agent 访问从所配置接收器流式传输数据时所需的资源。有关将哪些策略附加到 IAM 角色的信息,请参阅配置授权

      3. 使用配置ProfileRefreshingAWSCredentialProvider刷新 AWS 凭证刷新 AWS 凭证。

      由于身份证明由 SSM 和 AWS 安全地管理,因此这是建议用于非 EC2 实例的方法。

    • 如果允许在特定用户而不是默认系统帐户下为 Windows 运行 AWSKinesis sisTAP 服务,请使用以下过程:

      1. 在将使用 AWS 服务的 AWS 账户中创建 IAM 用户。在创建过程中,收集此用户的访问密钥和私有密钥。此过程中稍后的步骤需要这些信息。

      2. 将策略附加到 IAM 用户,授予对所需服务的所需操作访问权限。有关将哪些策略附加到 IAM 用户的信息,请参阅配置授权

      3. 在各个台式机或服务器上更改 AWSKinesisTap 服务,使其运行在特定用户而不是默认系统账户下。

      4. 使用之前记录的访问密钥和私有密钥在开发工具包存储中创建配置文件。有关更多信息,请参阅配置 AWS 凭证

      5. %PROGRAMFILES%\Amazon\AWSKinesisTap 目录中更新 AWSKinesisTap.exe.config 文件,指定在上一步中创建的配置文件的名称。有关更多信息,请参阅配置 AWS 凭证

      对于无法作为托管实例的非 EC2 主机,这是推荐方法,因为特定主机和特定用户的凭证是加密的。

    • 如果需要在默认系统账户下为 Windows 运行 AWSKinesis sisTAP 服务,您必须使用共享凭证文件。这是因为系统账户没有用于启用开发工具包存储的 Windows 用户配置文件。共享凭证文件未加密,因此我们建议不要使用此方法。有关如何使用共享配置文件的信息,请参阅配置 AWS 凭证中的适用于 .NET 的 AWS 开发工具包。如果您使用此方法,我们建议您使用 NTFS 加密并限制对共享配置文件的访问权限。管理平台应该轮换密钥,并且在进行密钥轮换时必须更新共享配置文件。

虽然可以在接收器声明中直接提供访问密钥和私有密钥,但不建议使用此方法,因为声明未加密。

配置授权

将相应策略附加到 IAM 用户或角色,适用于 Windows 的 Kinesis Agent 将使用这些用户或角色来流式传输数据到 AWS 服务:

Kinesis Data Streams

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "kinesis:PutRecord", "kinesis:PutRecords" ], "Resource": "arn:aws:kinesis:*:*:stream/*" } ] }

要将授权限制到特定区域、账户或流名称,请使用特定值替换 ARN 中的相应星号。有关更多信息,请参阅使用 IAM 控制对 Amazon Kinesis Data Streams 资源的访问中的“用于 Kinesis Data Streams 的 Amazon 资源名称 (ARN)”。

Kinesis Data Firehose

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor1", "Effect": "Allow", "Action": [ "firehose:PutRecord", "firehose:PutRecordBatch" ], "Resource": "arn:aws:firehose:*:*:deliverystream/*" } ] }

要将授权限制到特定区域、账户或传输流名称,请使用特定值替换 ARN 中的相应星号。有关更多信息,请参阅 。使用 Amazon Kinesis Data Firehose 控制访问中的Amazon Kinesis Data Firehose 开发人员指南

CloudWatch

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor2", "Effect": "Allow", "Action": "cloudwatch:PutMetricData", "Resource": "*" } ] }

有关更多信息,请参阅 。管理您的 CloudWatch 资源的访问权限概述中的Amazon CloudWatch Logs 用户指南

具有现有日志组和日志流的 CloudWatch 日志

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor3", "Effect": "Allow", "Action": [ "logs:DescribeLogGroups", "logs:DescribeLogStreams", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:*:*:log-group:*" }, { "Sid": "VisualEditor4", "Effect": "Allow", "Action": "logs:PutLogEvents", "Resource": "arn:aws:logs:*:*:log-group:*:*:*" } ] }

要限制对特定区域、账户、日志组或日志流的访问,请使用相应值替换 ARN 中的相应星号。有关更多信息,请参阅 。管理您的 CloudWatch Logs 资源的访问权限概述中的Amazon CloudWatch Logs 用户指南

CloudWatch Logs 具有额外权限的 CloudWatch Kinesis 日志日志日志日志,用于 Windows 创建日志组和日志流

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor5", "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:DescribeLogGroups", "logs:DescribeLogStreams", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:*:*:log-group:*" }, { "Sid": "VisualEditor6", "Effect": "Allow", "Action": "logs:PutLogEvents", "Resource": "arn:aws:logs:*:*:log-group:*:*:*" }, { "Sid": "VisualEditor7", "Effect": "Allow", "Action": "logs:CreateLogGroup", "Resource": "*" } ] }

要限制对特定区域、账户、日志组或日志流的访问,请使用相应值替换 ARN 中的相应星号。有关更多信息,请参阅 。管理您的 CloudWatch Logs 资源的访问权限概述中的Amazon CloudWatch Logs 用户指南

EC2 标签变量扩展所需的权限

通过 ec2tag 变量前缀使用变量扩展需要 ec2:Describe* 权限。

{ "Version": "2012-10-17", "Statement": [{ "Sid": "VisualEditor8", "Effect": "Allow", "Action": "ec2:Describe*", "Resource": "*" } ] }
注意

只要各个语句的 Sid 在策略中唯一,您就可以将多个语句组合成单个策略。有关创建策略的信息,请参阅创建 IAM 策略中的IAM 用户指南

配置ProfileRefreshingAWSCredentialProvider刷新 AWS 凭证

如果您使用适用于混合环境的 AWS Systems Manager 来管理 AWS 证书,Systems Manager 会在c:\Windows\System32\config\systemprofile\.aws\credentials。有关混合环境的更多信息,请参阅为混合环境设置 AWS Systems Manager中的AWS Systems Manager 用户指南

由于 AWS .net 开发工具包不会自动获取新证书,因此我们提供ProfileRefreshingAWSCredentialProvider插件刷新凭据。

您可以使用CredentialRef属 AWS 来引用Credentials定义,其中CredentialType属性设置为ProfileRefreshingAWSCredentialProvider如以下示例所示。

{ "Sinks": [{ "Id": "myCloudWatchLogsSink", "SinkType": "CloudWatchLogs", "CredentialRef": "ssmcred", "Region": "us-west-2", "LogGroup": "myLogGroup", "LogStream": "myLogStream" }], "Credentials": [{ "Id": "ssmcred", "CredentialType": "ProfileRefreshingAWSCredentialProvider", "Profile": "default", "FilePath": "%USERPROFILE%//.aws//credentials", "RefreshingInterval": 300 }] }

凭证定义由以下属性组成,作为键 — 值对。

Id

定义接收器定义可以使用CredentialRef以引用此凭据配置。

CredentialType

设置为文本字符串ProfileRefreshingAWSCredentialProvider

Profile

可选。默认为 default

FilePath

可选。指定 AWS 凭证文件的路径。如果省略,则 %USERPROFILE%/.aws/credentials 是默认值。

RefreshingInterval

可选。刷新凭据的频率(以秒为单位)。如果省略,则 300 是默认值。

配置接收器修饰

接收器声明可以选择包括指定要流式传输到各种 AWS 服务的额外数据的键/值对,用于增强从源收集的记录。

TextDecoration

在接收器声明中未指定 Format 时,使用此键/值对。该值是进行变量替换的特殊格式字符串。例如,假设为接收器提供了 "{ComputerName}:::{timestamp:yyyy-MM-dd HH:mm:ss}:::{_record}"TextDecoration。当源发出包含文本 The system has resumed from sleep. 的日志记录时,源通过管道连接到接收器,然后文本 MyComputer1:::2017-10-26 06:14:22:::The system has resumed from sleep. 流式传输到与该接收器类型关联的 AWS 服务。{_record} 变量引用源所传输的原始文本记录。

ObjectDecoration

在接收器声明中指定了 Format 时,使用此键/值对,以在记录序列化之前添加其他数据。例如,假设为指定 JSON Format 的接收器提供了 "ComputerName={ComputerName};DT={timestamp:yyyy-MM-dd HH:mm:ss}"ObjectDecoration。流式传输到与接收器类型关联的 AWS 服务的所生成 JSON,在来自源的原始数据之外,包括下列键/值对:

{ ComputerName: "MyComputer2", DT: "2017-10-17 21:09:04" }

有关使用 ObjectDecoration 的示例,请参阅教程:使用适用于 Windows 的 Kinesis 代理将 JSON 日志文件流式传输到 Amazon S3

ObjectDecorationEx

指定一个表达式,该表达式允许与ObjectDecoration。此字段可用于当汇的格式为json。表达式语法如以下所示。

"ObjectDecorationEx": "attribute1={expression1};attribute2={expression2};attribute3={expression3}(;...)"

例如,以下ObjectDecorationEx属性:

"ObjectDecorationEx": "host={env:ComputerName};message={upper(_record)};time={format(_timestamp, 'yyyyMMdd')}"

转换文字记录:

System log message

使用表达式返回的值进入 JSON 对象,如下所示:

{ "host": "EC2AMAZ-1234", "message": "SYSTEM LOG MESSAGE", "time": "20210201" }

有关编制表达式的详细信息,请参阅有关编写表达式的提示。其中,ObjectDecoration声明应该使用新语法工作,但时间戳变量除外。A{timestamp:yyyyMMdd}中的字段ObjectDecoration表示为{format(_timestamp,'yyyyMMdd')}ObjectDecorationEx

TextDecorationEx

指定一个表达式,该表达式允许与TextDecoration,如以下示例所示。

"TextDecorationEx": "Message '{lower(_record)}' at {format(_timestamp, 'yyyy-MM-dd')}"

您可以使用TextDecorationEx来组成 JSON 对象。使用 '@ {'转义左大括号,如以下示例所示。

"TextDecorationEx": "@{ \"var\": \"{upper($myvar1)}\" }"

如果与接收器连接的源的源类型是 DirectorySource,则接收器可以使用三个其他变量:

_FilePath

日志文件的完整路径。

_FileName

文件名和文件的扩展名。

_Position

一个整数,表示记录在日志文件中的位置。

当您使用从连接到单个接收器的多个文件收集日志记录的源并将所有记录流式传输到单个流时,这些变量非常有用。将这些变量的值注入流记录中可在数据管道的下游进行分析,以按照文件和在各个文件中的位置来排序记录。

有关编写表达式的提示

表达式可以为以下任一种:

  • 变量表达式。

  • 常量表达式,例如'hello'11.21nulltruefalse

  • 调用函数的调用表达式,如以下示例所示。

    regexp_extract('Info: MID 118667291 ICID 197973259 RID 0 To: <jd@acme.com>', 'To: (\\\\S+)', 1)

特殊字符

需要两个反斜杠来转义特殊字符。

Nesting

函数调用可以嵌套,如以下示例所示。

format(date(2018, 11, 28), 'MMddyyyy')

Variables

有三种类型的变量:局部变量、元变量和全局变量。

  • 局部变量从开始$例如$message。它们用于解析事件对象的属性、如果事件是字典的条目或事件是 JSON 对象的属性。如果局部变量包含空格或特殊字符,请使用引号的局部变量,例如$'date created'

  • 元变量以下划线开头(_),并用于解析为事件的元数据。所有事件类型都支持以下元变量。

    _timestamp

    事件的时间戳。

    _record

    事件的原始文本表示形式。

    日志事件支持以下附加元变量。

    _filepath

    _filename

    _position

    _linenumber

  • 全局变量解析为环境变量、EC2 实例元数据或 EC2Tag。为了获得更好的性能,我们建议您使用前缀限制搜索范围,例如{env:ComputerName}{ec2:InstanceId}, 和{ec2tag:Name}

内置函数

Windows Kinesis 代理支持以下内置函数。如果任何参数是NULL并且该函数不是为了处理NULL,aNULL对象被返回。

//string functions int length(string input) string lower(string input) string lpad(string input, int size, string padstring) string ltrim(string input) string rpad(string input, int size, string padstring) string rtrim(string input) string substr(string input, int start) string substr(string input, int start, int length) string trim(string input) string upper(string str) //regular expression functions string regexp_extract(string input, string pattern) string regexp_extract(string input, string pattern, int group) //date functions DateTime date(int year, int month, int day) DateTime date(int year, int month, int day, int hour, int minute, int second) DateTime date(int year, int month, int day, int hour, int minute, int second, int millisecond) //conversion functions int? parse_int(string input) decimal? parse_decimal(string input) DateTime? parse_date(string input, string format) string format(object o, string format) //coalesce functions object coalesce(object obj1, object obj2) object coalesce(object obj1, object obj2, object obj3) object coalesce(object obj1, object obj2, object obj3, object obj4) object coalesce(object obj1, object obj2, object obj3, object obj4, object obj5) object coalesce(object obj1, object obj2, object obj3, object obj4, object obj5, object obj6)

配置接收器变量替换

KinesisStreamKinesisFirehoseCloudWatchLogs 接收器声明需要 LogStreamStreamName 键/值对。值的值可以包含由 Windows 的 Kinesis 代理自动解析的变量引用。适用于CloudWatchLogsLogGroup键/值对也是必需的,并且可以包含由 Windows Kinesis 代理自动解析的变量引用。使用模板 {prefix:variablename} 指定变量,其中 prefix: 可选。支持的前缀如下所示:

  • env— 变量引用解析为同名的环境变量的值。

  • ec2— 变量引用解析为同名的 EC2 实例元数据。

  • ec2tag— 变量引用解析为同名的 EC2 实例标签的值。访问实例标签需要 ec2:Describe* 权限。有关更多信息,请参阅 EC2 标签变量扩展所需的权限

如果未指定前缀,并且某个环境变量具有与 variablename 相同的名称,变量引用解析为环境变量的值。否则,如果 variablenameinstance_idhostname,变量引用解析为同名的 EC2 元数据的值。如果均不满足,不解析变量引用。

以下为使用变量引用的有效键/值对示例:

"LogStream": "LogStream_{instance_id}" "LogStream": "LogStream_{hostname}" "LogStream": "LogStream_{ec2:local-hostname}" "LogStream": "LogStream_{computername}" "LogStream": "LogStream_{env:computername}"

CloudWatchLogs 接收器声明支持特殊格式的时间戳变量,允许来自源的日志或事件记录的时间戳变更日志流的名称。格式为 {timestamp:timeformat}。请参见以下示例:

"LogStream": "LogStream_{timestamp:yyyyMMdd}"

如果日志或事件记录在 2017 年 6 月 5 日生成,上一例中 LogStream 键/值对的值将解析为 "LogStream_20170605"

如果已授权,根据生成的名称,在需要时 CloudWatchLogs 接收器类型可以自动创建新日志流。对于其他接收器类型,由于它们在流名称之外需要其他配置,您无法执行此操作。

这些是在文本和对象修饰中出现的特殊变量替换。有关更多信息,请参阅 配置接收器修饰

配置接收器排队

KinesisStreamKinesisFirehoseCloudWatchLogs 接收器声明可以选择如果由于临时连接问题,记录无法流式传输到与这些接收器类型关联的 AWS 服务,则启用记录排队。要启用排队和在连接恢复时的自动流式传输重试,请在接收器声明中使用以下键/值对:

QueueType

指定要使用的排队机制的类型。唯一支持的值是 file,这表示记录应在文件中排队。此键-值对是必需的,以启用适用于 Windows 的 Kinesis 代理的队列功能。如果未指定此项,则默认行为是仅在内存中排队,达到内存排队限制时将无法流式传输。

QueuePath

指定包含已排队记录的文件的文件夹。键/值对是可选的。默认值为 %PROGRAMDATA%\KinesisTap\Queue\SinkId,其中 SinkId 是您分配作为接收器声明的 Id 值的标识符。

QueueMaxBatches

限制 Windows Kinesis Agent 在排队记录以进行流式传输时可以使用的空间总量。空间量限制为此键/值对的值乘以每一批的最大字节数。KinesisStreamKinesisFirehoseCloudWatchLogs 接收器类型的每一批的最大字节数分别为 5 MB、4 MB 和 1 MB。达到此限制时,任何失败的流式传输不排队,并报告为不可恢复的故障。键/值对是可选的。默认值为 10000 个批处理。

为接收器配置代理

要为访问 AWS 服务的 Windows 接收器类型配置代理,请编辑位于的 Windows Kinesis Agent 配置文件。%Program Files%\Amazon\KinesisTap\AWSKinesisTap.exe.config。有关说明,请参阅proxy中的部分AWS SDK for .NET 的配置文件参考中的AWS SDK for .NET Developer Guide

在更多汇属性中配置解析变量

以下示例显示了接收器配置,该接收器配置使用Region环境变量的值Region属性键/值对。适用于RoleARN,它指定 EC2 标签密钥MyRoleARN,它的计算结果为与该键关联的值。

"Id": "myCloudWatchLogsSink", "SinkType": "CloudWatchLogs", "LogGroup": "EC2Logs", "LogStream": "logs-{instance_id}" "Region": "{env:Region}" "RoleARN": "{ec2tag:MyRoleARN}"

在 AWS 汇中使用 RoLearn 属性时配置 AWS STS 区域终端节点

此功能仅在您在 Amazon EC2 上使用 KinesiSTAP 并使用RoleARN属性代入外部 IAM 角色,以便通过目标 AWS 服务进行身份验证。

通过将设置UseSTSRegionalEndpointstrue,您可以指定代理使用区域终端节点(例如https://sts.us-east-1.amazonaws.com)而不是全局终端节点(例如,https://sts.amazonaws.com)。使用区域 STS 终端节点可减少操作的往返延迟,并限制全局终端服务中故障的影响。

为 AWS 汇配置 VPC 终端节点

您可以在接收器配置中指定 VPC 终端节点CloudWatchLogsCloudWatchKinesisStreams, 和KinesisFirehose汇类型。VPC 终端节点使您能够将 VPC 私密地连接到支持的 AWS 服务和 VPC 终端节点服务(由 AWS PrivateLink 提供支持),而无需互联网网关、NAT 设备、VPN 连接或 AWS Direct Connect 连接。VPC 中的实例无需公有 IP 地址便可与服务中的资源通信。VPC 和其他服务之间的通信不会离开 Amazon 网络。有关更多信息,请参阅 。VPC 终端节点中的Amazon VPC 用户指南

您可 VPC 使用ServiceURL属性,如以下示例所示。CloudWatchLogs汇配置。将值设置为ServiceURL设置为VPC 终端节点节点详选项卡上,使用 Amazon VPC 控制台。

{ "Id": "myCloudWatchLogsSink", "SinkType": "CloudWatchLogs", "LogGroup": "EC2Logs", "LogStream": "logs-{instance_id}", "ServiceURL":"https://vpce-ab1c234de56-ab7cdefg.logs.us-east-1.vpce.amazonaws.com" }

配置替代代代理方式

此功能允许您使用 AWS 开发工具包内置的代理支持而不是 .NET 来配置接收器配置代理服务器。以前,将代理配置为使用代理的唯一方法是使用 .NET 的本机功能,该功能通过代理文件中定义的代理自动路由所有 HTTP/S 请求。

如果您当前使用代理与代理服务器一起使用,则无需更改即可使用此方法。

您可以使用ProxyHostProxyPort属性配置备用代理,如以下示例所示。

{ "Id": "myCloudWatchLogsSink", "SinkType": "CloudWatchLogs", "LogGroup": "EC2Logs", "LogStream": "logs-{instance_id}", "Region": "us-west-2", "ProxyHost": "myproxy.mydnsdomain.com", "ProxyPort": "8080" }