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

使用 CloudWatch 代理的常见方案

以下几节简要说明在使用 CloudWatch 代理时如何完成一些常见的配置和自定义任务。

以不同用户身份运行 CloudWatch 代理

在 Linux 服务器上,CloudWatch 默认以 root 用户身份运行。要让代理以不同用户身份运行,请在 CloudWatch 代理配置文件的 agent 部分中使用 run_as_user 参数。该选项仅在 Linux 服务器上可用。

如果已使用 root 用户运行代理并希望更改为使用不同的用户,请使用以下过程之一。

在运行 Linux 的 EC2 实例上以不同用户身份运行 CloudWatch 代理

  1. 下载并安装新的 CloudWatch 代理软件包。有关更多信息,请参阅使用 S3 下载链接下载 CloudWatch 代理软件包

  2. 创建新的 Linux 用户,或使用 RPM 或 DEB 文件创建的默认用户(名为 cwagent)。

  3. 使用以下方式之一为该用户提供凭证:

    • 如果 /home/root/.aws/credentials 文件存在,您必须为要用于运行 CloudWatch 代理的用户创建一个凭证文件。该凭证文件是 /home/username/.aws/credentials。然后,在 common-config.toml 中将 shared_credential_file 参数的值设置为凭证文件的路径名。有关更多信息,请参阅(可选)修改代理的通用配置或区域信息

    • 如果 /home/root/.aws/credentials 文件不存在,您可以执行以下操作之一:

      • 为要用于运行 CloudWatch 代理的用户创建一个凭证文件。该凭证文件是 /home/username/.aws/credentials。然后,将 common-config.toml 中的 shared_credential_file 参数值设置为凭证文件的路径名。有关更多信息,请参阅(可选)修改代理的通用配置或区域信息

      • 将 IAM 角色附加到实例,而不是创建凭证文件。代理将该角色作为凭证提供程序。

  4. 在 CloudWatch 代理配置文件中,在 agent 部分中添加以下行:

    "run_as_user": "username"

    根据需要,对该配置文件进行其他修改。有关更多信息,请参阅 创建 CloudWatch 代理配置文件

  5. 向用户提供必要的权限。用户必须拥有要收集的日志文件的 Read (r) 权限,并且必须对日志文件路径中的每个目录具有 Execute (x) 权限。

  6. 使用刚修改的配置文件启动代理。

    sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c file:configuration-file-path -s

在运行 Linux 的本地服务器上以不同用户身份运行 CloudWatch 代理

  1. 下载并安装新的 CloudWatch 代理软件包。有关更多信息,请参阅使用 S3 下载链接下载 CloudWatch 代理软件包

  2. 创建新的 Linux 用户,或使用 RPM 或 DEB 文件创建的默认用户(名为 cwagent)。

  3. 将该用户的凭证存储到用户可访问的路径中,例如 /home/username/.aws/credentials

  4. common-config.toml 中的 shared_credential_file 参数值设置为凭证文件的路径名。有关更多信息,请参阅(可选)修改代理的通用配置或区域信息

  5. 在 CloudWatch 代理配置文件中,在 agent 部分中添加以下行:

    "run_as_user": "username"

    根据需要,对该配置文件进行其他修改。有关更多信息,请参阅 创建 CloudWatch 代理配置文件

  6. 向用户提供必要的权限。用户必须拥有要收集的日志文件的 Read (r) 权限,并且必须对日志文件路径中的每个目录具有 Execute (x) 权限。

  7. 使用刚修改的配置文件启动代理。

    sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c file:configuration-file-path -s

将自定义维度添加到 CloudWatch 代理收集的指标

要将自定义维度 (如标签) 添加到该代理收集的指标中,请将 append_dimensions 字段添加到代理配置文件中列出这些指标的部分。

例如,以下示例配置文件部分将一个名为 stackName 且值为 Prod 的自定义维度添加到该代理收集的 cpudisk 指标中。

"cpu":{ "resources":[ "*" ], "measurement":[ "cpu_usage_guest", "cpu_usage_nice", "cpu_usage_idle" ], "totalcpu":false, "append_dimensions":{ "stackName":"Prod" } }, "disk":{ "resources":[ "/", "/tmp" ], "measurement":[ "total", "used" ], "append_dimensions":{ "stackName":"Prod" } }

切记,每次更改代理配置文件时,您必须重新启动该代理以使更改生效。

多个 CloudWatch 代理配置文件

您可以设置 CloudWatch 代理以使用多个配置文件。例如,您可以使用一个常见的配置文件,该文件收集您始终要从基础设施中的所有服务器收集的一组指标和日志。然后,您可以使用其他配置文件,这些配置文件从某些应用程序或在某些情况下收集指标。

要对此进行设置,请首先创建要使用的配置文件。将在同一台服务器上一起使用的任何配置文件必须具有不同的文件名。您可以将配置文件存储在服务器或 Parameter Store 中。

使用 fetch-config 选项启动 CloudWatch 代理,并指定第一个配置文件。要将第二个配置文件附加到正在运行的代理,请使用相同的命令,但使用 append-config 选项。将收集任一配置文件中列出的所有指标和日志。以下示例 Linux 命令使用配置存储作为文件来阐述此场景。第一行使用 infrastructure.json 配置文件启动代理,第二行附加 app.json 配置文件。

/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c file:/tmp/infrastructure.json -s
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a append-config -m ec2 -c file:/tmp/app.json -s

以下示例配置文件展示了此功能的一个用法。第一个配置文件用于基础设施中的所有服务器,第二个配置文件仅收集来自特定应用程序的日志,并附加到运行该应用程序的服务器。

infrastructure.json

{ "metrics": { "metrics_collected": { "cpu": { "resources": [ "*" ], "measurement": [ "usage_active" ], "totalcpu": true }, "mem": { "measurement": [ "used_percent" ] } } }, "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" }, { "file_path": "/var/log/messages", "log_group_name": "/var/log/messages" } ] } } } }

app.json

{ "logs": { "logs_collected": { "files": { "collect_list": [ { "file_path": "/app/app.log*", "log_group_name": "/app/app.log" } ] } } }

附加到配置的任何配置文件彼此之间以及与初始配置文件之间都必须具有不同的文件名。如果您将 append-config 用于与代理已在使用的配置文件具有相同文件名的配置文件,则附加命令将覆盖第一个配置文件中的信息,而不是附加到它。即使这两个具有相同文件名的配置文件位于不同的文件路径中,也是这样。

上述示例显示使用了两个配置文件,但对您可以附加到代理配置的配置文件数量并没有限制。您还可以混合使用位于服务器上的配置文件和位于 Parameter Store 中的配置。

汇总或累积 CloudWatch 代理收集的指标

要汇总或累积该代理收集的指标,请将 aggregation_dimensions 字段添加到代理配置文件中与该指标对应的部分。

例如,以下配置文件片段累积 AutoScalingGroupName 维度上的指标。每个 Auto Scaling 组的所有实例中的指标将进行汇总,可以将这些指标作为一个整体进行查看。

"metrics": { "cpu":{...} "disk":{...} "aggregation_dimensions" : [["AutoScalingGroupName"]] }

除了累积 Auto Scaling 组名称以外,如果还希望累积各个 InstanceIdInstanceType 维度的组合,请添加以下内容。

"metrics": { "cpu":{...} "disk":{...} "aggregation_dimensions" : [["AutoScalingGroupName"], ["InstanceId", "InstanceType"]] }

要将指标累积到一个集合中,请使用 []

"metrics": { "cpu":{...} "disk":{...} "aggregation_dimensions" : [[]] }

切记,每次更改代理配置文件时,您必须重新启动该代理以使更改生效。

使用 CloudWatch 代理收集高精度指标

metrics_collection_interval 字段指定收集的指标的时间间隔 (以秒为单位)。如果为该字段指定小于 60 的值,则将指标作为高精度指标进行收集。

例如,如果所有指标均应为高精度指标并且每 10 秒收集一次,请在 agent 部分中指定 10 作为 metrics_collection_interval 的值,以用作全局指标收集间隔。

"agent": { "metrics_collection_interval": 10 }

或者,以下示例将 cpu 指标设置为每秒收集一次,将所有其他指标设置为每分钟收集一次。

"agent":{ "metrics_collection_interval": 60 }, "metrics":{ "metrics_collected":{ "cpu":{ "resources":[ "*" ], "measurement":[ "cpu_usage_guest" ], "totalcpu":false, "metrics_collection_interval": 1 }, "disk":{ "resources":[ "/", "/tmp" ], "measurement":[ "total", "used" ] } } }

切记,每次更改代理配置文件时,您必须重新启动该代理以使更改生效。

向不同账户发送指标和日志

要让 CloudWatch 代理将指标和/或日志发送到其他账户,请在发送服务器上的代理配置文件中指定 role_arn 参数。role_arn 值指定在将数据发送到目标账户时代理使用的目标账户中的 IAM 角色。在指标或日志传递到目标账户时,此角色使发送账户能够在目标账户中担任相应的角色。

您还可以在代理配置文件中指定两个单独的 role_arn 字符串:一个用于发送指标,另一个用于发送日志。

以下配置文件的 agent 部分示例将代理设置为在将指标和日志发送到其他账户时使用 CrossAccountAgentRole

{ "agent": { "credentials": { "role_arn": "arn:aws:iam::123456789012:role/CrossAccountAgentRole" } }, ..... }

或者,以下示例为发送账户设置不同的角色,以用于发送指标和日志:

"metrics": { "credentials": { "role_arn": "RoleToSendMetrics" }, "metrics_collected": {....
"logs": { "credentials": { "role_arn": "RoleToSendLogs" }, ....

必需策略

在代理配置文件中指定 role_arn 时,还必须确保发送和目标账户的 IAM 角色具有某些策略。发送账户和目标账户中的角色都应具有 CloudWatchAgentServerPolicy。有关将该策略分配给角色的更多信息,请参阅

发送账户中的角色还必须包含以下策略。在编辑角色时,可以在 IAM 控制台的 Permissions (权限) 选项卡上添加此策略。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sts:AssumeRole" ], "Resource": [ "arn:aws:iam::target-account-ID:role/agent-role-in-target-account" ] } ] }

目标账户中的角色必须包含以下策略,以便它识别发送账户使用的 IAM 角色。在编辑角色时,可以在 IAM 控制台的 Trust relationships (信任关系) 选项卡上添加此策略。您添加此策略的目标账户中的角色是您在创建 IAM 角色和用户以用于 CloudWatch 代理中创建的角色。此角色是在发送账户使用的策略的 agent-role-in-target-account 中指定的角色。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::sending-account-ID:role/role-specified-in-role_arn" ] }, "Action": "sts:AssumeRole" } ] }

统一 CloudWatch 代理与较旧 CloudWatch Logs 代理之间的时间戳差异

与较旧的 CloudWatch Logs 代理相比,CloudWatch 代理支持将一组不同的符号集用于时间戳格式。这些差异如下表所示。

两种代理均支持的符号 仅统一 CloudWatch 代理支持的符号 仅较旧的 CloudWatch Logs 代理支持的符号

%A、%a、%b、%B、%d、%f、%H、%l、%m、%M、%p、%S、%y、%Y、%Z、z

%-d、%-l、%-m、%-M、%-S

%c、%j、%U、%W、%w

有关新的 CloudWatch 代理支持的符号的含义的更多信息,请参阅 Amazon CloudWatch 用户指南 中的 CloudWatch 代理配置文件:日志部分。有关 CloudWatch Logs 代理支持的符号的信息,请参阅Amazon CloudWatch Logs User Guide中的代理配置文件