CodeDeployエージェントが出力するログをCloudWatch Agentを利用してCloudWatch Logsに転送してみた

こんにちは、坂巻です。

CodeDeployエージェントが出力するログは複数あります。

どういったログが出力されるのか纏めてみました。また、CloudWatch Agentを使用してCloudWatch Logsにログを転送してみましたので、そちらの設定についても触れたいと思います。

CodeDeployエージェントが出力するログ

codedeploy-agent.log

エージェントの正常性や、デプロイ全体のステータスに関する情報が含まれます。ログは/var/log/aws/codedeploy-agent/codedeploy-agent.logに出力されます。

ログ出力例

2019-04-24 12:43:55 INFO  [codedeploy-agent(12057)]: master 12057: Spawned child 1/1
2019-04-24 12:43:55 INFO  [codedeploy-agent(12061)]: On Premises config file does not exist or not readable
2019-04-24 12:43:55 INFO  [codedeploy-agent(12061)]: InstanceAgent::Plugins::CodeDeployPlugin::CommandExecutor: Archives to retain is: 5}
2019-04-24 12:43:55 INFO  [codedeploy-agent(12061)]: Version file found in /opt/codedeploy-agent/.version with agent version OFFICIAL_1.0-1.1597_rpm.
2019-04-24 12:43:56 INFO  [codedeploy-agent(12057)]: Started master 12057 with 1 children

Amazon Linuxの場合、デバッグレベルのメッセージはデフォルトで無効化されています。デバッグレベルのメッセージを表示させる場合は、設定ファイル/etc/codedeploy-agent/conf/codedeployagent.ymlの修正が必要になります。

codedeploy-agent-deployments.log

標準出力、標準エラー出力および、デプロイ中に実行させたスクリプトの情報等が含まれます。ログは/opt/codedeploy-agent/deployment-root/deployment-logs/codedeploy-agent-deployments.logに出力されます。deployment-rootディレクトリは、デプロイ実施以降に作成されますので、デプロイ実施前にログは存在しません。

ログ出力例

# Logfile created on 2019-04-24 14:39:59 +0000 by logger.rb/41954
[2019-04-24 14:39:59.646] [d-0CTRSSXQY]LifecycleEvent - ApplicationStart
[2019-04-24 14:39:59.646] [d-0CTRSSXQY]Script - scripts/test.sh
[2019-04-24 14:39:59.665] [d-0CTRSSXQY][stdout]Dokupepa

scripts.log

AppSpecの「hooks」セクションにて、スクリプトを設定した際に作成されます。ログは/opt/codedeploy-agent/deployment-root/[deployment-group-ID]/[deployment-ID]/logs/scripts.logに出力されます。上記deployment-group-IDdeployment-IDについては、環境固有の値が設定されます。

2019-04-24 14:39:59 LifecycleEvent - ApplicationStart
2019-04-24 14:39:59 Script - scripts/test.sh
2019-04-24 14:39:59 [stdout]Dokupepa

codedeploy-agent.wire.log

デプロイに関連するアクティビティだけでなく、S3アクティビティに関する情報が含まれます。デフォルトでは無効化されています。有効化すると/var/log/aws/codedeploy-agent/codedeploy-agent.aws_wire.logに出力されます。ログは非常に大きなサイズになる場合がありますので、必要な場合のみ有効化しましょう。

ログ出力例

-> "HTTP/1.1 200 OK\r\n"
-> "x-amzn-RequestId: 00371900-6692-11e9-b0a4-3d694a5a8a3a\r\n"
-> "Content-Type: application/x-amz-json-1.1\r\n"
-> "Content-Length: 2\r\n"
-> "\r\n"
reading 2 bytes...
-> ""
-> "{}"
read 2 bytes
Conn keep-alive
I, [2019-04-24T13:09:06.950012 #12704]  INFO -- : [Aws::CodeDeployCommand::Client 200 60.33106 0 retries] poll_host_command(host_identifier:"arn:aws:ec2:ap-northeast-1:XXXXXXXXXXXX:instance/i-0764dc8b1576642a9")

opening connection to codedeploy-commands.ap-northeast-1.amazonaws.com:443...
opened
starting SSL for codedeploy-commands.ap-northeast-1.amazonaws.com:443...
SSL established
<- "POST / HTTP/1.1\r\nContent-Type: application/x-amz-json-1.1\r\nAccept-Encoding: \r\nUser-Agent: aws-sdk-ruby2/2.10.104 ruby/2.0.0 x86_64-linux\r\nX-Amz-Target: CodeDeployCommandService_v20141006.PollHostCommand\r\nX-Amz-Codedeploy-Agent-Version: OFFICIAL_1.0-1.1597_rpm\r\nX-Amz-Date: 20190424T130907Z\r\nHost: codedeploy-commands.ap-northeast-1.amazonaws.com\r\nX-Amz-Security-Token: AgoJb3JpZ2luX2VjEP3//////////wEaDmFwLW5vcnRoZWFzdC0xIkYwRAIgXkJfCIo9MAbFeRK1YFkREJMSfAW1Dl0zsbkDlgtT85QCIAlo75fCrBpHLjFwtZQR94xOtRWEz2w3Tx/i3r880OGnKu0DCNb//////////wEQARoMMzkyMTM4Nzg5NzY0IgwJlvmvk5FNQk7dZWYqwQPKTU8vYcFsYo0YDU7GEFiDaFV+cbitgv7KUCkImugpmwaa3YFe1i9IWRji8S8t23vZkZ+qKpPMGJXptQfFwlevmqdvc+yLGDj71GCQhRZO3CDXzpZV9Pg8sxglkp5u0XeUqV4FbSMfU4LuwgRgemIj7rO1cMh0Vf0oFlzaDj1Bf/e4nSeK1WsexTiP6Qk39S19CF5QcplEXDghe7nzwJsWR/ClzDAWEvLP3ga+eSeomtb2AaeXfPZGTSuFd71u3xjlCqPX04MZKyo06WFWhjuo/BpSBSfmW3WRP8EssBq8eogIkHP1D4LRnQBavJceKntDrkk6Qw/l4tokcK69DMdqiKrMTNG3xrckILIjzeyaazci0TgE3Nt192wKu3Je3OPci01LW3yXYkdDfvQf4qxnhkNw1dLoK//UKiEAiQEJPKJiHtUsM/5YPlU3FCfdioWTR3J4BWZyI4cx3sFZnn937GUgkh9BQTlyHCi/zbTSHyzDial6LfPs0FM6TC+Tq4SPrMEXvb2ZjJ/mLG95egi2EwKof945HtrZta3yZJugLUIAhTA0c6bCZtZjfPWRunztCHHZU7gZ+EpWe8s5hAFytjD1soHmBTq1AZIo7OobdRzrWq82w0Kp9Ps+L6P8N8DBsl6+vVVGTP+ZU+U4YyOYkGP1W8tl89mAk3EM69Cg0RcorEPnQ8KgkoUMbFRAATTYDg3mP0mdSY4QhAVsz1421VshqhOTAosneBxoJNJbAY3vXS6cLU8MamBd8GXh/STodZatH4X+mXeK3lTesFcptMifc6nxY18Gc7LOc7plDHohQgOVfQqyi7RaNRTYmJOh0NEsbBLbm+jGTXUhKzg=\r\nX-Amz-Content-Sha256: d1f12f5af88206f63a4756bdad725c4f0aa1ce0e073f7eedeb2c9764b62708f9\r\nAuthorization: AWS4-HMAC-SHA256 Credential=ASIAVWTKLCOCOIOFTPKG/20190424/ap-northeast-1/codedeploy-commands/aws4_request, SignedHeaders=content-type;host;x-amz-codedeploy-agent-version;x-amz-content-sha256;x-amz-date;x-amz-security-token;x-amz-target, Signature=aed5d31c9163bdda5557124ab5481cf2eeacd6ef3e46f23f5091073a77ac7aee\r\nContent-Length: 89\r\nAccept: */*\r\n\r\n"

update.log

CodeDeployエージェントのインストールや、アップデートの情報が含まれます。ログは/tmp/codedeploy-agent.update.logに出力されます。

ログ出力例

I, [2019-04-24T12:43:52.778471 #11980]  INFO -- : Starting Ruby version check.
I, [2019-04-24T12:43:52.778670 #11980]  INFO -- : Starting update check.
I, [2019-04-24T12:43:52.778756 #11980]  INFO -- : Attempting to automatically detect supported package manager type for system...
I, [2019-04-24T12:43:52.786526 #11980]  INFO -- : Checking AWS_REGION environment variable for region information...
I, [2019-04-24T12:43:52.786586 #11980]  INFO -- : Checking EC2 metadata service for region information...
I, [2019-04-24T12:43:52.830642 #11980]  INFO -- : Downloading version file from bucket aws-codedeploy-ap-northeast-1 and key latest/VERSION...
I, [2019-04-24T12:43:52.873046 #11980]  INFO -- : Downloading version file from bucket aws-codedeploy-ap-northeast-1 and key latest/VERSION...
I, [2019-04-24T12:43:52.910706 #11980]  INFO -- : Downloading package from bucket aws-codedeploy-ap-northeast-1 and key releases/codedeploy-agent-1.0-1.1597.noarch.rpm...
I, [2019-04-24T12:43:53.056980 #11980]  INFO -- : Executing `/usr/bin/yum -y localinstall /tmp/codedeploy-agent-1.0-1.1597.noarch.tmp-20190424-11980-1a6pebn.rpm`...
I, [2019-04-24T12:43:55.494367 #11980]  INFO -- : Update check complete.
I, [2019-04-24T12:43:55.494443 #11980]  INFO -- : Stopping updater.

CloudWatch Logsへの転送

環境構築手順については割愛します。今回は以下の環境を利用しました。

CloudWatchAgent設定

CloudWatch Logsに転送するために、CloudWatchAgentの設定が必要です。ここではパラメータストアを利用して設定しました。転送するログは、codedeploy-agent.logcodedeploy-agent-deployments.logscripts.logとしています。以下設定をパラメータストアに格納します。

{
  "agent": {
    "metrics_collection_interval": 10,
    "logfile": "/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log"
  },
  "logs": {
    "logs_collected": {
      "files": {
        "collect_list": [
          {
            "file_path": "/opt/codedeploy-agent/deployment-root/deployment-logs/codedeploy-agent-deployments.log",
            "log_group_name": "codedeploy-agent-deployments.log"
          },
          {
            "file_path": "/var/log/aws/codedeploy-agent/codedeploy-agent.log",
            "log_group_name": "codedeploy-agent.log"
          },
          {
            "file_path": "/opt/codedeploy-agent/deployment-root/*/*/logs/scripts.log",
            "log_group_name": "scripts.log"
          }
        ]
      }
    }
  }
}

scripts.logの格納ディレクトリは、ディレクトリ名にデプロイID(deployment-ID)を含みます。設定時にディレクトリ名は明らかになりませんので、ワイルドカードを使用しています。logsセクションの詳細については、以下をご確認ください。

CloudWatch Logs確認

CloudWatch Logsへの転送を確認するために、デプロイを実施しました。

02

デプロイ実施後にCloudWatch Logsを確認すると、設定どおりのログが出力されていました。

01

codedeploy-agent-deployments.log

03

codedeploy-agent.log

04

scripts.log

05

さいごに

デプロイでエラーが発生した際、マネジメントコンソールに表示されるエラーだけではトレースが難しいかと思います。また、ログ確認のために都度サーバにログインしては、運用等の負荷につながります。CodeDeployを利用する際は、CloudWatch Logs等で集中的にモニタリングすることをお勧します。

参考