tl; dr cloudwatch代理的配置为#$%^。任何直截了当的方式?
我想要一个地方来存储日志,所以我使用了Amazon CloudWatch Logs Agent。起初,似乎我只是添加一个资源,说像"创建一个日志组,然后一个日志流并发送这个文件,谢谢你" - 所有陈述性和整洁,但......
根据this doc我必须设置JSON配置,该配置创建了一个BASH脚本,该脚本下载了一个Python脚本,该脚本设置了在其他地方以另一种语言使用生成的配置的服务。
我认为日志记录是经常使用的东西,因此必须有声明性配置方式,而不是这种4种语言的疯狂组合。我错过了一些东西,还是操作世界如此痛苦?
感谢您的想法!
答案 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 enable
和systemctl start
。假设您的实例运行的是使用systemd的发行版(当今大多数使用,但是如果没有,则应查阅发行版的文档以了解如何运行守护程序)。
官方设置脚本还为logrotate添加了一个配置,我跳过了这一部分,因为在我的情况下这不是必需的,但是如果日志被旋转,则可能需要对其进行一些处理。有关详细信息,请查阅安装脚本和logrotate文档(基本上,只要文件旋转,您只需要重新启动守护程序即可。)