我在Windows实例上使用CloudWatch Agent(而不是CloudWatch Logs Agent)。配置文件amazon-cloudwatch-agent.toml包括硬编码的实例ID。如果我为自动缩放组创建AMI,则每个启动的实例都会使用相同的陈旧实例ID作为日志流。他们都写到同一个流。
我希望每个实例都使用自己的instance_id写入流。这似乎是你几乎总想要的。这怎么可能?
答案 0 :(得分:2)
log_stream_name - 可选。指定在CloudWatch Logs中用作日志流名称的内容。作为名称的一部分,您可以使用{instance_id},{hostname},{local_hostname}和{ip_address}作为名称中的变量。 {hostname}从EC2元数据中检索主机名,而{local_hostname}使用网络配置文件中的主机名。
如果省略此字段,则使用默认的{instance_id}。如果日志流尚不存在,则会自动创建。
所以最简单的方法就是不要定义log_stream_name。
很奇怪,代理使用.toml文件作为其配置而不是json文件,而toml生成仅在安装时完成。也许你可以使用:
强制进行重建$/opt/aws/amazon-cloudwatch-agent/bin/config-translator \
--input /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json \
--output /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml \
--mode ec2 \
--config /opt/aws/amazon-cloudwatch-agent/etc/common-config.toml
您甚至可以将其粘贴在userdata脚本中。代理可能也需要重启。
答案 1 :(得分:1)
我相信从你的用户数据做“amazon-cloudwatch-agent-ctl start”可能就是他们想要你做的。他们不会告诉你任何地方,不是我发现的,但是应该创建TOML(如果你确定它还不存在),然后启动/重启服务。但是“start”有一个下载部分,我不知道在那里我的JSON文件是本地的。
所以我做了一些不同的事情,但同样的想法:
下面的批处理文件将创建TOML然后启动服务:
SET CLOUD_WATCH="C:\Program Files\Amazon\AmazonCloudWatchAgent"
SET CLOUD_WATCH_DATA=C:\ProgramData\Amazon\AmazonCloudWatchAgent
SET JSON=%CLOUD_WATCH_DATA%\amazon-cloudwatch-agent.json
SET TOML=%CLOUD_WATCH_DATA%\amazon-cloudwatch-agent.toml
SET CONFIG=%CLOUD_WATCH_DATA%\common-config.toml
SET TRANSLATOR=%CLOUD_WATCH%\config-translator.exe
rem Translate JSON into TOML
%TRANSLATOR% --input %JSON% --output %TOML% --mode ec2 --config %CONFIG%
rem Start the service
sc start AmazonCloudWatchAgent
这似乎对我有用。此外,我确保我的AMI有空的日志文件,包括CloudWatch Agent的日志和我自己的日志。所以每个实例都会重新开始。
但是如果我可以让它工作的话,我可能会在某些时候切换到用户数据“amazon-cloudwatch-agent-ctl start”。