CloudWatchLogsによるログの一括管理
ユースケース
AWS上で運営するEC2インスタンスのログを一括管理したい時はCloudWatchLogsを利用する。CloudWatchLogsを利用することで個々のインスタンスのログ管理を集約することができるのでログ管理の簡素化できる。
利用手順
EC2インスタンスがCloudWatchLogsにログを書き込めるようにIAMロールで権限設定を行う。(※下記の手順では既存ロールを作成しているがEC2用の既存ロールがあれば、既存ロールに対してCloudWatchFullAccessのポリシーを割り当ててもよい)
IAMロール作成
- IAM > ロール を選択
- ロールを作成 > AWSサービス > EC2を選択
- CloudWatchFullAccessのポリシーを割り当てる
- ロール名をつけてロールを作成する
EC2インスタンスにロールの割り当て
- EC2 > インスタンス > ロールを割り当てたいインスタンスを選択
- アクション > インスタンスの設定 > IAMロールの割り当て/置換を選択
- 作成したIAMロールを割り当てる
エージェントのセットアップ
CloudWatchLogsにログ出力したいEC2インスタンスにログインする
ログエージェントをインストールする
////パッケージアップデート sudo yum update -y ////ログエージェントをインストール sudo yum install -y awslogs
ログエージェントのリージョン情報を編集する。今回はTokyoリージョンのCloudWatchLogsに書き込むので「ap-northeast-1」に変更。
////ログを書き出すリージョンの設定 sudo vi /etc/awslogs/awscli.conf ////awscli.confのregion以下に変更する region = ap-northeast-1
ログエージェントの設定ファイルを編集。
////設定ファイルを編集 sudo vi /etc/awslogs/awslogs.conf ////awslog.confの末尾に以下のセクションを追記する [/etc/httpd/logs/access_log] log_group_name = apache/access_log log_stream_name = {instance_id}_access_log file = /etc/httpd/logs/access_log initial_position = start_of_file buffer_duration = 5000
ここでは一つのログファイルだけを管理対象にしているが複数個のログファイルを管理したければ、さらに追加のセクションを記述すればよい。
なお、awslog.confに記載したパラメータの意味はそれぞれ以下の通り。
[/etc/httpd/logs/access_log] => セクション名 log_group_name = apache/access_log => ログをCloudWatchLogのどのグループに保存するか log_stream_name = {instance_id}_access_log => ログストリーム名。グループの中でのログの識別子 file = /etc/httpd/logs/access_log => 保存するログの内容が記載されているファイル名 initial_position = start_of_file => ログファイルの詠み込み開始位置。start_of_fileまたはend_of_fileを指定 buffer_duration = 5000 => ログは吐き出すまでの期間をミリ秒で指定
エージェントをスタートさせる
sudo service awslogs start
sudo chkconfig awslogs on
動作確認
エージェントが実行されてしばらくしたら、CloudWatch コンソールにアクセス。新しく作成されたロググループとログストリームを確認する。
補足
ここまでの内容は以下のページでも詳しく解説されている。
docs.aws.amazon.com