web-dev-qa-db-ja.com

AWS Elastic Beanstalk:CloudWatchにカスタムログを追加しますか?

CloudWatchにカスタムログを追加する方法デフォルトログが送信されますが、カスタムログを追加するにはどうすればよいですか?

私はすでにこのようなファイルを追加しました:(.ebextensions)

files:
  "/opt/elasticbeanstalk/tasks/bundlelogs.d/applogs.conf" :
    mode: "000755"
    owner: root
    group: root
    content: |
      /var/app/current/logs/*

  "/opt/elasticbeanstalk/tasks/taillogs.d/cloud-init.conf" :
    mode: "000755"
    owner: root
    group: root
    content: |
      /var/app/current/logs/*

Bundlelogs.dおよびtaillogs.dを実行したように、これらのカスタムログはコンソールまたはWebから追跡または取得されるようになりました。

CloudWatchには、次のようなデフォルトのログがあります
/aws/elasticbeanstalk/InstanceName/var/log/eb-activity.log
そして、このような別のものが欲しい
/aws/elasticbeanstalk/InstanceName/var/app/current/logs/mycustomlog.log

19
Joël

bundlelogs.dtaillogs.dは両方とも管理コンソールから取得したログです。あなたがしたいのは、デフォルトのログ(eb-activity.logなど)をCloudWatch Logsに拡張することです。ログストリームを拡張するには、/etc/awslogs/config/の下に別の構成を追加する必要があります。設定は Agent Configuration file Format に従う必要があります。

カスタムubuntu/nginx/phpプラットフォームのログを正常に拡張しました。これが私の 拡張ファイル 参考です。 公式サンプル 参考です。

あなたの場合、それは次のようになります

files:
  "/etc/awslogs/config/my_app_log.conf" :
    mode: "000600"
    owner: root
    group: root
    content: |
      [/var/app/current/logs/xxx.log]
      log_group_name = `{"Fn::Join":["/", ["/aws/elasticbeanstalk", { "Ref":"AWSEBEnvironmentName" }, "var/app/current/logs/xxx.log"]]}`
      log_stream_name = {instance_id}
      file = /var/app/current/logs/xxx.log*
26
Sebastian Hsu

Sebastian Hs および Abhyudit Jainへの支払期限

これは、特定のユースケースの.ebextensionsで思いついた最後のconfigファイルです。いくつかの側面を説明する注記は、コードブロックの下にあります。

files:
  "/etc/awslogs/config/beanstalklogs_custom.conf" :
    mode: "000600"
    owner: root
    group: root
    content: |
      [/var/log/Tomcat8/catalina.out]
      log_group_name = `{"Fn::Join":["/", ["/aws/elasticbeanstalk", { "Fn::Select" : [ "1", { "Fn::Split" : [ "-", { "Ref":"AWSEBEnvironmentName" } ] } ] }, "var/log/Tomcat8/catalina.out"]]}`
      log_stream_name = `{"Fn::Join":["--", [{ "Ref":"AWSEBEnvironmentName" }, "{instance_id}"]]}`
      file = /var/log/Tomcat8/catalina.out*

services:
  sysvinit:
    awslogs:
      files:
        - "/etc/awslogs/config/beanstalklogs_custom.conf"

commands:
  rm_beanstalklogs_custom_bak:
    command: "rm beanstalklogs_custom.conf.bak"
    cwd: "/etc/awslogs/config"
    ignoreErrors: true

log_group_name

EB環境には、正確にenvironmentName-environmentTypeである標準の命名スキームがあります。 { "Fn::Split" : [ "-", { "Ref":"AWSEBEnvironmentName" } ] }を使用して、それを2つの文字列(名前と型)の配列に分割しています。

次に、{ "Fn::Select" : [ "1", <<SPLIT_OUTPUT>> ] }を使用して、タイプ文字列のみを取得します。ニーズは明らかに異なるため、必要なのは次のもののみです。

      log_group_name = `{"Fn::Join":["/", ["/aws/elasticbeanstalk", { "Ref":"AWSEBEnvironmentName" }, "var/log/Tomcat8/catalina.out"]]}`

log_stream_name

Fn::Join関数を使用して、EB環境名とインスタンスIDを結合しています。インスタンスIDテンプレートは、指定されたとおりにエコーされる文字列であることに注意してください。

サービス

awslogsサービスは、カスタムconfファイルがデプロイされると自動的に再起動されます。

コマンド

filesブロックが既存のファイルを上書きすると、beanstalklogs_custom.conf.bakなどのバックアップファイルが作成されます。 awslogsサービスはbothファイルを読み取り、潜在的に競合を引き起こすため、このブロックはそのバックアップファイルを消去します。

結果

EC2インスタンスにログインしてSudo catファイルにアクセスすると、次のような画面が表示されます。すべてのFn関数が解決されたことに注意してください。 Fn関数が解決されなかった場合は、構文エラーを確認してください。

[/var/log/Tomcat8/catalina.out]
log_group_name = /aws/elasticbeanstalk/environmentType/var/log/Tomcat8/catalina.out
log_stream_name = environmentName-environmentType--{instance_id}
file = /var/log/Tomcat8/catalina.out*
12
ADTC

awslogsエージェントは、送信するはずのログファイルを構成ファイルで検索します。いくつかのデフォルトがあります。編集してファイルを指定する必要があります。

次の場所にある構成ファイルを確認および編集できます。

/etc/awslogs/awslogs.conf

サービスを再起動してください:

Sudo service awslogs restart

そこで独自のファイルを指定し、異なるグループとそうでないグループを作成できます。

次のリンクを参照してください。すぐにログを取得できます。

リソース:

https://docs.aws.Amazon.com/AmazonCloudWatch/latest/logs/AgentReference.html

編集:

インスタンス上のファイルを編集したくないので、コードのルートにある.ebextensionsフォルダーに関連するコードを追加できます。たとえば、これは私の01_cloudwatch.config

packages:
  yum:
    awslogs: []

container_commands:
  01_get_awscli_conf_file:
    command: "aws s3 cp s3://project/awscli.conf /etc/awslogs/awscli.conf"
  02_get_awslogs_conf_file:
    command: "aws s3 cp s3://project/awslogs.conf.${NODE_ENV} /etc/awslogs/awslogs.conf"
  03_restart_awslogs:
    command: "Sudo service awslogs restart"
  04_start_awslogs_at_system_boot:
    command: "Sudo chkconfig awslogs on"

この構成では、NODE_ENVに応じてS3バケットから適切な構成ファイルを取得しています。あなたはあなたの設定であなたがやりたいことができます。

5
Abhyudit Jain