设置 CloudWatch 日志的明智方法 (awslogs-agent)

A sane way to set up CloudWatch logs (awslogs-agent)

tl;dr cloudwatch代理的配置是#$%^。有什么简单的方法吗?

我想要一个地方来存储日志,所以我使用了 Amazon CloudWatch Logs Agent。起初,我似乎只是添加了一个资源,上面写着 "create a log group, then a log stream and send this file, thank you" 之类的东西 - 都是声明式的和整洁的,但是......

根据 this doc,我必须设置 JSON 配置,该配置创建了一个 BASH 脚本,该脚本下载了一个 Python 脚本,该脚本设置了使用生成的配置的服务在其他地方使用另一种语言。

我认为日志记录是经常使用的东西,所以必须有一种声明式配置方式,而不是这种 4 种语言的疯狂组合。是我错过了什么,还是 ops 世界如此痛苦?

谢谢你的想法!

您已将特定于 CloudFormation 的 doco 链接起来,因此很多复杂性可能与该上下文相关。

这是 Cloudwatch Logs Agent 的 stand-alone 文档:

如果您使用的是 Amazon Linux,则可以通过 yum 安装 'awslogs' 系统包。完成后,您可以通过确保 CLI 的配置文件中包含以下部分来为 AWS CLI 启用日志插件:

[plugins]
cwlogs = cwlogs

例如,系统包应该在 /etc/awslogs/awscli.conf 下创建一个文件。您可以通过设置...

来使用该文件
AWS_CONFIG_FILE=/etc/awslogs/awscli.conf

...环境变量。

完成后,您可以:

$ aws logs push help

$ cat /path/to/some/file | aws logs push [options]

代理还附带帮助程序以保持各种日志文件同步。

"Agent" 只是一个 aws-cli 插件和一堆脚本。您可以在大多数系统上使用 pip install awscli-cwlogs 安装插件(假设您已经安装了 awscli 本身)。注意:我认为亚马逊 Linux 不是 "most systems",可能需要不同的方法。

然后您将需要两个配置:awscli config 包含以下内容(如果需要还可以添加凭据并将 us-east-1 替换为您所在的地区):

[plugins]
cwlogs = cwlogs

[default]
region = us-east-1

logging config 类似这样(根据文档调整您的需要):

[general]
state_file = push-state
[logstream-cfn-init.log]
datetime_format = %Y-%m-%d %H:%M:%S,%f
file = /var/log/cfn-init.log
file_fingerprint_lines = 1-3
multi_line_start_pattern = {datetime_format}
log_group_name = ec2-logs
log_stream_name = {hostname}-{instance_id}/cfn-init.log
initial_position = start_of_file
encoding = utf_8
buffer_duration = 5000

之后,要自动启动守护进程,您可以像这样创建一个 systemd 单元(将配置路径更改为您实际放置它们的位置):

[Unit]
Description=CloudWatch logging daemon

[Service]
ExecStart=/usr/local/bin/aws logs push --config-file /etc/aws/cwlogs
Environment=AWS_CONFIG_FILE=/etc/aws/config
Restart=always
Type=simple

[Install]
WantedBy=multi-user.target

之后您可以照常 systemctl enablesystemctl start。这是假设您的实例 运行 正在使用一个使用 systemd 的发行版(现在大多数都是这样,但如果不是,您应该查阅发行版的文档以了解如何 运行 守护进程)。

官方设置脚本还添加了 logrotate 的配置,我跳过了那部分,因为在我的情况下不需要它,但如果你的日志被轮换,你可能想用它做一些事情。有关详细信息,请参阅安装脚本和 logrotate 文档(基本上,只要文件轮换,您只需要重新启动守护程序)。