aws beanstalk 实例日志和环境状态日志的轮换和流式传输配置

Posted zhojiew

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了aws beanstalk 实例日志和环境状态日志的轮换和流式传输配置相关的知识,希望对你有一定的参考价值。

参考资料

eb相关日志的说明

日志源

beanstalk环境中的相关日志主要包括以下几个

日志分类

按照日志的类型又可以分为

  • 结尾日志,beanstalk的操作日志和webserver日志,将条目保存为文本文件
  • 捆绑日志(windows平台不支持),yum 和 cron日志,cloudformation日志,打包为zip包

日志上传方式

日志的上传也有两种方式

  • 将轮换的实例日志上传到环境的s3存储桶

  • 将实例日志流式传输到CloudWatch Logs,相关配置项如下(包括实例日志和环境状态日志)

    aws:elasticbeanstalk:cloudwatch:logs:
      DeleteOnTerminate: 'false'
      RetentionInDays: '7'
      StreamLogs: 'false'
    aws:elasticbeanstalk:cloudwatch:logs:health:
      DeleteOnTerminate: 'false'
      HealthStreamingEnabled: 'false'
      RetentionInDays: '7'
    

日志配置项

日志配置主要涉及到的命名空间如下

实例日志的配置

可以直接在命令行快速开启

eb logs --log-group xxxxx
eb logs --cloudwatch-logs enable --cloudwatch-log-source instance
eb logs --cloudwatch-logs enable --cloudwatch-log-source environment-health
eb logs --stream

流日志

在应用根目录增加以下配置,aws:elasticbeanstalk:cloudwatch:logs

$ cat .ebextensions/cloudwatch.config
option_settings:
  aws:elasticbeanstalk:cloudwatch:logs:
    DeleteOnTerminate: 'false'
    RetentionInDays: '1'
    StreamLogs: 'true'

配置完成后控制台可以看到日志组名称

默认收集的日志如下

s3日志

在应用根目录增加以下配置,aws:elasticbeanstalk:hostmanager

$ cat .ebextensions/hostmanagerlog.config
option_settings:
  aws:elasticbeanstalk:hostmanager:
    LogPublicationControl: true

上传的日志清单为

https://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/using-features.logging.html

查看应用对应的s3桶,eb实例每小时上传一次轮换日志

  • 如果应用程序不是在环境平台默认配置的位置生成日志,可以使用配置文件 (.ebextensions) 扩展默认配置。

  • 也可以将应用程序的日志文件添加到结尾日志、捆绑日志或日志轮换中

s3日志的存储位置为,名为elasticbeanstalk-region-account-id的存储桶,路径为resources/environments/logs/logtype/environment-id/instance-id``

日志名称规范为

  • 结尾日志s3://elasticbeanstalk-us-west-2-123456789012/resources/environments/logs/tail/e-mpcwnwheky/i-0a1fd158
  • 捆绑日志s3://elasticbeanstalk-us-west-2-123456789012/resources/environments/logs/bundle/e-mpcwnwheky/i-0a1fd158
  • 轮换日志s3://elasticbeanstalk-us-west-2-123456789012/resources/environments/logs/publish/e-mpcwnwheky/i-0a1fd158

结尾日志和捆绑日志创建15分钟后删除(eb使用用户权限删除s3)

对于轮换日志,具体配置在/etc/logrotate.elasticbeanstalk.hourly/

$ ll /etc/logrotate.elasticbeanstalk.hourly
total 28
-rw-r--r-- 1 root root 157 Apr  1 11:11 logrotate.elasticbeanstalk.eb-engine.conf
-rw-r--r-- 1 root root 156 Apr  1 11:11 logrotate.elasticbeanstalk.eb-hooks.conf
-rw-r--r-- 1 root root 171 Apr  1 11:45 logrotate.elasticbeanstalk.healthd.conf
-rw-r--r-- 1 root root 157 Apr  1 11:45 logrotate.elasticbeanstalk.nginx.conf
-rw-r--r-- 1 root root 156 Apr  1 11:11 logrotate.elasticbeanstalk.web-stderr.conf
-rw-r--r-- 1 root root 156 Apr  1 11:11 logrotate.elasticbeanstalk.web-stdout.conf
-rw-r--r-- 1 root root 162 Apr  1 11:45 logrotate.elasticbeanstalk.xray.conf

查看eb-engine日志配置

$ cat logrotate.elasticbeanstalk.eb-engine.conf
/var/log/eb-engine.log 
 su root root
 size 10M
 rotate 5
 missingok
 compress
 notifempty
 copytruncate
 dateext
 dateformat %s
 olddir /var/log/rotated

这些配置文件由定时任务配置进行调用

$ ls /etc/cron.hourly/
0anacron                                             cron.logrotate.elasticbeanstalk.eb-hooks.conf  cron.logrotate.elasticbeanstalk.web-stderr.conf
cron.logcleanup.elasticbeanstalk.healthd-proxy.conf  cron.logrotate.elasticbeanstalk.healthd.conf   cron.logrotate.elasticbeanstalk.web-stdout.conf
cron.logrotate.elasticbeanstalk.eb-engine.conf       cron.logrotate.elasticbeanstalk.nginx.conf     cron.logrotate.elasticbeanstalk.xray.conf

查看定时任务配置,可以看到关键程序为logrotate

$ cat /etc/cron.hourly/cron.logrotate.elasticbeanstalk.eb-engine.conf
#!/bin/sh
test -x /usr/sbin/logrotate || exit 0
/usr/sbin/logrotate -f /etc/logrotate.elasticbeanstalk.hourly/logrotate.elasticbeanstalk.eb-engine.conf

可以对默认的日志位置进行扩展,具体的配置路径

  • 结尾日志/opt/elasticbeanstalk/tasks/taillogs.d/
  • 捆绑日志/opt/elasticbeanstalk/tasks/bundlelogs.d/
  • 轮换日志/opt/elasticbeanstalk/tasks/publishlogs.d/

扩展其实就是在.ebextension路径下在配置文件中设定日志配置的文件和内容

files:
  "/opt/elasticbeanstalk/tasks/taillogs.d/cwl-system.conf":
    content: |
      /var/log/awslogs-agent-setup.log
      /var/log/awslogs.log
      /var/log/eb-cwlogs.log
    mode : "000644"
  "/opt/elasticbeanstalk/tasks/bundlelogs.d/cwl-system.conf":
    content: |
      /var/log/awslogs-agent-setup.log
      /var/log/awslogs.log
      /var/log/eb-cwlogs.log
    mode : "000644"
  "/opt/elasticbeanstalk/tasks/systemtaillogs.d/cwl-system.conf":
    content: |
      /var/log/awslogs-agent-setup.log
      /var/log/awslogs.log
      /var/log/eb-cwlogs.log
    mode : "000644"
  "/opt/elasticbeanstalk/tasks/publishlogs.d/cwl-system.conf":
    content: |
      /var/log/awslogs-agent-setup.log    ## this isn't rotated
      /var/log/awslogs.log*.gz
    mode : "000644"

环境状态日志的配置

在应用根目录增加以下配置

$ cat .ebextensions/cloudwatch.config
option_settings:
  aws:elasticbeanstalk:healthreporting:system:
    SystemType: enhanced
  aws:elasticbeanstalk:cloudwatch:logs:health:
    DeleteOnTerminate: 'false'
    HealthStreamingEnabled: 'true'
    RetentionInDays: '1'

配置完成后控制台可以看到日志组名称

日志配置相关的仓库

  • https://github.com/awsdocs/elastic-beanstalk-samples/blob/master/configuration-files/aws-provided/instance-configuration/awslogs-change-frequency.config
  • https://github.com/awsdocs/elastic-beanstalk-samples/blob/master/configuration-files/aws-provided/instance-configuration/logs-streamtocloudwatch-linux-alami.config
  • https://github.com/awsdocs/elastic-beanstalk-samples/blob/master/configuration-files/aws-provided/instance-configuration/logs-streamtocloudwatch-linux.config
  • https://github.com/awsdocs/elastic-beanstalk-samples/blob/master/configuration-files/aws-provided/instance-configuration/logs-uploadonterminate-linux.config

从 AWS Beanstalk 检索 Apache 日志文件

【中文标题】从 AWS Beanstalk 检索 Apache 日志文件【英文标题】:retrieving Apache log files from AWS Beanstalk 【发布时间】:2013-09-11 02:34:28 【问题描述】:

我知道 Beanstalk 的快照日志可以为您提供该环境 ELB 下 EC2 实例中 httpd/access_log 文件的最新概览。但是有人知道获取所有日志的好方法吗?

这是一个生产环境,所以我想在其他地方进行处理。但我不想(出于显而易见的原因)配置 root sftp 并手动收集文件。

我想我已经阅读了有关配置日志记录到 S3 的内容?

【问题讨论】:

【参考方案1】:

在环境的“配置”选项卡中,在“软件配置”下,有一个用于启用日志文件轮换到 S3 的复选框。这些存储在专门用于 Elastic Beanstalk 的 S3 存储桶中。

【讨论】:

【参考方案2】:

您可以将当前日志提供给aws cloudwatch logs。

AWS cloudwatch 日志将使用简洁的解决方案集中您的基础设施的所有日志,以搜索进程并根据您的日志创建指标和警报。

我有一个关于如何Store aws beanstalk symfony and apache logs in cloudwatch logs 的指南。这将帮助您快速启动和运行,然后您可以对其进行调整。

【讨论】:

以上是关于aws beanstalk 实例日志和环境状态日志的轮换和流式传输配置的主要内容,如果未能解决你的问题,请参考以下文章

适用于 Java 应用程序的 AWS Elastic Beanstalk 默认 CloudWatch 日志位置

AWS beanstalk 环境没有轮换 docker 容器日志

AWS Elastic Beanstalk “所有实例上的服务受损。”

AWS Beanstalk 上的 Python。如何对自定义日志进行快照?

发生故障时如何查看 AWS Elastic Beanstalk 部署过程日志

启用 Elastic Beanstalk 的 tomcat 日志文件的日志记录到 Cloudwatch