目的
EC2にCloudWatchのエージェントを導入することで以下が可能になるようです。
- インスタンスやサービスログの蓄積
- ログのモニタリング
- ログのフィルタリング
- ログデータのアーカイブ
- ログデータの分析 (CloudWatch Logs Insights)
- ログのアラート化
今回はCloudWatchを使い、EC2のApacheのアクセスログを収集、確認してみたいと思います。
インスタンス準備
Apacheの導入
- apacheインストール、起動
// インストール
sudo yum install httpd -y
// サービス起動
sudo systemctl start httpd
- アクセス確認
// HEADだけ確認
curl http://localhost | head
- httpdログの出力があるか確認
cd /var/log/httpd
tail -f access_log -n 100
CloudWatchLogsポリシーの設定
- EC2に割り当てるIAMロール作成
1. マネジメントコンソールからIAMを選択
2. 信頼されたエンティティタイプ - AWS のサービス
3. ユースケース - EC2
4. 次へ
5. 検索窓に 「CloudWatchLogsFullAccess」 を入力、チェックオン
6. 次へ
7. ロール名には任意の名前を設定
8. ロールを作成
- IAMロールをEC2に設定
1. マネージメントコンソールからEC2を選択
2. 対象のEC2をチェックオン
3. アクション - セキュリティ - IAMロールを選択
4. IAMロールから、作成したロールを選択
5. IAMロールの更新
ロールをEC2に紐付けることで、CloudWatchLogsサービスの利用権限を保持するようになります。
CloudWatchエージェントの導入
- CloudWatch Logsエージェントのインストール
$ sudo dnf install amazon-cloudwatch-agent
- ウィザードを利用した監視設定
$ cd /opt/aws/amazon-cloudwatch-agent/bin
$ sudo ./amazon-cloudwatch-agent-config-wizard
基本的にdefault choiceですが、今回はhttpdのログ取得なので以下の設定を行います。
Log file path:
/var/log/httpd/access_log
instance_idでログストリームが作成されます。
- JSONファイルのコピー、リネーム
- /opt/aws/amazon-cloudwatch-agent/bin 配下に「config.json」が出来上がります。
しかし、このままでは読み込んでくれないため、起動に失敗します。
/opt/aws/amazon-cloudwatch-agent/etc/ 配下に「config.json」をコピーします。
#ファイル移動
$ sudo cp -p config.json ../etc/
#ディレクトリ移動、リネーム
$ cd ../etc/
$ sudo mv config.json ./amazon-cloudwatch-agent.json
- エージェントの起動、ステータス確認
// 起動
$ sudo systemctl restart amazon-cloudwatch-agent
// ステータス確認
$ sudo systemctl status amazon-cloudwatch-agent
※OSがAM2023の場合、collectが入っていないので、うまくエージェントが起動してくれませんでした。以下を参考にcollectのインストール後、無事に起動しました。
参考URL:https://zenn.dev/techa_log/articles/d2f766d38c0407