はじめに
アプリケーションのログを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へのログ転送完了となります。