昨天有同事問到 CodeDeploy 的 Log 怎麼看,CodeDeploy 在 Manager console 只能看到 return,如果想要知道執行的過程的話,只能跑到 Instance 裡面去看 Log,遇到在 debug CodeDeploy 的話是有點棘手 … 但可以透過 CloudWatch 把 Log 丟出去 (口袋夠深的話)
CodeDeploy Log in Instance 分為以下幾種:
CodeDeploy Agent 本身的 run Log
/var/log/aws/codedeploy-agent/codedeploy-agent.log
CodeDeploy Agent 升級或安裝 Log (應該不需要被記錄)
/tmp/codedeploy-agent.update.log
比較詳細的 deployments Log
/opt/codedeploy-agent/deployment-root/deployment-logs/codedeploy-agent-deployments.log
Appspec 執行 script 的 stdout, stderr Log
/opt/codedeploy-agent/deployment-root/deployment-group-ID/deployment-ID/logs/scripts.log
AWS DevOps Blog 有提到關於 CodeDeploy Log 怎麼拋出來「View AWS CodeDeploy logs in Amazon CloudWatch console」,很直覺是用 CloudWatch agent 去做,但是這僅只適用於 “前三項” 如果你想要看到的是 scripts 執行的 stdout, stderr 的話就無法了,因為 CloudWatch agent 並沒有辦法針對 deployment-group-ID 和 deployment-ID 去動態處理
針對前三項的 Log 你可以在 CloudWatch agent 的 awslogs.conf 這樣寫:
[codedeploy-agent-logs] datetime_format = %Y-%m-%d %H:%M:%S file = /var/log/aws/codedeploy-agent/codedeploy-agent.log log_stream_name = {instance_id}-codedeploy-agent-log log_group_name = codedeploy-agent-log [codedeploy-updater-logs] file = /tmp/codedeploy-agent.update.log log_stream_name = {instance_id}-codedeploy-updater-log log_group_name = codedeploy-updater-log [codedeploy-deployment-logs] file = /opt/codedeploy-agent/deployment-root/deployment-logs/codedeploy-agent-deployments.log log_stream_name = {instance_id}-codedeploy-deployments-log log_group_name = codedeploy-deployments-log
如果要 script run log 目前暫時沒有,你只能 Login 到 Instance 去查看 (AWS 不是推行 Prod 無 key 登入嗎 … orz)。