Amazon CloudWatch
用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

CloudWatch 代理配置文件是一个 JSON 文件,其中包含三个部分:agentmetricslogs

  • agent 部分包含总体代理配置的字段。如果您使用向导,则不会创建 agent 部分。

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

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

以下几节介绍了该 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 代理配置文件:Agent 部分

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

    • role_arn – 指定一个在向不同 AWS 账户发送指标和日志时用于身份验证的 IAM 角色的 Amazon 资源名称 (ARN)。有关更多信息,请参阅向不同账户发送指标和日志

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

  • 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 – 可选。默认情况下,主机名将作为代理收集的指标维度进行发布。可以将该值设置为 true 以禁止将主机名作为维度进行发布。默认值为 false

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

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

下面是 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" }

CloudWatch 代理配置文件:Metrics 部分

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

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

  • append_dimensions – 可选。将 Amazon EC2 指标维度添加到该代理收集的所有指标中。对于每个维度,您必须指定一个键值对,其中,键与 Amazon EC2 维度 ImageID:image-idInstanceId:instance-idInstanceType:instance-typeAutoScalingGroupName:AutoScaling-group-name 匹配。

    如果您指定一个值(该值取决于 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 的字符串。

  • metrics_collected – 必需。指定要收集的指标,包括通过 StatsDcollectd 收集的自定义指标。该部分包含几个小节。

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

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

    默认值为 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 检索自定义指标

  • cpu – 可选。指定要收集的 CPU 指标。该部分仅适用于 Linux 实例。该部分最多可以包含三个字段:

    • resources – 可选。指定要收集的每个 CPU 指标。唯一允许的值为 *。如果包含该字段和值,则收集每个 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 – 指定用于该指标的单位,从而覆盖该指标的默认单位。指定的单位必须是有效的 CloudWatch 指标单位,如 MetricDatumUnit 描述中所示。

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

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

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

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

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

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

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

      注意

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

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

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

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

      • unit – 指定用于该指标的单位,从而覆盖该指标的默认单位。指定的单位必须是有效的 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 实例。该部分最多可以包含两个字段:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    • 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 实例上的 CloudWatch 代理收集的指标

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

"metrics": { "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, "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}" }, "aggregation_dimensions" : [["AutoScalingGroupName"], ["InstanceId", "InstanceType"],[]] }

Windows Server

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

在每个对象的小节中,您可以指定要收集的计数器的 measurement 数组。需要为在配置文件中指定的每个对象指定 measurement 数组。您也可以指定 resources 字段以命名从中收集指标的实例。您还可以为 resources 指定 *,以便为每个实例收集单独的指标。如果省略 resources,则将所有实例的数据汇总到一个组中。对于没有实例的对象,请省略 resources

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

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

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

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

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

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

  • 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"],[]] } }

CloudWatch 代理配置文件:logs 部分

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)。要指定多个类型的文件,请向代理配置文件再添加一个日志流条目,让每种日志文件都转到不同的日志流。

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

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

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

          我们建议您指定此字段以防止混淆。如果您省略该字段,则将最终圆点之前的文件路径作为日志组名称。例如,如果文件路径为 /tmp/TestLogFile.log.2017-07-11-14,则日志组名称为 /tmp/TestLogFile.log

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

          如果省略该字段,则使用 {instance_id} 的默认值。如果还没有日志流,则会自动创建一个日志流。

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

        • timestamp_format – 可选。使用纯文本和以 % 开头的特殊符号指定时间戳格式。如果省略该字段,则使用当前时间。如果使用该字段,您可以使用以下列表中的符号作为格式的一部分。此符号列表与较旧的 CloudWatch Logs 代理使用的列表不同。有关这些区别的摘要,请参阅统一 CloudWatch 代理与较旧 CloudWatch Logs 代理之间的时间戳差异

          %y

          使用以零填充的十进制数字形式的没有世纪的年份

          %Y

          使用十进制数字形式的具有世纪的年份

          %b

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

          %B

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

          %m

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

          %-m

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

          %d

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

          %-d

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

          %A

          星期的全称,例如 Monday

          %a

          星期的缩写,例如 Mon

          %H

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

          %I

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

          %-I

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

          %p

          AM 或 PM

          %M

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

          %-M

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

          %S

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

          %-S

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

          %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, 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 事件需要使用该字段。

        • 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} 使用网络配置文件中的主机名。

          如果省略该字段,则使用 {instance_id} 的默认值。如果还没有日志流,则会自动创建一个日志流。

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

  • log_stream_name – 必需。指定未在 collect_list 的条目中定义日志流名称的任何日志或 Windows 事件使用的默认日志流名称。

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

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

  • force_flush_interval – 以秒为单位指定日志在发送到服务器之前保留在内存缓冲区中的最大时间量。无论此字段的设置如何,如果缓冲区中的日志大小达到 1 MB,日志会立即发送到服务器。默认值为 5。

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

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

下面是一个 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" }

CloudWatch 代理配置文件:完整示例

下面是一个适用于 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": { "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 } }

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

{ "agent": { "metrics_collection_interval": 60, "logfile": "c:\\ProgramData\\Amazon\\AmazonCloudWatchAgent\\Logs\\amazon-cloudwatch-agent.log" }, "metrics": { "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": [ "customizedInstaces" ] }, "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。创建该文件后,您可以将其复制到要运行代理的其他服务器上。