【问题标题】:A sane way to set up CloudWatch logs (awslogs-agent)设置 CloudWatch 日志的明智方法 (awslogs-agent)
【发布时间】:2015-08-28 05:14:45
【问题描述】:

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

我想要一个地方来存储日志,所以我使用了 Amazon CloudWatch Logs 代理。起初,我似乎只是添加了一个资源,上面写着“创建一个日志组,然后是一个日志流并发送此文件,谢谢”——所有这些都是声明性的和简洁的,但是......

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

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

感谢您的想法!

【问题讨论】:

  • 谢谢!好吧,它唯一有用的部分是带有 ZIP 的倒数第二部分。如果你查看 docker 的 ZIP,会有大量的配置(再加上 BASH),它的作用与原始链接基本相同。只是这一次它没有得到一个 python 脚本,而是运行一些实用程序“cfn-init”。仍然不是声明​​性的,仍然混合语言。最重要的是:aws 日志在 us-west-1 中工作,但配置被禁止(从 EB 设置)并且失败;)有趣的是手动操作是可能的。
  • CloudWatch 代理的另一个糟糕之处是设置方法似乎随意更改。更新并重新启动了我的一台主机,代理不再工作。参考我的设置文档,它不再与我自己链接到的文档相对应。
  • @MikeMügge 我赞同这一点,糟糕的文档。在 Elastic Beanstalk 上,如果您不通过配置启用 CW 代理,它会主动(!)在每个部署中终止日志记录代理。

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


【解决方案1】:

“代理”只是一个 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 文档(本质上,您只需在文件旋转时重新启动守护程序)。

【讨论】:

  • 这应该是最好的答案了。
【解决方案2】:

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

这是 Cloudwatch 日志代理的独立文档:

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

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

【讨论】:

    猜你喜欢
    • 2017-12-23
    • 1970-01-01
    • 2020-07-04
    • 2020-10-10
    • 1970-01-01
    • 2021-04-02
    • 2020-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多