手动创建或编辑 CloudWatch 代理配置文件 - Amazon CloudWatch

手动创建或编辑 CloudWatch 代理配置文件

CloudWatch 代理配置文件是一个 JSON 文件,其中包含四个部分:agentmetricslogstraces,如下所述:

  • agent 部分包含总体代理配置的字段。

  • metrics 部分指定要收集并发布到 CloudWatch 的自定义指标。如果只将代理用于收集日志,则可以忽略文件中的 metrics 部分。

  • logs 部分指定要将哪些日志文件发布到 CloudWatch Logs。如果服务器运行 Windows Server,这可能包括 Windows 事件日志中的事件。

  • traces 部分指定收集并发送到 AWS X-Ray 的跟踪信息的来源。

以下几节介绍了该 JSON 文件的结构和字段。您还可以查看该配置文件的架构定义。在 Linux 服务器上,架构定义位于 installation-directory/doc/amazon-cloudwatch-agent-schema.json 中;在运行 Windows Server 的服务器上,架构定义位于 installation-directory/amazon-cloudwatch-agent-schema.json 中。

如果手动创建或编辑 代理配置文件,则可以给它指定任何名称。为了简化故障排除,我们建议您在 Linux 服务器上将其命名为 /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json,在运行 Windows Server 的服务器上将其命名为 $Env:ProgramData\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent.json。创建该文件后,您可以将其复制到要安装代理的其他服务器上。

注意

CloudWatch 代理收集的指标、日志和跟踪记录会产生费用。有关定价的更多信息,请参阅 Amazon CloudWatch 定价

agent 部分包含以下字段。向导不会创建 agent 部分。相反,向导忽略该部分,并在该部分的所有字段中使用默认值。

  • metrics_collection_interval – 可选。指定该配置文件中指定的所有指标的收集频率。您可以为特定类型的指标覆盖该值。

    该值是以秒为单位指定的。例如,指定 10 将导致每 10 秒收集一次指标;将其设置为 300,将指定每 5 分钟收集一次指标。

    如果您将该值设置为低于 60 秒,则将每个指标作为高精度指标进行收集。有关高精度指标的更多信息,请参阅 高精度指标

    默认值是 60。

  • region – 指定在监控 Amazon EC2 实例时用于 CloudWatch 端点的区域。收集的指标将发送到该区域,例如,us-west-1。如果省略该字段,则该代理将指标发送到 Amazon EC2 实例所在的区域。

    如果监控本地服务器,则不使用该字段,该代理从 AWS 配置文件的 AmazonCloudWatchAgent 配置文件中读取区域。

  • credentials – 指定一个在向不同 AWS 账户发送指标、日志和跟踪信息时使用的 IAM 角色。如果指定,则此字段包含一个参数 role_arn

  • debug – 可选。指定使用调试日志消息运行 CloudWatch 代理。默认值为 false

  • aws_sdk_log_level – 可选。仅在 CloudWatch 代理版本 1.247350.0 及更高版本中受支持。

    您可以将此字段指定为以让代理为 AWS SDK 终端节点执行日志记录。此字段的值可以包括以下一个或多个选项。使用 | 字符分隔多个选项。

    • LogDebug

    • LogDebugWithSigning

    • LogDebugWithHTTPBody

    • LogDebugRequestRetries

    • LogDebugWithEventStreamBody

    有关这些选项的更多信息,请参阅 LogLevelType

  • logfile – 指定 CloudWatch 代理将日志消息写入到的位置。如果指定空字符串,则将日志传输到 stderr。如果未指定该选项,则默认位置如下所示:

    • Linux:/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log

    • Windows Server:c:\\ProgramData\\Amazon\\CloudWatchAgent\\Logs\\amazon-cloudwatch-agent.log

    CloudWatch 代理自动轮换它创建的日志文件。在日志文件大小达到 100 MB 时,将会轮换掉该文件。代理将轮换的日志文件最多保留七天,并最多保留五个轮换掉的备份日志文件。备份日志文件的文件名后附有时间戳。时间戳显示轮换掉文件的日期和时间,例如,amazon-cloudwatch-agent-2018-06-08T21-01-50.247.log.gz

  • omit_hostname – 可选。默认情况下,主机名将作为代理收集的指标维度进行发布(除非您使用 metrics 部分的 append_dimensions 字段)。将 omit_hostname 设置为 true,以禁止将主机名作为维度进行发布(即使在您没有使用 append_dimensions 的情况下)。默认值为 false

  • run_as_user – 可选。指定用于运行 CloudWatch 代理的用户。如果未指定该参数,则使用 root 用户。该选项仅在 Linux 服务器上有效。

    如果指定该选项,在启动 CloudWatch 代理之前,用户必须存在。有关更多信息,请参阅 以不同用户身份运行 CloudWatch 代理

  • user_agent – 可选。指定 user-agent 字符串,该字符串由 CloudWatch 代理在 CloudWatch 后端进行 API 调用时使用。默认值是由代理版本、用于编译代理的 Go 编程语言版本、运行时操作系统和架构、构建时间以及启用的插件组成的字符串。

  • usage_data – 可选。默认情况下,每当向 CloudWatch 发布指标或日志时,CloudWatch 代理都会向 CloudWatch 发送自身的运行状况和性能数据。这些数据不会产生任何费用。您可以通过将 usage_data 指定为 false,来防止代理发送这些数据。如果省略此参数,则将使用 true 的默认值,并且代理会发送运行状况和性能数据。

    如果将此值设置为 false,则必须停止并重新启动代理才能使其生效。

下面是 agent 部分的示例。

"agent": { "metrics_collection_interval": 60, "region": "us-west-1", "logfile": "/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log", "debug": false, "run_as_user": "cwagent" }

Linux 和 Windows 的通用字段

在运行 Linux 或 Windows Server 的服务器上,metrics 部分包含以下字段:

  • namespace – 可选。用于该代理收集的指标的命名空间。默认值为 CWAgent。最大长度为 255 个字符。以下是 示例:

    { "metrics": { "namespace": "Development/Product1Metrics", ...... }, }
  • append_dimensions – 可选。将 Amazon EC2 指标维度添加到该代理收集的所有指标中。这也会导致代理不会将主机名作为维度发布。

    以下列表中显示了受 append_dimensions 支持的键值对。任何其他密钥值对都将被忽略。代理支持与下表所列完全一致的键值对。您无法通过更改键值来发布其他维度名称。

    • "ImageId":"${aws:ImageId}" 将实例的 AMI ID 设置为 ImageId 维度的值。

    • "InstanceId":"${aws:InstanceId}" 将实例的实例 ID 设置为 InstanceId 维度的值。

    • "InstanceType":"${aws:InstanceType}" 将实例的实例类型设置为 InstanceType 维度的值。

    • "AutoScalingGroupName":"${aws:AutoScalingGroupName}" 将实例的 Auto Scaling 组名称设置为 AutoScalingGroupName 维度的值。

    如果您想将维度附加到具有任意键值对的指标,请在该字段中为该特定类型的指标使用 append_dimensions 参数。

    如果您指定一个值(该值取决于 Amazon EC2 元数据),并且使用代理,则必须确保服务器能够访问 Amazon EC2 的端点。有关这些端点的更多信息,请参阅 Amazon Web Services 一般参考 中的 Amazon Elastic Compute Cloud(Amazon EC2)

  • aggregation_dimensions – 可选。指定所收集的指标要在其上聚合的维度。例如,如果累积 AutoScalingGroupName 维度上的指标,则会汇总每个 Auto Scaling 组的所有实例中的指标,并将这些指标作为一个整体进行查看。

    您可以累积一个或多个维度的指标。例如,指定 [["InstanceId"], ["InstanceType"], ["InstanceId","InstanceType"]] 将单独汇总实例 ID 的指标,单独汇总实例类型的指标以及汇总两个维度组合的指标。

    您也可以指定 [] 以将所有指标累积到一个集合中,而不考虑任何维度。

  • endpoint_override – 指定一个 FIPS 终端节点或私有链接,以用作代理在其中发送指标的端点。如果指定此项并设置私有链接,您可以将指标发送到 Amazon VPC 终端节点。有关更多信息,请参阅 Amazon VPC 是什么?

    endpoint_override 的值必须是表示 URL 的字符串。

    例如,在配置文件的指标部分中,以下内容将代理设置为在发送指标时使用 VPC 终端节点。

    { "metrics": { "endpoint_override": "vpce-XXXXXXXXXXXXXXXXXXXXXXXXX.monitoring.us-east-1.vpce.amazonaws.com", ...... }, }
  • metrics_collected – 必需。指定要收集的指标,包括通过 StatsDcollectd 收集的自定义指标。该部分包含几个小节。

    metrics_collected 部分的内容取决于该配置文件适用于运行 Linux 还是 Windows Server 的服务器。

  • force_flush_interval – 以秒为单位指定指标在发送到服务器之前保留在内存缓冲区中的最大时间量。无论此处的设置如何,如果缓冲区中的指标大小达到 1MB 或 1000 个不同的指标,这些指标会立即发送到服务器。

    默认值是 60。

  • credentials – 指定一个在向不同账户发送指标时使用的 IAM 角色。如果指定,则此字段包含一个参数 role_arn

    • role_arn – 指定一个在向不同账户发送指标时用于身份验证的 IAM 角色的 ARN。有关更多信息,请参阅 向不同账户发送指标、日志和跟踪信息。如果在此指定,该值将覆盖在配置文件的 agent 部分指定的 role_arn(如果有)。

Linux 部分

在运行 Linux 的服务器上,配置文件的 metrics_collected 部分可能还包含以下字段。

其中的很多字段可能包含 measurement 部分,其中列出您要为该资源收集的指标。这些 measurement 部分可能指定了完整的指标名称(如 swap_used),也可能仅指定将附加到资源类型的指标名称部分。例如,如果在 diskio 部分的 measurement 部分中指定 reads,则会导致收集 diskio_reads 指标。

  • collectd – 可选。指定要使用 collectd 协议检索自定义指标。您可以使用 collectd 软件将指标发送到 CloudWatch 代理。有关可用于 collectd 的配置选项的更多信息,请参阅 使用 collectd 检索自定义指标

  • cpu – 可选。指定要收集的 CPU 指标。该部分仅适用于 Linux 实例。您必须对任何要收集的 CPU 指标至少包含 resourcestotalcpu 字段之一。此部分包含以下字段:

    • drop_original_metrics – 可选。如果您使用 metrics 部分中的 aggregation_dimensions 字段将指标以汇总为聚合结果,则默认情况下,代理会同时发送聚合指标和原始指标,原始指标是按维度的每个值分开的。如果您不希望将原始指标发送到 CloudWatch,则可以指定此参数和指标列表。同时指定了此参数的指标将不会将其各维度的指标报告给 CloudWatch,而只报告聚合指标。这可以减少代理要采集的指标数量,从而降低成本。

    • resources – 可选。利用值 * 指定此字段会使系统收集每个 CPU 的指标。唯一允许的值为 *

    • totalcpu – 可选。指定是否报告所有 CPU 内核的汇总 CPU 指标。默认值为 true。

    • measurement – 指定一组要收集的 CPU 指标。可能的值为 time_activetime_guesttime_guest_nicetime_idletime_iowaittime_irqtime_nicetime_softirqtime_stealtime_systemtime_userusage_activeusage_guestusage_guest_niceusage_idleusage_iowaitusage_irqusage_niceusage_softirqusage_stealusage_systemusage_user。如果包含 cpu,则该字段是必需的。

      默认情况下,cpu_usage_* 指标的单位是 Percentcpu_time_* 指标没有单位。

      在每个指标的条目中,您可以选择指定下面的一个或两个字段:

      • rename – 为该指标指定不同的名称。

      • unit – 指定用于该指标的单位,从而覆盖该指标的默认单位 None。您指定的单位必须是有效的 CloudWatch 指标单位,如 MetricDatumUnit 描述中所示。

    • metrics_collection_interval – 可选。指定收集 CPU 指标的频率,从而覆盖配置文件的 agent 部分中指定的全局 metrics_collection_interval

      该值是以秒为单位指定的。例如,指定 10 将导致每 10 秒收集一次指标;将其设置为 300,将指定每 5 分钟收集一次指标。

      如果您将该值设置为低于 60 秒,则将每个指标作为高精度指标进行收集。有关高精度指标的更多信息,请参阅 高精度指标

    • append_dimensions – 可选。仅用于 CPU 指标的其他维度。如果指定该字段,除了用于该代理收集的所有类型的指标的全局 append_dimensions 字段中指定的维度以外,还会使用该字段中的维度。

  • disk – 可选。指定要收集的磁盘指标。该部分仅适用于 Linux 实例。此部分包含以下字段:

    • drop_original_metrics – 可选。如果您使用 metrics 部分中的 aggregation_dimensions 字段将指标以汇总为聚合结果,则默认情况下,代理会同时发送聚合指标和原始指标,原始指标是按维度的每个值分开的。如果您不希望将原始指标发送到 CloudWatch,则可以指定此参数和指标列表。同时指定了此参数的指标将不会将其各维度的指标报告给 CloudWatch,而只报告聚合指标。这可以减少代理要采集的指标数量,从而降低成本。

    • resources – 可选。指定一组磁盘装载点。该字段将 CloudWatch 限制为仅从列出的挂载点中收集指标。您可以指定 * 值以从所有装载点中收集指标。默认值为从所有装载点中收集指标。

    • measurement – 指定一组要收集的磁盘指标。可能的值为 freetotalusedused_percentinodes_freeinodes_usedinodes_total。如果包含 disk,则该字段是必需的。

      注意

      disk 指标具有一个用于 Partition 的维度 ,这意味着生成的自定义指标的数量取决于与您的实例关联的分区数量。您拥有的磁盘分区数取决于您使用的 AMI 以及您附加到服务器的 Amazon EBS 卷数。

      要查看每个 disk 指标的默认单位,请参阅Linux 和 macOS 实例上的 CloudWatch 代理收集的指标

      在每个指标的条目中,您可以选择指定下面的一个或两个字段:

      • rename – 为该指标指定不同的名称。

      • unit – 指定用于该指标的单位,从而覆盖该指标的 None 默认单位 None。您指定的单位必须是有效的 CloudWatch 指标单位,如 MetricDatumUnit 描述中所示。

    • ignore_file_system_types – 指定在收集磁盘指标时要排除的文件系统类型。有效值包括 sysfsdevtmpfs 等等。

    • drop_device – 将其设置为 true 会导致 Device 不会作为磁盘指标的维度被包括在内。

      对于使用 Nitro 系统的实例来说,防止 Device 被用作维度非常有用,因为在这些实例上,当实例重新启动时,每个磁盘装载的设备名称都会发生变化。这可能会导致指标中的数据不一致,并导致基于这些指标的警报变成 INSUFFICIENT DATA 状态。

      默认为 false

    • metrics_collection_interval – 可选。指定收集磁盘指标的频率,从而覆盖配置文件的 agent 部分中指定的全局 metrics_collection_interval

      该值是以秒为单位指定的。

      如果您将该值设置为低于 60 秒,则将每个指标作为高精度指标进行收集。有关更多信息,请参阅 高精度指标

    • append_dimensions – 可选。仅用于磁盘指标的其他维度。如果指定该字段,除了用于该代理收集的所有类型的指标的 append_dimensions 字段中指定的维度以外,还会使用该字段中的维度。

  • diskio – 可选。指定要收集的磁盘 I/O 指标。该部分仅适用于 Linux 实例。此部分包含以下字段:

    • drop_original_metrics – 可选。如果您使用 metrics 部分中的 aggregation_dimensions 字段将指标以汇总为聚合结果,则默认情况下,代理会同时发送聚合指标和原始指标,原始指标是按维度的每个值分开的。如果您不希望将原始指标发送到 CloudWatch,则可以指定此参数和指标列表。同时指定了此参数的指标将不会将其各维度的指标报告给 CloudWatch,而只报告聚合指标。这可以减少代理要采集的指标数量,从而降低成本。

    • resources – 可选。如果指定一组设备,CloudWatch 仅从这些设备中收集指标。否则,将收集所有设备的指标。也可以指定 * 值以从所有设备中收集指标。

    • measurement – 指定一组要收集的 diskio 指标。可能的值为 readswritesread_byteswrite_bytesread_timewrite_timeio_timeiops_in_progress。如果包含 diskio,则该字段是必需的。

      在每个指标的条目中,您可以选择指定下面的一个或两个字段:

      • rename – 为该指标指定不同的名称。

      • unit – 指定用于该指标的单位,从而覆盖该指标的 None 默认单位 None。您指定的单位必须是有效的 CloudWatch 指标单位,如 MetricDatumUnit 描述中所示。

    • metrics_collection_interval – 可选。指定收集磁盘 I/O 指标的频率,从而覆盖配置文件的 agent 部分中指定的全局 metrics_collection_interval

      该值是以秒为单位指定的。

      如果您将该值设置为低于 60 秒,则将每个指标作为高精度指标进行收集。有关高精度指标的更多信息,请参阅 高精度指标

    • append_dimensions – 可选。仅用于磁盘 I/O 指标的其他维度。如果指定该字段,除了用于该代理收集的所有类型的指标的 append_dimensions 字段中指定的维度以外,还会使用该字段中的维度。

  • swap – 可选。指定要收集的交换内存指标。该部分仅适用于 Linux 实例。此部分包含以下字段:

    • drop_original_metrics – 可选。如果您使用 metrics 部分中的 aggregation_dimensions 字段将指标以汇总为聚合结果,则默认情况下,代理会同时发送聚合指标和原始指标,原始指标是按维度的每个值分开的。如果您不希望将原始指标发送到 CloudWatch,则可以指定此参数和指标列表。同时指定了此参数的指标将不会将其各维度的指标报告给 CloudWatch,而只报告聚合指标。这可以减少代理要采集的指标数量,从而降低成本。

    • measurement – 指定一组要收集的交换内存指标。可能的值为 freeusedused_percent。如果包含 swap,则该字段是必需的。

      要查看每个 swap 指标的默认单位,请参阅Linux 和 macOS 实例上的 CloudWatch 代理收集的指标

      在每个指标的条目中,您可以选择指定下面的一个或两个字段:

      • rename – 为该指标指定不同的名称。

      • unit – 指定用于该指标的单位,从而覆盖该指标的 None 默认单位 None。您指定的单位必须是有效的 CloudWatch 指标单位,如 MetricDatumUnit 描述中所示。

    • metrics_collection_interval – 可选。指定收集交换内存指标的频率,从而覆盖配置文件的 agent 部分中指定的全局 metrics_collection_interval

      该值是以秒为单位指定的。

      如果您将该值设置为低于 60 秒,则将每个指标作为高精度指标进行收集。有关高精度指标的更多信息,请参阅 高精度指标

    • append_dimensions – 可选。仅用于交换内存指标的其他维度。如果指定该字段,除了用于该代理收集的所有类型的指标的全局 append_dimensions 字段中指定的维度以外,还会使用该字段中的维度。这是作为高精度指标收集的。

  • mem – 可选。指定要收集的内存指标。该部分仅适用于 Linux 实例。此部分包含以下字段:

    • drop_original_metrics – 可选。如果您使用 metrics 部分中的 aggregation_dimensions 字段将指标以汇总为聚合结果,则默认情况下,代理会同时发送聚合指标和原始指标,原始指标是按维度的每个值分开的。如果您不希望将原始指标发送到 CloudWatch,则可以指定此参数和指标列表。同时指定了此参数的指标将不会将其各维度的指标报告给 CloudWatch,而只报告聚合指标。这可以减少代理要采集的指标数量,从而降低成本。

    • measurement – 指定一组要收集的内存指标。可能的值为 activeavailableavailable_percentbufferedcachedfreeinactivetotalusedused_percent。如果包含 mem,则该字段是必需的。

      要查看每个 mem 指标的默认单位,请参阅Linux 和 macOS 实例上的 CloudWatch 代理收集的指标

      在每个指标的条目中,您可以选择指定下面的一个或两个字段:

      • rename – 为该指标指定不同的名称。

      • unit – 指定用于该指标的单位,从而覆盖该指标的默认单位 None。您指定的单位必须是有效的 CloudWatch 指标单位,如 MetricDatumUnit 描述中所示。

    • metrics_collection_interval – 可选。指定收集内存指标的频率,从而覆盖配置文件的 agent 部分中指定的全局 metrics_collection_interval

      该值是以秒为单位指定的。

      如果您将该值设置为低于 60 秒,则将每个指标作为高精度指标进行收集。有关高精度指标的更多信息,请参阅 高精度指标

    • append_dimensions – 可选。仅用于内存指标的其他维度。如果指定该字段,除了用于该代理收集的所有类型的指标的 append_dimensions 字段中指定的维度以外,还会使用该字段中的维度。

  • net – 可选。指定要收集的每个联网指标。该部分仅适用于 Linux 实例。此部分包含以下字段:

    • drop_original_metrics – 可选。如果您使用 metrics 部分中的 aggregation_dimensions 字段将指标以汇总为聚合结果,则默认情况下,代理会同时发送聚合指标和原始指标,原始指标是按维度的每个值分开的。如果您不希望将原始指标发送到 CloudWatch,则可以指定此参数和指标列表。同时指定了此参数的指标将不会将其各维度的指标报告给 CloudWatch,而只报告聚合指标。这可以减少代理要采集的指标数量,从而降低成本。

    • resources – 可选。如果指定一组网络接口,CloudWatch 仅从这些接口中收集指标。否则,将收集所有设备的指标。也可以指定 * 值以从所有接口中收集指标。

    • measurement – 指定一组要收集的联网指标。可能的值为 bytes_sentbytes_recvdrop_indrop_outerr_inerr_outpackets_sentpackets_recv。如果包含 net,则该字段是必需的。

      要查看每个 net 指标的默认单位,请参阅Linux 和 macOS 实例上的 CloudWatch 代理收集的指标

      在每个指标的条目中,您可以选择指定下面的一个或两个字段:

      • rename – 为该指标指定不同的名称。

      • unit – 指定用于该指标的单位,从而覆盖该指标的默认单位 None。您指定的单位必须是有效的 CloudWatch 指标单位,如 MetricDatumUnit 描述中所示。

    • metrics_collection_interval – 可选。指定收集网络指标的频率,从而覆盖配置文件的 agent 部分中指定的全局 metrics_collection_interval

      该值是以秒为单位指定的。例如,指定 10 将导致每 10 秒收集一次指标;将其设置为 300,将指定每 5 分钟收集一次指标。

      如果您将该值设置为低于 60 秒,则将每个指标作为高精度指标进行收集。有关高精度指标的更多信息,请参阅 高精度指标

    • append_dimensions – 可选。仅用于网络指标的其他维度。如果指定该字段,除了用于该代理收集的所有类型的指标的 append_dimensions 字段中指定的维度以外,还会使用该字段中的维度。

  • netstat – 可选。指定收集 TCP 连接状态和 UDP 连接指标。该部分仅适用于 Linux 实例。此部分包含以下字段:

    • drop_original_metrics – 可选。如果您使用 metrics 部分中的 aggregation_dimensions 字段将指标以汇总为聚合结果,则默认情况下,代理会同时发送聚合指标和原始指标,原始指标是按维度的每个值分开的。如果您不希望将原始指标发送到 CloudWatch,则可以指定此参数和指标列表。同时指定了此参数的指标将不会将其各维度的指标报告给 CloudWatch,而只报告聚合指标。这可以减少代理要采集的指标数量,从而降低成本。

    • measurement – 指定一组要收集的网络状态指标。可能的值为 tcp_closetcp_close_waittcp_closingtcp_establishedtcp_fin_wait1tcp_fin_wait2tcp_last_acktcp_listentcp_nonetcp_syn_senttcp_syn_recvtcp_time_waitudp_socket。如果包含 netstat,则该字段是必需的。

      要查看每个 netstat 指标的默认单位,请参阅Linux 和 macOS 实例上的 CloudWatch 代理收集的指标

      在每个指标的条目中,您可以选择指定下面的一个或两个字段:

      • rename – 为该指标指定不同的名称。

      • unit – 指定用于该指标的单位,从而覆盖该指标的默认单位 None。您指定的单位必须是有效的 CloudWatch 指标单位,如 MetricDatumUnit 描述中所示。

    • metrics_collection_interval – 可选。指定收集网络状态指标的频率,从而覆盖配置文件的 agent 部分中指定的全局 metrics_collection_interval

      该值是以秒为单位指定的。

      如果您将该值设置为低于 60 秒,则将每个指标作为高精度指标进行收集。有关高精度指标的更多信息,请参阅 高精度指标

    • append_dimensions – 可选。仅用于网络状态指标的其他维度。如果指定该字段,除了用于该代理收集的所有类型的指标的 append_dimensions 字段中指定的维度以外,还会使用该字段中的维度。

  • processes – 可选。指定要收集的进程指标。该部分仅适用于 Linux 实例。此部分包含以下字段:

    • drop_original_metrics – 可选。如果您使用 metrics 部分中的 aggregation_dimensions 字段将指标以汇总为聚合结果,则默认情况下,代理会同时发送聚合指标和原始指标,原始指标是按维度的每个值分开的。如果您不希望将原始指标发送到 CloudWatch,则可以指定此参数和指标列表。同时指定了此参数的指标将不会将其各维度的指标报告给 CloudWatch,而只报告聚合指标。这可以减少代理要采集的指标数量,从而降低成本。

    • measurement – 指定一组要收集的进程指标。可能的值为 blockeddeadidlepagingrunningsleepingstoppedtotaltotal_threadswaitzombies。如果包含 processes,则该字段是必需的。

      对于所有 processes 指标,默认单位为 None

      在每个指标的条目中,您可以选择指定下面的一个或两个字段:

      • rename – 为该指标指定不同的名称。

      • unit – 指定用于该指标的单位,从而覆盖该指标的默认单位 None。您指定的单位必须是有效的 CloudWatch 指标单位,如 MetricDatumUnit 描述中所示。

    • metrics_collection_interval – 可选。指定收集进程指标的频率,从而覆盖配置文件的 agent 部分中指定的全局 metrics_collection_interval

      该值是以秒为单位指定的。例如,指定 10 将导致每 10 秒收集一次指标;将其设置为 300,将指定每 5 分钟收集一次指标。

      如果您将该值设置为低于 60 秒,则将每个指标作为高精度指标进行收集。有关更多信息,请参阅 高精度指标

    • append_dimensions – 可选。仅用于进程指标的其他维度。如果指定该字段,除了用于该代理收集的所有类型的指标的 append_dimensions 字段中指定的维度以外,还会使用该字段中的维度。

  • nvidia_gpu – 可选。指定要收集的 NVIDIA GPU 指标。本部分仅适用于配置了 NVIDIA GPU 加速器并安装了 NVIDIA 系统管理界面(nvidia-smi)的主机上的 Linux 实例。

    收集的 NVIDIA GPU 指标以字符串 nvidia_smi_ 作为前缀以与收集的其他加速器类型的指标进行区分。此部分包含以下字段:

    • drop_original_metrics – 可选。如果您使用 metrics 部分中的 aggregation_dimensions 字段将指标以汇总为聚合结果,则默认情况下,代理会同时发送聚合指标和原始指标,原始指标是按维度的每个值分开的。如果您不希望将原始指标发送到 CloudWatch,则可以指定此参数和指标列表。同时指定了此参数的指标将不会将其各维度的指标报告给 CloudWatch,而只报告聚合指标。这可以减少代理要采集的指标数量,从而降低成本。

    • measurement – 指定一组要收集的 NVIDIA GPU 指标。有关此处可能使用的值的列表,请参阅 收集 NVIDIA GPU 指标 表中的指标列。

      在每个指标的条目中,您可以选择指定以下一个或两个字段:

      • rename – 为该指标指定不同的名称。

      • unit – 指定用于该指标的单位,从而覆盖该指标的默认单位 None。您指定的单位必须是有效的 CloudWatch 指标单位,如 MetricDatumUnit 描述中所示。

    • metrics_collection_interval – 可选。指定收集 NVIDIA GPU 指标的频率,从而覆盖配置文件的 agent 部分中指定的全局 metrics_collection_interval

  • procstat – 可选。指定您希望从各个流程检索指标。有关可用于 procstat 的配置选项的更多信息,请参阅 使用 procstat 插件收集流程指标

  • statsd – 可选。指定要使用 StatsD 协议检索自定义指标。CloudWatch 代理充当协议的守护进程。您可以使用任何标准 StatsD 客户端将指标发送到 CloudWatch 代理。有关可用于 StatsD 的配置选项的更多信息,请参阅 使用 StatsD 检索自定义指标

  • ethtool – 可选。指定要使用 ethtool 插件检索网络指标。此插件可以导入标准 ethtool 实用工具收集的指标,以及 Amazon EC2 实例中的网络性能指标。有关可用于 ethtool 的配置选项的更多信息,请参阅 收集网络性能指标

下面是一个适用于 Linux 服务器的 metrics 部分示例。在此示例中,会收集三个 CPU 指标、三个 netstat 指标、三个流程指标和一个磁盘指标,并将代理设置为从 collectd 客户端接收其他指标。

"metrics": { "aggregation_dimensions" : [["AutoScalingGroupName"], ["InstanceId", "InstanceType"],[]], "metrics_collected": { "collectd": {}, "cpu": { "resources": [ "*" ], "measurement": [ {"name": "cpu_usage_idle", "rename": "CPU_USAGE_IDLE", "unit": "Percent"}, {"name": "cpu_usage_nice", "unit": "Percent"}, "cpu_usage_guest" ], "totalcpu": false, "drop_original_metrics": [ "cpu_usage_guest" ], "metrics_collection_interval": 10, "append_dimensions": { "test": "test1", "date": "2017-10-01" } }, "netstat": { "measurement": [ "tcp_established", "tcp_syn_sent", "tcp_close" ], "metrics_collection_interval": 60 }, "disk": { "measurement": [ "used_percent" ], "resources": [ "*" ], "drop_device": true }, "processes": { "measurement": [ "running", "sleeping", "dead" ] } }, "append_dimensions": { "ImageId": "${aws:ImageId}", "InstanceId": "${aws:InstanceId}", "InstanceType": "${aws:InstanceType}", "AutoScalingGroupName": "${aws:AutoScalingGroupName}" } }

Windows Server

在 Windows Server 的 metrics_collected 部分中,您可以包含每个 Windows 性能对象的小节,例如,MemoryProcessorLogicalDisk。有关可用的对象和计数器的信息,请参阅 Microsoft Windows 文档性能计数器

在每个对象的小节中,您可以指定要收集的计数器的 measurement 数组。需要为在配置文件中指定的每个对象指定 measurement 数组。您也可以指定 resources 字段以命名从中收集指标的实例。您还可以为 resources 指定 *,以便为每个实例收集单独的指标。如果省略具有实例的计数器的 resources,则所有实例的数据会聚合到一个组中。如果省略没有实例的计数器的 resources,CloudWatch 代理则不会收集计数器。要确定计数器是否有实例,可以使用以下命令之一。

Powershell:

Get-Counter -ListSet *

命令行(不是 Powershell):

TypePerf.exe –q

在每个对象部分中,您还可以指定以下可选字段:

  • metrics_collection_interval – 可选。指定为该对象收集指标的频率,从而覆盖配置文件的 agent 部分中指定的全局 metrics_collection_interval

    该值是以秒为单位指定的。例如,指定 10 将导致每 10 秒收集一次指标;将其设置为 300,将指定每 5 分钟收集一次指标。

    如果您将该值设置为低于 60 秒,则将每个指标作为高精度指标进行收集。有关更多信息,请参阅 高精度指标

  • append_dimensions – 可选。指定仅用于该对象的指标的其他维度。如果指定该字段,除了用于该代理收集的所有类型的指标的全局 append_dimensions 字段中指定的维度以外,还会使用该字段中的维度。

  • drop_original_metrics – 可选。如果您使用 metrics 部分中的 aggregation_dimensions 字段将指标以汇总为聚合结果,则默认情况下,代理会同时发送聚合指标和原始指标,原始指标是按维度的每个值分开的。如果您不希望将原始指标发送到 CloudWatch,则可以指定此参数和指标列表。同时指定了此参数的指标将不会将其各维度的指标报告给 CloudWatch,而只报告聚合指标。这可以减少代理要采集的指标数量,从而降低成本。

在每个计数器部分中,您还可以指定以下可选字段:

  • rename – 指定在 CloudWatch 中用于该指标的不同名称。

  • unit – 指定用于该指标的单位。您指定的单位必须是有效的 CloudWatch 指标单位,如 MetricDatumUnit 描述中所示。

您可以在 metrics_collected 中包括两个其他可部分:

  • statsd – 让您能够使用 StatsD 协议检索自定义指标。CloudWatch 代理充当协议的守护进程。您可以使用任何标准 StatsD 客户端将指标发送到 CloudWatch 代理。有关更多信息,请参阅 使用 StatsD 检索自定义指标

  • procstat – 让您能够从各个流程检索指标。有关更多信息,请参阅 使用 procstat 插件收集流程指标

下面是一个用于 Windows Server 的 metrics 部分的示例。在此示例中,会收集许多 Windows 指标,并且计算机也被设置为从 StatsD 客户端接收其他指标。

"metrics": { "metrics_collected": { "statsd": {}, "Processor": { "measurement": [ {"name": "% Idle Time", "rename": "CPU_IDLE", "unit": "Percent"}, "% Interrupt Time", "% User Time", "% Processor Time" ], "resources": [ "*" ], "append_dimensions": { "d1": "win_foo", "d2": "win_bar" } }, "LogicalDisk": { "measurement": [ {"name": "% Idle Time", "unit": "Percent"}, {"name": "% Disk Read Time", "rename": "DISK_READ"}, "% Disk Write Time" ], "resources": [ "*" ] }, "Memory": { "metrics_collection_interval": 5, "measurement": [ "Available Bytes", "Cache Faults/sec", "Page Faults/sec", "Pages/sec" ], "append_dimensions": { "d3": "win_bo" } }, "Network Interface": { "metrics_collection_interval": 5, "measurement": [ "Bytes Received/sec", "Bytes Sent/sec", "Packets Received/sec", "Packets Sent/sec" ], "resources": [ "*" ], "append_dimensions": { "d3": "win_bo" } }, "System": { "measurement": [ "Context Switches/sec", "System Calls/sec", "Processor Queue Length" ], "append_dimensions": { "d1": "win_foo", "d2": "win_bar" } } }, "append_dimensions": { "ImageId": "${aws:ImageId}", "InstanceId": "${aws:InstanceId}", "InstanceType": "${aws:InstanceType}", "AutoScalingGroupName": "${aws:AutoScalingGroupName}" }, "aggregation_dimensions" : [["ImageId"], ["InstanceId", "InstanceType"], ["d1"],[]] } }

logs 部分包含以下字段:

  • logs_collected – 如果包含 logs 部分,则为必需。指定从服务器中收集的日志文件和 Windows 事件日志。它可以包含两个字段:fileswindows_events

    • files – 指定 CloudWatch 代理收集的常规日志文件。它包含一个字段 (collect_list),它进一步定义这些文件。

      • collect_list – 如果包含 files,则为必需。包含一组条目,每个条目指定一个要收集的日志文件。其中的每个条目可以包含以下字段:

        • file_path – 指定要上传到 CloudWatch Logs 的日志文件的路径。接受标准 Unix Glob 匹配规则,并添加 ** 以作为超级星号。例如,指定 /var/log/**.log 将导致收集 /var/log 目录树中的所有 .log 文件。有关更多示例,请参阅 Glob 库

          您也可以使用标准星号作为标准通配符。例如,/var/log/system.log*/var/log 中的 system.log_1111system.log_2222 等文件匹配。

          根据文件修改时间,只有最新文件才会推送到 CloudWatch Logs。我们建议您使用通配符指定同一类型的一系列文件(如 access_log.2018-06-01-01access_log.2018-06-01-02)而不是多个不同类型的文件(如 access_log_80access_log_443)。要指定多个类型的文件,请向代理配置文件再添加一个日志流条目,让每种日志文件都转到不同的日志流。

        • auto_removal – 可选。如果该值为 true,且此日志文件已经轮换,则 CloudWatch 代理会在读取到该文件后自动将其删除。通常,日志文件将其在全部内容上传到 CloudWatch Logs 后被删除,但如果代理到达 EOF(文件末尾)并同时检测到其他具有相同 file_path 的新日志文件,则代理将删除旧文件,因此,您必须确保您已在创建新文件前完成对旧文件的写入。RUST 跟踪库存在已知的不兼容性,因为它可能会在创建一个新的日志文件后,仍尝试写入旧的日志文件。

          代理仅从创建多个文件的日志中删除完整的文件,例如为每个日期创建单独文件的日志。如果日志连续写入单个文件,则不会删除该日志。

          如果您已经有轮换或删除日志文件的方法,建议您忽略此字段或者将其设置为 false

          如果省略该字段,则使用 false 的默认值。

        • log_group_name – 可选。指定要在 CloudWatch Logs 中使用的日志组名称。

          我们建议您使用此字段指定日志组,以防混淆。如果您省略 log_group_name,系统会将最后一个点之前的 file_path 的值作为日志组名称。例如,如果文件路径为 /tmp/TestLogFile.log.2017-07-11-14,则日志组名称为 /tmp/TestLogFile.log

          如果您指定日志组名称,您可以使用 {instance_id}{hostname}{local_hostname}{ip_address} 作为名称中的变量。{hostname} 会从 EC2 元数据中检索主机名,{local_hostname} 会使用网络配置文件中的主机名。

          如果使用这些变量创建许多不同的日志组,请记住每个区域每个账户存在 1000000 个日志组的限制。

          允许的字符包括 a–z、A–Z、0–9、“_”(下划线)、“-”(连字符)、“/”(正斜杠)和“.”(句点)。

        • log_group_class – 可选。指定要用于新日志组的日志组类。有关日志组类的更多信息,请参阅 Log classes

          有效值为 STANDARDINFREQUENT_ACCESS。如果省略该字段,则使用 STANDARD 的默认值。

          重要

          在创建日志组后,无法更改其类。

        • log_stream_name – 可选。指定要在 CloudWatch Logs 中使用的日志流名称。您可以在名称中包含 {instance_id}{hostname}{local_hostname}{ip_address} 作为变量。{hostname} 从 EC2 元数据中检索主机名,{local_hostname} 使用网络配置文件中的主机名。

          如果省略此字段,则使用全局 logs 部分中 log_stream_name 参数的值。如果也省略了该值,则使用 {instance_id} 的默认值。

          如果还没有日志流,则会自动创建一个日志流。

        • retention_in_days – 可选。在指定的日志组中指定保留日志事件的天数。

          • 如果代理目前正在创建此日志组,并且您忽略此字段,则此新日志组的保留期将设置为永不过期。

          • 如果此日志组已存在,并且您指定了此字段,则将使用您指定的新保留期。如果您为已存在的日志组忽略此字段,则日志组的保留不会更改。

            CloudWatch 代理向导在创建代理配置文件且您未指定日志保留值时,使用 -1 作为此字段的默认值。此 -1 值由向导设置,其指定日志组中的事件永不过期。但是,手动将此值编辑为 -1 是无效的。

          有效的值为 1、3、5、7、14、30、60、90、120、150、180、365、400、545、731、1827、2192、2557、2922、3288 和 3653。

          如果配置代理以将多个日志流写入同一个日志组,则在一个位置指定 retention_in_days 将为整个日志组设置日志保留。如果您在多个位置为同一日志组指定 retention_in_days,则在所有这些值均相等时才会设置保留。但是,如果在多个位置为同一日志组指定不同的 retention_in_days 值,则不会设置日志保留,代理将停止并返回错误。

          注意

          代理的 IAM 角色或 IAM 用户必须拥有 logs:PutRetentionPolicy 才能设置保留策略。有关更多信息,请参阅 允许 CloudWatch 代理设置日志保留策略

          警告

          如果您为已存在的日志组设置 retention_in_days,则该日志组中在您指定天数之前发布的所有日志都将被删除。例如,将其设置为 3 会导致 3 天前和之前的所有日志被删除。

        • filters – 可选。可以包含一组条目,其中的每个条目都指定一个正则表达式和筛选条件类型以指定是否发布或删除与筛选条件匹配的日志条目。如果您忽略此字段,则日志文件中的所有日志都会发布到 CloudWatch Logs。如果您包括此字段,则代理将使用您指定的所有筛选条件处理每条日志消息,并且只有通过所有筛选条件的日志事件才会发布到 CloudWatch Logs。未通过所有筛选条件的日志条目仍将保留在主机的日志文件中,但不会发送到 CloudWatch Logs。

          筛选条件数组中的每个条目可以包含以下字段:

          • type— 表示筛选条件类型。有效值为 includeexclude。对于 include,日志条目必须与要发布到 CloudWatch Logs 的表达式匹配。对于 exclude,与筛选条件匹配的每个日志条目不会发送到 CloudWatch Logs。

          • expression— 遵循 RE2 语法的正则表达式字符串。

            注意

            CloudWatch 代理不会检查您提供的任何正则表达式的性能,也不会限制正则表达式评估的运行时间。我们建议您不要编写评估昂贵的表达式。有关可能问题的更多信息,请参阅正则表达式拒绝服务 - ReDoS

          例如,以下 CloudWatch 代理配置文件的摘录会向 CloudWatch Logs 发布 PUT 和 POST 请求的日志,但不包括来自 Firefox 的日志。

          "collect_list": [ { "file_path": "/opt/aws/amazon-cloudwatch-agent/logs/test.log", "log_group_name": "test.log", "log_stream_name": "test.log", "filters": [ { "type": "exclude", "expression": "Firefox" }, { "type": "include", "expression": "P(UT|OST)" } ] }, ..... ]
          注意

          配置文件中筛选条件的顺序对性能至关重要。在上一个示例中,代理在开始评估第二个筛选条件之前会删除与 Firefox 匹配的所有日志。为了减少多个筛选条件评估的日志条目,首先将预计排除更多日志的筛选条件放在配置文件中。

        • timezone – 可选。指定在日志事件中放置时间戳时要使用的时区。有效值为 UTCLocal。默认值为 Local

          如果您不指定 timestamp_format 的值,此参数将被忽略。

        • timestamp_format – 可选。使用纯文本和以 % 开头的特殊符号指定时间戳格式。如果省略该字段,则使用当前时间。如果使用该字段,您可以使用以下列表中的符号作为格式的一部分。

          如果单个日志条目包含两个与该格式相符的时间戳,则使用第一个时间戳。

          此符号列表与较旧的 CloudWatch Logs 代理使用的列表不同。有关这些区别的摘要,请参阅统一的 CloudWatch 代理和更早的 CloudWatch Logs 代理之间的时间戳差异

          %y

          使用以零填充的十进制数字形式的没有世纪的年份。例如,19 表示 2019 年。

          %Y

          使用十进制数字形式的具有世纪的年份。例如,2019

          %b

          使用区域设置的缩写名称形式的月份

          %B

          使用区域设置的完整名称形式的月份

          %m

          使用以零填充的十进制数字形式的月份

          %-m

          十进制数字形式的月份 (不使用零填充)

          %d

          使用以零填充的十进制数字形式的日期

          %-d

          十进制数字形式的日期 (不使用零填充)

          %A

          星期的全称,例如 Monday

          %a

          星期的缩写,例如 Mon

          %H

          使用以零填充的十进制数字形式的小时 (24 小时制)

          %I

          使用以零填充的十进制数字形式的小时 (12 小时制)

          %-I

          十进制数字形式的小时(12 小时制)(不使用零填充)

          %p

          AM 或 PM

          %M

          使用以零填充的十进制数字形式的分钟

          %-M

          十进制数字形式的分钟 (不使用零填充)

          %S

          使用以零填充的十进制数字形式的秒

          %-S

          十进制数字形式的秒 (不使用零填充)

          %f

          小数秒采用十进制数(1-9 位数),左侧用零填充。

          %Z

          时区,例如 PST

          %z

          时区,以本地时区与 UTC 的偏移量表示。例如,-0700。仅支持此格式。例如,-07:00 不是有效格式。

        • multi_line_start_pattern – 指定用于识别日志消息开头的模式。日志消息由与模式匹配的行以及与模式不匹配的任何后续行组成。

          如果您省略此字段,则会禁用多行模式,而且以非空格字符开头的任何行都会使上一个日志消息结束 (如果存在),并开始新的日志消息。

          如果包含该字段,您可以指定 {timestamp_format} 以使用与您的时间戳格式相同的正则表达式。否则,您可以为 CloudWatch Logs 指定不同的正则表达式,以用于确定多行条目的起始行。

        • encoding – 指定日志文件的编码,以便正确读取该文件。如果您指定错误的编码,则可能导致数据丢失,因为无法解码的字符将被其他字符替代。

          默认值为 utf-8。以下是所有可能值:

          ascii, big5, euc-jp, euc-kr, gbk, gb18030, ibm866, iso2022-jp, iso8859-2, iso8859-3, iso8859-4, iso8859-5, iso8859-6, iso8859-7, iso8859-8, iso8859-8-i, iso8859-10, iso8859-13, iso8859-14, iso8859-15, iso8859-16, koi8-r, koi8-u, macintosh, shift_jis, utf-8, utf-16, utf-16le, UTF-16, UTF-16LE, windows-874, windows-1250, windows-1251, windows-1252, windows-1253, windows-1254, windows-1255, windows-1256, windows-1257, windows-1258, x-mac-cyrillic

    • windows_events 部分指定从运行 Windows Server 的服务器中收集的 Windows 事件类型。其中包括以下字段:

      • collect_list – 如果包含 windows_events,则为必需。指定要收集的 Windows 事件的类型和级别。要收集的每个日志在该部分中包含一个条目,其中可以包含以下字段:

        • event_name – 指定要记录的 Windows 事件的类型。这等同于 Windows 事件日志通道名称:例如 SystemSecurityApplication 等。要记录的每种类型的 Windows 事件需要使用该字段。

          注意

          当 CloudWatch 从 Windows 日志通道检索消息时,它会根据其 Full Name 属性查找日志通道。同时,Windows 事件查看器导航窗格将显示日志通道的 Log Name 属性。Full NameLog Name 并不总是匹配。确认通道的 Full Name,在 Windows 事件查看器中右键单击,然后打开 Properties(属性)

        • event_levels – 指定要录入的事件的级别。您必须指定要录入的每个级别。可能的值包括 INFORMATIONWARNINGERRORCRITICALVERBOSE。要记录的每种类型的 Windows 事件需要使用该字段。

        • log_group_name – 必需。指定要在 CloudWatch Logs 中使用的日志组名称。

        • log_stream_name – 可选。指定要在 CloudWatch Logs 中使用的日志流名称。您可以在名称中包含 {instance_id}{hostname}{local_hostname}{ip_address} 作为变量。{hostname} 从 EC2 元数据中检索主机名,{local_hostname} 使用网络配置文件中的主机名。

          如果省略此字段,则使用全局 logs 部分中 log_stream_name 参数的值。如果也省略了该值,则使用 {instance_id} 的默认值。

          如果还没有日志流,则会自动创建一个日志流。

        • event_format – 可选。指定在 CloudWatch Logs 中存储 Windows 事件时要使用的格式。与在 Windows 事件查看器中一样,xml 使用 XML 格式。text 使用原 CloudWatch Logs 代理格式。

        • retention_in_days – 可选。在指定的日志组中指定保留 Windows 事件的天数。

          • 如果代理目前正在创建此日志组,并且您忽略此字段,则此新日志组的保留期将设置为永不过期。

          • 如果此日志组已存在,并且您指定了此字段,则将使用您指定的新保留期。如果您为已存在的日志组忽略此字段,则日志组的保留不会更改。

            CloudWatch 代理向导在创建代理配置文件且您未指定日志保留值时,使用 -1 作为此字段的默认值。此 -1 值由向导设置,指定日志组中的事件不会过期。但是,手动将此值编辑为 -1 是无效的。

          有效的值为 1、3、5、7、14、30、60、90、120、150、180、365、400、545、731、1827、2192、2557、2922、3288 和 3653。

          如果配置代理以将多个日志流写入同一个日志组,则在一个位置指定 retention_in_days 将为整个日志组设置日志保留。如果您在多个位置为同一日志组指定 retention_in_days,则在所有这些值均相等时才会设置保留。但是,如果在多个位置为同一日志组指定不同的 retention_in_days 值,则不会设置日志保留,代理将停止并返回错误。

          注意

          代理的 IAM 角色或 IAM 用户必须拥有 logs:PutRetentionPolicy 才能设置保留策略。有关更多信息,请参阅 允许 CloudWatch 代理设置日志保留策略

          警告

          如果您为已存在的日志组设置 retention_in_days,则该日志组中在您指定天数之前发布的所有日志都将被删除。例如,将其设置为 3 会导致 3 天前和之前的所有日志被删除。

  • log_stream_name – 必需。对于未在 collect_list 的相应条目内的 log_stream_name 参数中定义各日志流名称的任何日志或 Windows 事件,指定要用于它们的默认日志流名称。

  • endpoint_override – 指定一个 FIPS 端点或私有链接,以用作代理在其中发送日志的端点。如果指定此字段并设置私有链接,您可以将日志发送到 Amazon VPC 终端节点。有关更多信息,请参阅 Amazon VPC 是什么?

    endpoint_override 的值必须是表示 URL 的字符串。

    例如,在配置文件的日志部分中,以下内容将代理设置为在发送日志时使用 VPC 终端节点。

    { "logs": { "endpoint_override": "vpce-XXXXXXXXXXXXXXXXXXXXXXXXX.logs.us-east-1.vpce.amazonaws.com", ...... }, }
  • force_flush_interval – 以秒为单位指定日志在发送到服务器之前保留在内存缓冲区中的最大时间量。无论此字段的设置如何,如果缓冲区中的日志大小达到 1 MB,日志会立即发送到服务器。默认值是 5。

    如果您使用代理以嵌入式指标格式报告高分辨率指标,并且正在为这些指标设置警报,请将此参数设置为默认值 5。否则,报告指标时会出现延迟,这可能会导致出现警报,告知存在部分或不完整的数据。

  • credentials – 指定一个在向不同 AWS 账户发送日志时使用的 IAM 角色。如果指定,则此字段包含一个参数 role_arn

    • role_arn – 指定一个在向不同 AWS 账户发送日志时用于身份验证的 IAM 角色的 ARN。有关更多信息,请参阅 向不同账户发送指标、日志和跟踪信息。如果在此指定,它将覆盖在配置文件的 agent 部分指定的 role_arn(如果有)。

  • metrics_collected:此字段可包含特定部分,用于指定代理将收集日志以启用使用案例,例如 CloudWatch Application Signals 和针对 Amazon EKS 增强了可观测性的 Container Insights。

    • app_signals(可选)指定您要启用 CloudWatch Application Signals。有关此配置的更多信息,请参阅 启用 CloudWatch Application Signals

    • kubernetes – 此字段可以包含 enhanced_container_insights 参数,用于启用针对 Amazon EKS 增强了可观测性的 Container Insights。

      • enhanced_container_insights – 将其设置为 true,可启用针对 Amazon EKS 增强了可观测性的 Container Insights。有关更多信息,请参阅 针对 Amazon EKS 增强了可观测性的 Container Insights

      • accelerated_compute_metrics – 将其设置为 false,从而选择不收集 Amazon EKS 集群上的 Nvidia GPU 指标。有关更多信息,请参阅 NVIDIA GPU 指标

    • emf – 要收集日志中嵌入的指标,不再需要添加此 emf 字段。这是旧字段,指定代理将收集采用嵌入式指标格式的日志。您可以从这些日志生成指标数据。有关更多信息,请参阅 在日志中嵌入指标

下面是一个 logs 部分示例。

"logs": { "logs_collected": { "files": { "collect_list": [ { "file_path": "c:\\ProgramData\\Amazon\\AmazonCloudWatchAgent\\Logs\\amazon-cloudwatch-agent.log", "log_group_name": "amazon-cloudwatch-agent.log", "log_stream_name": "my_log_stream_name_1", "timestamp_format": "%H: %M: %S%y%b%-d" }, { "file_path": "c:\\ProgramData\\Amazon\\AmazonCloudWatchAgent\\Logs\\test.log", "log_group_name": "test.log", "log_stream_name": "my_log_stream_name_2" } ] }, "windows_events": { "collect_list": [ { "event_name": "System", "event_levels": [ "INFORMATION", "ERROR" ], "log_group_name": "System", "log_stream_name": "System" }, { "event_name": "CustomizedName", "event_levels": [ "INFORMATION", "ERROR" ], "log_group_name": "CustomizedLogGroup", "log_stream_name": "CustomizedLogStream" } ] } }, "log_stream_name": "my_log_stream_name", "metrics_collected": { "kubernetes": { "enhanced_container_insights": true } } }

通过向 CloudWatch 代理配置文件添加 traces 部分,您可以启用 CloudWatch Application Sights,或从 X-Ray 和 OpenTelemetry 检测开发工具包收集跟踪信息,然后将其发送到 X-Ray。

重要

代理的 IAM 角色或 IAM 用户必须具有 AWSXrayWriteOnlyAccess 策略才能将跟踪数据发送到 X-Ray。有关更多信息,请参阅 创建 IAM 角色和用户以用于 CloudWatch 代理

要快速开始收集跟踪信息,您只需将以下内容添加到 CloudWatch 代理配置文件中即可。

"traces_collected": { "xray": { }, "otlp": { } }

如果将上一部分添加到 CloudWatch 代理配置文件,然后重新启动代理,这将使代理开始使用以下默认选项和值收集跟踪。有关这些参数的更多信息,请参阅本节后面的参数定义。

"traces_collected": { "xray": { "bind_address": "127.0.0.1:2000", "tcp_proxy": { "bind_address": "127.0.0.1:2000" } }, "otlp": { "grpc_endpoint": "127.0.0.1:4317", "http_endpoint": "127.0.0.1:4318" } }

traces 部分可以包括以下字段:

  • traces_collected – 如果包含 traces 部分,则为必需。指定要从哪些 SDK 收集跟踪信息。它可以包括以下字段:

    • app_signals – 可选。指定您要启用 CloudWatch Application Signals。有关此配置的更多信息,请参阅 启用 CloudWatch Application Signals

    • xray – 可选。指定您要从 X-Ray SDK 收集跟踪信息。此部分包含以下字段:

      • bind_address – 可选。指定 CloudWatch 代理用于侦听 X-Ray 跟踪信息的 UDP 地址。格式为 ip:port。此地址必须与 X-Ray SDK 中设置的地址相匹配。

        如果省略该字段,则使用 127.0.0.1:2000 的默认值。

      • tcp_proxy – 可选。为用于支持 X-Ray 远程采样的代理配置地址。有关更多信息,请参阅 X-Ray 文档中的配置采样规则

        此部分可以包含以下字段。

        • bind_address – 可选。指定 CloudWatch 代理应将代理设置到的 TCP 地址。格式为 ip:port。此地址必须与 X-Ray SDK 中设置的地址相匹配。

          如果省略该字段,则使用 127.0.0.1:2000 的默认值。

    • otlp – 可选。指定您要从 OpenTelemetry SDK 收集跟踪信息。有关 AWS Distro for OpenTelemetry 的更多信息,请参阅 AWS Distro for OpenTelemetry。有关适用于 OpenTelemetry SDK 的 AWS Distro 的更多信息,请参阅简介

      此部分包含以下字段:

      • grpc_endpoint – 可选。指定 CloudWatch 代理用于侦听使用 gRPC 远程过程调用发送的 OpenTelemetry 跟踪信息的地址。格式为 ip:port。此地址必须与 OpenTelemetry SDK 中为 gRPC 导出器设置的地址相匹配。

        如果省略该字段,则使用 127.0.0.1:4317 的默认值。

      • http_endpoint – 可选。指定 CloudWatch 代理用于侦听通过 HTTP 发送的 OTLP 跟踪信息的地址。格式为 ip:port。此地址必须与 OpenTelemetry SDK 中为 HTTP 导出器设置的地址相匹配。

        如果省略该字段,则使用 127.0.0.1:4318 的默认值。

  • concurrency – 可选。指定可用于上传跟踪信息的 X-Ray 的最大并发调用次数。默认值为 8

  • local_mode – 可选。如果为 true,则代理不会收集 Amazon EC2 实例元数据。默认值为 false

  • endpoint_override – 可选。指定一个 FIPS 端点或私有链接,以用作 CloudWatch 代理在其中发送跟踪信息的端点。指定此字段并设置私有链接,使您能够将跟踪信息发送到 Amazon VPC 端点。有关更多信息,请参阅 Amazon VPC 是什么

    endpoint_override 的值必须是表示 URL 的字符串。

  • region_override – 可选。指定用于 X-Ray 端点的区域。CloudWatch 代理会将跟踪信息发送到指定区域中的 X-Ray。如果省略此字段,该代理会将跟踪信息发送到 Amazon EC2 实例所在的区域。

    如果您在此处指定区域,则此区域将优先于配置文件 agent 部分中 region 参数的设置。

  • proxy_override – 可选。指定 CloudWatch 代理向 X-Ray 发送请求时使用的代理服务器地址。必须将代理服务器的协议指定为此地址的组成部分。

  • credentials – 指定一个在向不同 AWS 账户发送跟踪信息时使用的 IAM 角色。如果指定,则此字段包含一个参数 role_arn

    • role_arn – 指定一个在向不同 AWS 账户发送跟踪信息时用于身份验证的 IAM 角色的 ARN。有关更多信息,请参阅 向不同账户发送指标、日志和跟踪信息。如果在此指定,它将覆盖在配置文件的 agent 部分指定的 role_arn(如果有)。

下面是一个适用于 Linux 服务器的完整 CloudWatch 代理配置文件示例。

要收集的指标的 measurement 部分中列出的项目可能指定了完整的指标名称,也可能仅指定将附加到资源类型的指标名称部分。例如,如果在 diskio 部分的 measurement 部分中指定 readsdiskio_reads,将导致收集 diskio_reads 指标。

该示例提供了两种方法以在 measurement 部分中指定指标。

{ "agent": { "metrics_collection_interval": 10, "logfile": "/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log" }, "metrics": { "namespace": "MyCustomNamespace", "metrics_collected": { "cpu": { "resources": [ "*" ], "measurement": [ {"name": "cpu_usage_idle", "rename": "CPU_USAGE_IDLE", "unit": "Percent"}, {"name": "cpu_usage_nice", "unit": "Percent"}, "cpu_usage_guest" ], "totalcpu": false, "metrics_collection_interval": 10, "append_dimensions": { "customized_dimension_key_1": "customized_dimension_value_1", "customized_dimension_key_2": "customized_dimension_value_2" } }, "disk": { "resources": [ "/", "/tmp" ], "measurement": [ {"name": "free", "rename": "DISK_FREE", "unit": "Gigabytes"}, "total", "used" ], "ignore_file_system_types": [ "sysfs", "devtmpfs" ], "metrics_collection_interval": 60, "append_dimensions": { "customized_dimension_key_3": "customized_dimension_value_3", "customized_dimension_key_4": "customized_dimension_value_4" } }, "diskio": { "resources": [ "*" ], "measurement": [ "reads", "writes", "read_time", "write_time", "io_time" ], "metrics_collection_interval": 60 }, "swap": { "measurement": [ "swap_used", "swap_free", "swap_used_percent" ] }, "mem": { "measurement": [ "mem_used", "mem_cached", "mem_total" ], "metrics_collection_interval": 1 }, "net": { "resources": [ "eth0" ], "measurement": [ "bytes_sent", "bytes_recv", "drop_in", "drop_out" ] }, "netstat": { "measurement": [ "tcp_established", "tcp_syn_sent", "tcp_close" ], "metrics_collection_interval": 60 }, "processes": { "measurement": [ "running", "sleeping", "dead" ] } }, "append_dimensions": { "ImageId": "${aws:ImageId}", "InstanceId": "${aws:InstanceId}", "InstanceType": "${aws:InstanceType}", "AutoScalingGroupName": "${aws:AutoScalingGroupName}" }, "aggregation_dimensions" : [["ImageId"], ["InstanceId", "InstanceType"], ["d1"],[]], "force_flush_interval" : 30 }, "logs": { "logs_collected": { "files": { "collect_list": [ { "file_path": "/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log", "log_group_name": "amazon-cloudwatch-agent.log", "log_stream_name": "amazon-cloudwatch-agent.log", "timezone": "UTC" }, { "file_path": "/opt/aws/amazon-cloudwatch-agent/logs/test.log", "log_group_name": "test.log", "log_stream_name": "test.log", "timezone": "Local" } ] } }, "log_stream_name": "my_log_stream_name", "force_flush_interval" : 15, "metrics_collected": { "kubernetes": { "enhanced_container_insights": true } } } }

下面是一个适用于运行 Windows Server 的服务器的完整 CloudWatch 代理配置文件示例。

{ "agent": { "metrics_collection_interval": 60, "logfile": "c:\\ProgramData\\Amazon\\AmazonCloudWatchAgent\\Logs\\amazon-cloudwatch-agent.log" }, "metrics": { "namespace": "MyCustomNamespace", "metrics_collected": { "Processor": { "measurement": [ {"name": "% Idle Time", "rename": "CPU_IDLE", "unit": "Percent"}, "% Interrupt Time", "% User Time", "% Processor Time" ], "resources": [ "*" ], "append_dimensions": { "customized_dimension_key_1": "customized_dimension_value_1", "customized_dimension_key_2": "customized_dimension_value_2" } }, "LogicalDisk": { "measurement": [ {"name": "% Idle Time", "unit": "Percent"}, {"name": "% Disk Read Time", "rename": "DISK_READ"}, "% Disk Write Time" ], "resources": [ "*" ] }, "customizedObjectName": { "metrics_collection_interval": 60, "customizedCounterName": [ "metric1", "metric2" ], "resources": [ "customizedInstances" ] }, "Memory": { "metrics_collection_interval": 5, "measurement": [ "Available Bytes", "Cache Faults/sec", "Page Faults/sec", "Pages/sec" ] }, "Network Interface": { "metrics_collection_interval": 5, "measurement": [ "Bytes Received/sec", "Bytes Sent/sec", "Packets Received/sec", "Packets Sent/sec" ], "resources": [ "*" ], "append_dimensions": { "customized_dimension_key_3": "customized_dimension_value_3" } }, "System": { "measurement": [ "Context Switches/sec", "System Calls/sec", "Processor Queue Length" ] } }, "append_dimensions": { "ImageId": "${aws:ImageId}", "InstanceId": "${aws:InstanceId}", "InstanceType": "${aws:InstanceType}", "AutoScalingGroupName": "${aws:AutoScalingGroupName}" }, "aggregation_dimensions" : [["ImageId"], ["InstanceId", "InstanceType"], ["d1"],[]] }, "logs": { "logs_collected": { "files": { "collect_list": [ { "file_path": "c:\\ProgramData\\Amazon\\AmazonCloudWatchAgent\\Logs\\amazon-cloudwatch-agent.log", "log_group_name": "amazon-cloudwatch-agent.log", "timezone": "UTC" }, { "file_path": "c:\\ProgramData\\Amazon\\AmazonCloudWatchAgent\\Logs\\test.log", "log_group_name": "test.log", "timezone": "Local" } ] }, "windows_events": { "collect_list": [ { "event_name": "System", "event_levels": [ "INFORMATION", "ERROR" ], "log_group_name": "System", "log_stream_name": "System", "event_format": "xml" }, { "event_name": "CustomizedName", "event_levels": [ "WARNING", "ERROR" ], "log_group_name": "CustomizedLogGroup", "log_stream_name": "CustomizedLogStream", "event_format": "xml" } ] } }, "log_stream_name": "example_log_stream_name" } }

手动保存 CloudWatch 代理配置文件

如果手动创建或编辑 CloudWatch 代理配置文件,则可以给它指定任何名称。为了简化故障排除,我们建议您在 Linux 服务器上将其命名为 /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json,在运行 Windows Server 的服务器上将其命名为 $Env:ProgramData\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent.json。创建该文件后,您可以将其复制到要运行代理的其他服务器上。

将 CloudWatch 代理配置文件上传到 Systems Manager Parameter Store

如果您计划使用 SSM Agent 在服务器上安装 CloudWatch 代理,则在手动编辑 CloudWatch 代理配置文件后,可以将其上传到 Systems Manager Parameter Store。为此,您可以使用 Systems Manager put-parameter 命令。

要能够将该文件存储在 Parameter Store 中,您必须使用具有足够权限的 IAM 角色。有关更多信息,请参阅 创建 IAM 角色和用户以用于 CloudWatch 代理

可以使用以下命令,其中 parameter name 是在 Parameter Store 中用于该文件的名称,而 configuration_file_pathname 是已编辑的配置文件的路径和文件名。

aws ssm put-parameter --name "parameter name" --type "String" --value file://configuration_file_pathname