Codable Tech Blog

iPhoneアプリケーション開発と AWS(Amazon Web Service)活用に関する記事を配信

CloudWatchLogsによるログの一括管理

ユースケース

AWS上で運営するEC2インスタンスのログを一括管理したい時はCloudWatchLogsを利用する。CloudWatchLogsを利用することで個々のインスタンスのログ管理を集約することができるのでログ管理の簡素化できる。

利用手順

EC2インスタンスがCloudWatchLogsにログを書き込めるようにIAMロールで権限設定を行う。(※下記の手順では既存ロールを作成しているがEC2用の既存ロールがあれば、既存ロールに対してCloudWatchFullAccessのポリシーを割り当ててもよい)

IAMロール作成
  1. IAM > ロール を選択
  2. ロールを作成 > AWSサービス > EC2を選択
  3. CloudWatchFullAccessのポリシーを割り当てる
  4. ロール名をつけてロールを作成する
EC2インスタンスにロールの割り当て
  1. EC2 > インスタンス > ロールを割り当てたいインスタンスを選択
  2. アクション > インスタンスの設定 > IAMロールの割り当て/置換を選択
  3. 作成した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