はじめに
アプリケーションのログをCloudWatchへ転送することが出来ると、
Logs insightsで統計的な分析が出来たり、
CloudWatch Alermと連携させて特定のlogを検出すれば通知させたりすることが出来ます。
今回はOpsworksでEC2を管理している場合での、CloudWatchへのログの転送方法を紹介します。
転送方法
OpsworksではStackという概念があり、Stackの中にLayersと呼ばれる管理単位があり、この中でEC2インスタンスを管理します。
(Stack > Layers > EC2インスタンス という関係)
CloudWatchへの転送の設定はLayersの設定変更のページで行います。
※ インスタンス単位で設定するワケではないので、対象となるLayers内で管理されているEC2全てでCloudWatchへの転送設定が反映されます。
対象となるLayersを選択、CloudWatch Logs タブを開き、Editボタンを押します。

CloudWatch Logs integrationをOnにし、Stream command logsをYesにすれば、
Stream custom logs に記述したパスのlogを転送させることが出来ます。
ただし、上の画像の注意文にあるように、今のままではIAMのポリシーが無いので、
CloudWatch Logsへの転送を可能にするには、Default IAM instance profileのIAMロールにAWSOpsWorksCloudWatchLogsポリシーをアタッチする必要があります。
IAMロールにポリシーのアタッチ
Default IAM instance profileはStackページのstack settingsで確認できます。
Advanced options の項目にDefault IAM instance profile は載っています。
ここからIAMロールのページへ飛べます。
該当のIAMロールのページへジャンプしたら、「ポリシーをアタッチします」ボタンをクリックします。

AWSOpsWorksCloudWatchLogs で検索し、チェックボックスにチェックを入れたら「ポリシーのアタッチ」をクリックします。
これでCloudWatch Logsに転送する許可設定が出来ました。
あとは、先ほどのEdit画面のStream Custom Logsの欄に転送したいlogのパスを記入します。
例) /var/www/rails_app/log/production.log
「Save」ボタンを押して暫くすると設定が反映されます。
反映
「Save」して暫くすると、対象レイアーのインスタンス内で/var/awslogs が自動生成されます。
細かい設定は /var/awslogs/etc/awslogs.confで変更できますが、名前の変更くらいなので使うことは無いと思います。
暫くするとCloudWatchのロググループに反映されます。
ロググループの命名規則は
Stack名/Layers名/指定したパス名
となります。
これでCloudWatchへのログ転送完了となります。


