设置CloudWatch日志的合理方式(awslogs-agent)

时间:2015-06-12 08:44:13

标签: amazon-web-services elastic-beanstalk amazon-cloudwatch

tl; dr cloudwatch代理的配置为#$%^。任何直截了当的方式?

我想要一个地方来存储日志,所以我使用了Amazon CloudWatch Logs Agent。起初,似乎我只是添加一个资源,说像"创建一个日志组,然后一个日志流并发送这个文件,谢谢你" - 所有陈述性和整洁,但......

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

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

感谢您的想法!

2 个答案:

答案 0 :(得分:1)

您已将doco特别链接到CloudFormation,因此很多复杂性可能与该上下文相关联。

以下是Cloudwatch Logs Agent的独立文档:

如果您使用的是亚马逊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]

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

答案 1 :(得分:0)

“ Agent”只是aws-cli插件和一堆脚本。您可以在大多数系统上使用pip install awscli-cwlogs安装插件(假设您本身已经安装了awscli)。注意:我认为Amazon Linux不是“大多数系统”,可能需要使用其他方法。

然后,您将需要两个配置: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文档(基本上,只要文件旋转,您只需要重新启动守护程序即可。)