話題の記事

Amazon CloudWatch Logsでログファイルを監視する

2014.07.10

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ども、大瀧です。
本日開催されているAWS Summit New YorkでCloudWatchの新機能、CloudWatch Logsが発表されました。
バックでKinesisが動いているらしく、スケーラブルなログアグリゲーションサービスとして期待できそうです。ひとまず、どんなものか試してみたのでレポートします。

1. IAMユーザー/IAMロールの準備

動作する仕組みは一般的なログアグリゲーションサービスと変わらず、ログ収集対象のマシンにエージェントをインストールし、アグリゲータにログを順次送信する形態です。エンドポイントはCloudWatchのAPIなので、他のAWS APIと同様にCloudWatch Logsに必要な以下の権限を付与したIAMユーザー、もしくはIAMロールを準備します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "logs:*",
        "s3:GetObject"
      ],
      "Resource": [
        "arn:aws:logs:us-east-1:*:*",
        "arn:aws:s3:::*"
      ]
    }
  ]
}

2. CloudWatch Logsエージェントのインストール

以下のコマンドラインでエージェントのインストールと初期設定(対象ログの指定)を行います。今回は、nginxのログとシステムログを指定してみました。現時点ではアグリゲータはus-east-1リージョンのみですのでStep 3では他のリージョンは指定できませんが、ログを送信するEC2インスタンス自体は他のリージョンでもOKです。今回はap-northeast-1リージョンのインスタンスで試しています。

$ wget https://s3.amazonaws.com/aws-cloudwatch/downloads/awslogs-agent-setup-v1.0.py
--2014-07-10 14:26:06--  https://s3.amazonaws.com/aws-cloudwatch/downloads/awslogs-agent-setup-v1.0.py
s3.amazonaws.com (s3.amazonaws.com) をDNSに問いあわせています... 207.171.187.117
s3.amazonaws.com (s3.amazonaws.com)|207.171.187.117|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 37928 (37K) [application/x-python]
`awslogs-agent-setup-v1.0.py' に保存中

100%[===========================================================================================>] 37,928      70.6KB/s 時間 0.5s

2014-07-10 14:26:08 (70.6 KB/s) - `awslogs-agent-setup-v1.0.py' へ保存完了 [37928/37928]

$ sudo python ./awslogs-agent-setup-v1.0.py --region us-east-1
Launching interactive setup of CloudWatch Logs agent ...

Step 1 of 5: Installing pip ...DONE

Step 2 of 5: Downloading the latest CloudWatch Logs agent bits ... DONE

Step 3 of 5: Configuring AWS CLI ...
AWS Access Key ID [None]: AKIAXXXXXXXXXXXXXXXXX
AWS Secret Access Key [None]: XXXXXXXXXXXXXXXXXXXXXX
Default region name [None]: us-east-1
Default output format [None]:

Step 4 of 5: Configuring the CloudWatch Logs Agent ...
Path of log file to upload [/var/log/messages]: /var/log/nginx/access.log
Destination Log Group name [/var/log/nginx/access.log]:

Choose Log Stream name:
  1. Use EC2 instance id.
  2. Use hostname.
  3. Custom.
Enter choice [1]:

Choose Log Event timestamp format:
  1. %b %d %H:%M:%S    (Dec 31 23:59:59)
  2. %d/%b/%Y:%H:%M:%S (10/Oct/2000:13:55:36)
  3. %Y-%m-%d %H:%M:%S (2008-09-08 11:52:54)
  4. Custom
Enter choice [1]:

Choose initial position of upload:
  1. From start of file.
  2. From end of file.
Enter choice [1]:
More log files to configure? [Y]: y
Path of log file to upload [/var/log/messages]: /var/log/nginx/error.log
Destination Log Group name [/var/log/nginx/error.log]:

Choose Log Stream name:
  1. Use EC2 instance id.
  2. Use hostname.
  3. Custom.
Enter choice [1]:

Choose Log Event timestamp format:
  1. %b %d %H:%M:%S    (Dec 31 23:59:59)
  2. %d/%b/%Y:%H:%M:%S (10/Oct/2000:13:55:36)
  3. %Y-%m-%d %H:%M:%S (2008-09-08 11:52:54)
  4. Custom
Enter choice [1]:

Choose initial position of upload:
  1. From start of file.
  2. From end of file.
Enter choice [1]:
More log files to configure? [Y]:
Path of log file to upload [/var/log/messages]:
Destination Log Group name [/var/log/messages]:

Choose Log Stream name:
  1. Use EC2 instance id.
  2. Use hostname.
  3. Custom.
Enter choice [1]:

Choose Log Event timestamp format:
  1. %b %d %H:%M:%S    (Dec 31 23:59:59)
  2. %d/%b/%Y:%H:%M:%S (10/Oct/2000:13:55:36)
  3. %Y-%m-%d %H:%M:%S (2008-09-08 11:52:54)
  4. Custom
Enter choice [1]:

Choose initial position of upload:
  1. From start of file.
  2. From end of file.
Enter choice [1]:
More log files to configure? [Y]: n

Step 5 of 5: Setting up agent as a daemon ...DONE


------------------------------------------------------
- Configuration file successfully saved at: /var/awslogs/etc/awslogs.conf
- You can begin accessing new log events after a few moments at https://console.aws.amazon.com/cloudwatch/home?region=us-east-1#logs:
- You can use 'sudo service awslogs start|stop|status|restart' to control the daemon.
- To see diagnostic information for the CloudWatch Logs Agent, see /var/log/awslogs.log
- You can rerun interactive setup using 'sudo ./awslogs-agent-setup.py --region us-east-1 --only-generate-config'
------------------------------------------------------
$

これで準備OKです。

3. ログの参照

では、Management ConsoleのCloudWatchの画面を見てみましょう。リージョンをN-Virginiaに切り替えることに注意し、メニューから[Logs]を選択します。

cloudwatchlogs1-1

お、出てますねー。グループ名(ファイル名) - インスタンスIDと階層化されているので、台数が増えてきても検索しやすい感じです。

cloudwatchlogs2

数分前のアクセスログもきちんと表示されていますし、表示日時の指定などログ検索の基本的な機能は揃っているようです。

まとめ

とても簡単にログ監視の仕組みを導入することができました!手軽に使えるログストアとしてCloudWatch Logsを活用しましょう!願わくば、CloudFrontとELBログもCloudWatch Logsに食わせられるといろいろ捗ると思います!(遅いAWS七夕