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
bundlelogs.dとtaillogs.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*
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
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"]]}`
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*
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バケットから適切な構成ファイルを取得しています。あなたはあなたの設定であなたがやりたいことができます。