针对微软 Windows 的 Amazon Kinesis 代理疑难解答 - 适用于 Microsoft Windows 的 Amazon Kinesis 代理

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

针对微软 Windows 的 Amazon Kinesis 代理疑难解答

请按照以下说明来诊断并纠正的使用适用于 Microsoft Windows 的 Amazon Kinesis 代理程序时的问题。

没有数据从桌面或服务器流式传输到预期的 AWS 服务

Symptoms

当您检查由配置为从适用于 Windows 的 Kinesis 代理接收数据流的各种 AWS 服务所托管的日志、事件和指标时,不会流式传输任何数据。

Causes

有多种可能的原因会导致此问题:

  • 源、接收器或管道配置不正确。

  • 适用于 Windows 的 Kinesis 代理的身份验证配置不正确。

  • Windows Kinesis 代理的授权配置不正确。

  • DirectorySource 声明中提供的正则表达式存在错误。

  • DirectorySource 声明指定了一个不存在的目录。

  • 正在向 AWS 服务提供的值无效,然后会拒绝来自适用于 Windows 的 Kinesis 代理的请求。

  • 接收器引用指定的或隐式 AWS 区域中不存在的资源。

  • WindowsEventLogSource 声明指定了无效的查询。

  • 为源的 InitialPosition 键/值对指定了无效值。

  • appsettings.json 配置文件不符合该文件的 JSON 架构。

  • 数据将流式传输到与 AWS 管理控制台中选择的区域不同的区域。

  • 适用于 Windows 的 Kinesis 代理未正确安装或未运行。

Resolutions

要解决数据不进行流式处理的问题,请执行以下步骤:

  1. 检查 Kinesis 代理程序中的 Windows 日志%PROGRAMDATA%\Amazon\AWSKinesisTap\logs目录。搜索字符串 ERROR

    1. 如果未加载源或接收器,请执行以下操作:

      1. 检查错误消息,并找到源或接收器的 Id

      2. 检查与 %PROGRAMFILES%\Amazon\AWSKinesisTap\appsettings.json 配置文件中的 Id 对应的源或接收器声明,以查找与找到的错误消息相关的任何错误。有关更多信息,请参阅为微软 Windows 配置 Amazon Kinesis 运行代理

      3. 更正与错误相关的任何配置文件问题。

      4. 停止和启动 AWSKinesisTap 实例。然后,查看最新的日志文件以验证配置问题是否已解决。

    2. 如果错误消息指示未找到管道的 SourceRefSinkRef,请执行以下操作:

      1. 记下管道 Id

      2. 检查 %PROGRAMFILES%\Amazon\AWSKinesisTap\appsettings.json 配置文件中与记下的 Id 对应的管道声明。确保对于您要引用的源和接收器声明,SourceRefSinkRef 键/值对的值正确拼写为 Id。更正任何拼写错误或拼写错误。如果配置文件中缺少源或接收器声明,请添加声明。有关更多信息,请参阅 为微软 Windows 配置 Amazon Kinesis 运行代理

      3. 停止和启动 AWSKinesisTap 实例。然后,查看最新的日志文件以验证配置问题是否已解决。

    3. 如果错误消息指示某个特定的 IAM 用户或角色未被授权执行某些操作,请执行以下操作:

      1. 确保适用于 Windows 的 Kinesis 代理正在使用的是正确的 IAM 用户或角色。如果不是,请查看接收器安全配置,并调整适用于 Windows 的 Kinesis 代理身份验证的方式,以确保使用的是正确的 IAM 用户或角色。

      2. 如果使用的是正确的 IAM 用户或角色,请使用 AWS 管理控制台检查与该用户或角色关联的策略。对于适用于 Windows 的 Kinesis 代理访问的所有 AWS 资源,确保用户或角色具有相应错误消息中提到的所有权限。有关更多信息,请参阅 配置授权

      3. 停止和启动 AWSKinesisTap 实例。然后,查看最新的日志文件以验证安全问题是否已解决。

    4. 如果错误消息指示在解析 %PROGRAMFILES%\Amazon\AWSKinesisTap\appsettings.json 配置文件中包含的正则表达式时存在参数错误,请执行以下操作:

      1. 查看配置文件中的正则表达式。

      2. 验证正则表达式的语法。有几个网站可用于验证正则表达式,您也可以使用以下命令行检查 DirectorySource 源声明的正则表达式:

        cd /D %PROGRAMFILES%\Amazon\AWSKinesisTap ktdiag.exe /r sourceId

        sourceId 替换为具有错误正则表达式的 DirectorySource 源声明的 Id 键/值对的值。

      3. 对配置文件中的正则表达式进行任何必要的更正,以使其有效。

      4. 停止和启动 AWSKinesisTap 实例。然后,查看最新的日志文件以验证配置问题是否已解决。

    5. 如果错误消息指示在解析 %PROGRAMFILES%\Amazon\AWSKinesisTap\appsettings.json 配置文件中不包含的正则表达式时存在参数错误,并且该正则表达式与特定接收器有关,请执行以下操作:

      1. 在配置文件中找到接收器声明。

      2. 验证与 AWS 服务明确相关的键/值对是否在使用符合该服务的验证规则的名称。例如,CloudWatch Logs 组名必须仅包含使用正则表达式指定的特定字符集。[\.\-_/#A-Za-z0-9]+

      3. 更正接收器声明的键/值对中的任何无效名称,并确保在 AWS 中正确配置了这些资源。

      4. 停止和启动 AWSKinesisTap 实例。然后,查看最新的日志文件以验证配置问题是否已解决。

    6. 如果错误消息指示由于参数为空或缺少参数而无法加载源或接收器,请执行以下操作:

      1. 注意源或接收器的 Id

      2. 找到与 %PROGRAMFILES%\Amazon\AWSKinesisTap\appsettings.json 配置文件中已记下的 Id 匹配的源或接收器声明。

      3. 查看源或接收器声明中提供的键/值对,与相关接收器类型的 为微软 Windows 配置 Amazon Kinesis 运行代理 文档中的源或接收器类型要求进行比较。将缺少的任何必需键/值对添加到源或接收器声明中。

      4. 停止和启动 AWSKinesisTap 实例。然后,查看最新的日志文件以验证配置问题是否已解决。

    7. 如果错误消息指示目录名称无效,请执行以下操作:

      1. %PROGRAMFILES%\Amazon\AWSKinesisTap\appsettings.json 配置文件中找到无效的目录名称。

      2. 确保此目录是否存在并包含应流式传输的日志文件。

      3. 更正配置文件中指定的目录名称中的任何拼写错误。

      4. 停止和启动 AWSKinesisTap 实例。然后,查看最新的日志文件以验证配置问题是否已解决。

    8. 如果错误消息指示某个资源不存在:

      1. 找到 %PROGRAMFILES%\Amazon\AWSKinesisTap\appsettings.json 配置文件中接收器声明中不存在的资源的资源引用。

      2. 使用 AWS 管理控制台在接收器声明中应使用的正确 AWS 区域中找到资源。将其与配置文件中指定的内容进行比较。

      3. 更改配置文件中的接收器声明,使其具有正确的资源名称和正确的区域。

      4. 停止和启动 AWSKinesisTap 实例。然后,查看最新的日志文件以验证配置问题是否已解决。

    9. 如果错误消息指示特定 WindowsEventLogSource 的查询无效,请执行以下操作:

      1. %PROGRAMFILES%\Amazon\AWSKinesisTap\appsettings.json 配置文件中,找到与错误消息中相应内容具有相同 IdWindowsEventLogSource 声明。

      2. 验证源声明中 Query 键/值对的值是否符合 事件查询和事件 XML

      3. 对查询进行任何更改以使其符合规范。

      4. 停止和启动 AWSKinesisTap 实例。然后,查看最新的日志文件以验证配置问题是否已解决。

    10. 如果错误消息指示存在无效的初始位置,请执行以下操作:

      1. %PROGRAMFILES%\Amazon\AWSKinesisTap\appsettings.json 配置文件中,找到与错误消息中相应内容具有相同 Id 的源声明。

      2. 更改源声明中 InitialPosition 键/值对的值以符合允许值,如书签配置中所述。

      3. 停止和启动 AWSKinesisTap 实例。然后,查看最新的日志文件以验证配置问题是否已解决。

  2. 确保 %PROGRAMFILES%\Amazon\AWSKinesisTap\appsettings.json 配置文件符合 JSON 架构。

    1. 在命令提示符窗口中,调用以下行:

      cd /D %PROGRAMFILES%\Amazon\AWSKinesisTap %PROGRAMFILES%\Amazon\AWSKinesisTap\ktdiag.exe /c
    2. 更正使用 %PROGRAMFILES%\Amazon\AWSKinesisTap\appsettings.json 配置文件检测到的任何问题。

    3. 停止和启动 AWSKinesisTap 实例。然后,查看最新的日志文件以验证配置问题是否已解决。

  3. 更改日志记录级别以尝试获取更详细的日志记录信息。

    1. %PROGRAMFILES%\Amazon\AWSKinesisTap\nlog.xml 配置文件替换为以下内容:

      <?xml version="1.0" encoding="utf-8" ?> <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd" autoReload="true" throwExceptions="false" internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log" > <!-- See https://github.com/nlog/nlog/wiki/Configuration-file for information on customizing logging rules and outputs. --> <targets> <!-- add your targets here See https://github.com/nlog/NLog/wiki/Targets for possible targets. See https://github.com/nlog/NLog/wiki/Layout-Renderers for the possible layout renderers. --> <target name="logfile" xsi:type="File" layout="${longdate} ${logger} ${uppercase:${level}} ${message}" fileName="${specialfolder:folder=CommonApplicationData}/Amazon/KinesisTap/logs/KinesisTap.log" maxArchiveFiles="90" archiveFileName="${specialfolder:folder=CommonApplicationData}/Amazon/KinesisTap/logs/Archive-{################}.log" archiveNumbering="Date" archiveDateFormat="yyyy-MM-dd" archiveEvery="Day" /> </targets> <rules> <logger name="*" minlevel="Debug" writeTo="logfile" /> </rules> </nlog>
    2. 停止和启动 AWSKinesisTap 实例。然后检查最新的日志文件,以查看日志中是否有其他消息可以帮助诊断和解决问题。

  4. 确保您正在查看 AWS 管理控制台中正确区域中的资源。

  5. 确保 Windows Kinesis 代理已安装并且正在运行。

    1. 在 Windows 中,选择开始,然后导航到控制面板管理工具服务

    2. 查找 AWSKinesisTap 服务。

    3. 如果看不到 AWSKinesis 服务,请按照中的说明安装适用于 Windows 的 Kinesis 代理程序。适用于 Microsoft Windows 的 Amazon Kinesis 代理入门

    4. 如果能看到该服务,请确定该服务是否正在运行。如果未运行,请打开该服务的上下文(右键单击)菜单,然后选择开始

    5. 通过检查 %PROGRAMDATA%\Amazon\AWSKinesisTap\logs 目录中的最新日志文件来验证该服务是否已启动。

适用于

该信息适用于适用于 Windows 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.

预期的数据有时会丢失

Symptoms

适用于 Windows 的 Kinesis 代理大多数时候会成功地传输数据,但偶尔会丢失一些数据。

Causes

有多种可能的原因会导致此问题:

  • 未使用书签功能。

  • 根据服务的当前配置,超出了 AWS 服务的数据速率限制。

  • AWS 服务的 API 调用速率限制将根据当前的appsettings.json配置文件和 AWS 账户限制。

Resolutions

要解决丢失数据的问题,请执行以下步骤:

  1. 考虑使用 书签配置 中记录的书签功能。它有助于确保最终发送所有数据,即使 Windows Kinesis 代理停止并启动也是如此。

  2. 使用适用于 Windows 的内置指标的 Kinesis 代理来发现问题:

    1. 启用适用于 Windows 的 Kinesis 代理指标的流式传输,如中所述为 Windows 度量管道配置 Kinesis 代理

    2. 如果一个或多个接收器存在大量不可恢复的错误,请确定每秒发送的字节数或记录数。然后,确定相应数值是否位于为要在其中流式传输数据的区域和账户中的那些 AWS 服务配置的限制内。

    3. 超出限制时,要么降低所发送数据的速率或数量,请求提高限制,要么增加分片(如果适用)。

    4. 在进行调整后,继续监视的 Windows Kinesis 代理的内置指标,以确保这种情况已得到解决。

有关 Kinesis Data Streams 限制的更多信息,请参阅Kinesis Data Streams 限制中的Kinesis Data Streams 开发人员指南。有关 Kinesis Data Firehose 限制的更多信息,请参阅Amazon Kinesis Data Firehose 限制

适用于

该信息适用于适用于 Windows 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.

数据到达时采用了错误格式

Symptoms

数据采用错误格式到达 AWS 服务。

Causes

有多种可能的原因会导致此问题:

  • appsettings.json 配置文件中接收器声明的 Format 键/值对的值不正确。

  • DirectorySource 声明中 RecordParser 键/值对的值不正确。

  • 使用 Regex 记录解析程序的 DirectorySource 声明中的正则表达式不正确。

Resolutions

要解决格式不正确的问题,请执行以下步骤:

  1. 查看 %PROGRAMFILES%\Amazon\AWSKinesisTap\appsettings.json 配置文件中的接收器声明。

  2. 确保为每个接收器声明指定了正确的 Format 键/值对值。有关更多信息,请参阅 接收器声明

  3. 如果具有 DirectorySource 声明的源通过管道连接到为 Format 键/值对指定 xmljson 值的接收器,请确保这些源指定 RecordParser 键/值对的以下值之一:

    • SingleLineJson

    • Regex

    • SysLog

    • Delimited

    其他记录解析程序仅基于文本,并且无法与需要 XML 或 JSON 格式的接收器一起正常工作。

  4. 如果 DirectorySource 源类型未正确解析日志记录,请在命令提示符窗口中调用以下行以验证 DirectorySource 声明中指定的时间戳和正则表达式键/值对:

    cd /D %PROGRAMFILES%\Amazon\AWSKinesisTap ktdiag.exe /r sourceID

    sourceID 替换为似乎没有正常工作的 DirectorySource 源声明的 Id 键/值对的值。更正 ktdiag.exe 报告的任何问题。

适用于

该信息适用于适用于 Windows 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.

性能问题

Symptoms

安装并启动适用于 Windows 的 Kinesis 代理后,应用程序和服务的延迟会增加。

Causes

有多种可能的原因会导致此问题:

  • 运行 Windows Kinesis 代理的计算机没有足够的容量来流式传输所需的数据量。

  • 不必要的数据正在流式传输到一个或多个 AWS 服务。

  • 适用于 Windows 的 Kinesis 代理正在将数据流式传输到 AWS 服务,但这些服务没有配置这么高的数据速率。

  • 适用于 Windows 的 Kinesis 代理正在调用 AWS 服务的操作,该账户的 API 调用速率限制太低。

Resolutions

要解决性能问题,请执行以下步骤:

  1. 使用 Windows 资源监视器应用程序检查内存、CPU、磁盘和网络使用情况。如果需要使用 Kinesis Agent 的 Windows 流式传输大量数据,则可能需要在一些区域中配置具有更高容量的计算机,具体取决于配置。

  2. 您可以使用筛选功能减少记录的数据量:

  3. 使用 Windows 性能监视器应用程序查看 Windows 指标的 Kinesis 代理程序或者将这些指标流式传输到 CloudWatch 视器(参阅Windows 内置指标源的 Kinesis 代理)。在 Windows 性能监视器应用程序中,您可以为 Windows 接收器和源添加 Kinesis 代理计数器。它们列在 AWSKinesisTap Sinks (AWSKinesisTap 接收器)AWSKinesisTap Sources (AWSKinesisTap 源) 计数器类别下。

    显示 Windows 性能监视器应用程序中的 Windows Kinesis 代理计数器类别的控制台屏幕截图。

    例如,要诊断 Kinesis Data Firehose 的性能问题,需要将Kinesis Firehose 接收器性能计数器。

    显示 Kinesis Data Firehose 性能计数器的控制台屏幕截图。

    如果存在大量可恢复的错误,请检查中的 Windows 日志的最新 Kinesis 代理程序。%PROGRAMDATA%\Amazon\AWSKInesisTap\logs目录。如果 KinesisStreamKinesisFirehose 接收器出现限制,请执行以下操作:

    • 如果由于流式传输数据速度过快而出现限制,请考虑提高 Kinesis 数据流的分片数。有关更多信息,请参阅 。重新分片、扩展和并行处理中的Kinesis Data Streams 开发人员指南

    • 考虑提高 Kinesis Data Streams 的 API 调用限制,或者在 API 调用受到限制时增加接收器的缓冲区大小。有关更多信息,请参阅 。Kinesis Data Streams 限制中的Kinesis Data Streams 开发人员指南

    • 如果数据流式传输速度过快,请考虑请求提高 Kinesis Data Firehose 传输流的速率限制。或者,如果 API 调用正受到限制,则请求增加 API 调用限制(请参阅 Amazon Kinesis Data Firehose 限制)或者增加接收器的缓冲区大小。

    • 增加动能数据流的分片数量或者增加 Kinesis 数 Kinesis Data Firehose 传输流的速率限制后,修改 Windows 的 Kinesis 代理appsettings.json配置文件来增加接收器的每秒记录数或每秒字节数。否则,适用于 Windows 的 Kinesis 代理无法利用增加的限制。

适用于

该信息适用于适用于 Windows 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.

磁盘空间不足

Symptoms

适用于 Windows 的 Kinesis 代理正在运行的计算机上一个或多个磁盘驱动器上的磁盘空间非常少。

Causes

有多种可能的原因会导致此问题:

  • 适用于 Windows 日志记录配置文件不正确。

  • 适用于 Windows 的 Kinesis 代理持久队列配置不正确。

  • 其他某个应用程序或服务正在占用磁盘空间。

Resolutions

要解决磁盘空间问题,请执行以下步骤:

  • 如果包含 Windows 日志文件的 Kinesis 代理的磁盘上的磁盘空间不足,请检查日志文件目录(通常为%PROGRAMDATA%\Amazon\AWSKinesisTap\logs)。确保保留合理数量的日志文件,并确保日志文件的大小合理。您可以控制适用于 Windows 日志的 Kinesis 代理的位置、保留和详细程度,方法是编辑%PROGRAMFILES%\Amazon\AWSKinesisTap\Nlog.xml配置文件。

  • 启用接收器排队功能后,请检查使用该功能的接收器声明。确保 QueuePath 键/值对引用具有足够空间的磁盘驱动器,以能够容纳使用 QueueMaxBatches 键/值对指定的最大数量的批次。如果无法做到这一点,则减小 QueueMaxBatches 键/值对的值,以便数据轻松适合指定的磁盘驱动器的剩余磁盘空间。

  • 使用 Windows 文件资源管理器找到占用磁盘空间的文件,并传输或删除多余的文件。更改占用大量磁盘空间的应用程序或服务的配置。

适用于

该信息适用于适用于 Windows 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.

故障排除工具

除了验证配置文件之外,您可以使用ktdiag.exe工具,该工具在配置和使用适用于 Windows 的 Kinesis 代理时提供了其他几种诊断和解决问题的功能。ktdiag.exe 工具位于 %PROGRAMFILES%\Amazon\AWSKinesisTap 目录中。

  • 如果您认为具有特定文件模式的日志文件正在写入目录但未被处理,请使用/w开关以验证是否已检测到这些更改。例如,假设您希望带有 *.log 文件名模式的日志文件被写入 c:\foo 目录。执行 ktdiag.exe 工具时,可以使用 /w 开关并指定目录和文件模式:

    cd /D %PROGRAMFILES%\Amazon\AWSKinesisTap ktdiag /w c:\foo *.log

    如果正在写入日志文件,您可以看到类似于以下内容的输出:

    Type any key to exit this program... File: c:\foo\log1.log ChangeType: Created File: c:\foo\log1.log ChangeType: Deleted File: c:\foo\log1.log ChangeType: Created File: c:\foo\log1.log ChangeType: Changed File: c:\foo\log1.log ChangeType: Changed File: c:\foo\log1.log ChangeType: Changed File: c:\foo\log1.log ChangeType: Changed

    如果没有发生此类输出,则表示在写入日志时存在应用程序或服务问题,或者存在安全配置问题而不是的问题的 Windows Kinesis 代理问题。如果正在出现这样的输出,但适用于 Windows 的 Kinesis 代理仍然没有明显处理日志,请参阅没有数据从桌面或服务器流式传输到预期的 AWS 服务

  • 有时只会偶尔写入日志,但验证 Windows 的 Kinesis 代理是否正常运行会很有用。使用 /log4net 开关模拟使用 Log4net 库写入日志的应用程序;例如:

    cd /D %PROGRAMFILES%\Amazon\AWSKinesisTap KTDiag.exe /log4net c:\foo\log2.log

    这会将 Log4net 样式的日志文件写入 c:\foo\log2.log 日志文件,并在按下某个键之前不断添加新的日志条目。您可以在文件名后选择性地指定其他开关来配置多个选项:

    锁定:-lm-li-le

    您可以指定以下锁定开关之一来控制日志文件的锁定方式:

    -lm

    日志文件使用最少量的锁定,从而可以最大程度地访问日志文件。

    -li

    只有同一进程中的线程才能同时访问日志。

    -le

    一次只有一个线程可以访问日志。这是默认模式。

    -tn:毫秒

    指定日志条目写入操作之间的毫秒数。默认值为 1000 毫秒(1 秒)。

    -sm:字节

    指定每个日志条目的字节数。默认值为 1000 字节。

    -bk:number

    指定一次写入日志条目的数量。默认值为 1。

  • 有时,模拟写入 Windows 事件日志的应用程序很有用。使用 /e 开关在 Windows 事件日志中写入日志条目;例如:

    cd /D %PROGRAMFILES%\Amazon\AWSKinesisTap KTDiag.exe /e Application

    这会将日志条目写入 Windows 应用程序事件日志,直到按下一个键。您可以选择在日志名称后面指定以下附加选项:

    -tn:毫秒

    指定日志条目写入操作之间的毫秒数。默认值为 1000 毫秒(1 秒)。

    -sm:字节

    指定每个日志条目的字节数。默认值为 1000 字节。

    -bk:number

    指定一次写入日志条目的数量。默认值为 1。