個人用としてはあまり気になりませんが、
企業用としてサーバを立てる際、ログの管理をキッチリやっておかないと大変です。
だって、サーバに障害が起こったら、まずはログ確認ってなりますよ。
オンプレミスのサーバですと、ZabbixやFluentd等を利用してサーバログを別のマネージャサーバで管理するというのが一般的です。
じゃ、AWSはどうするの?というと、AWSではCloudWatch Logsを利用するのが超便利なんです!
今回は、「CloudWatch Logsとは何者なんだ?」「どんな使い方なんだ?」という点をご紹介していきたいと思います。
CloudWatch Logsとは?
CloudWatch Logsとは、EC2やRDS等のログデータをリアルタイムで収集、保管、管理を簡単に行うことができるAWS CloudWatchの機能の一つです。
CloudWatch Logsは、サーバーからログ収集する以外にも以下のような様々なことが出来ちゃうんです!
【CloudWatch Logsでできること】
- OSやミドルウェア、アプリケーションログの他、RDSログもリアルタイムに収集・保管することができる
- 一度設定すればサーバーにアクセスせずにログを確認することができる
- 保管したログに対してフィルタリングすることができる
- 保管期間が設定でき、期間が過ぎたら自動的に削除してくれる(保管無制限にすることも可)
- 保管したログをS3へエクスポートすることができる
- ログに特定のキーワードが書き込まれたらアラート通知をするようなことが簡単に設定できる
CloudWatch Logsの仕組み
まずはCloudWatch Logの仕組みを図示してみます。
すると、こんな感じで動いているんですね↓
EC2サーバ内にCloudWatchLogsのエージェントが動いており、指定したログファイルを随時監視しているイメージです。
監視対象のログファイルに新しくログが書き出されたら、そのログデータをCloudWatch Logsへコピーします。
コピーされたログはどこに保管されるかと言うと、我々には見えないCloudWatch Logs専用のS3に保管されます。
S3で保管されるデータは、なんと耐久率が99.999999999%!
ほぼ壊れないと言っていいでしょう。
だからCloudWatch Logsに保管されているログはバックアップの必要が無いんです!
しかもこれ、すべてサーバレスで実現される。
これがCloudWatch Logsの一つの強みとも言えます。
保管されたログデータは以下のようにCloudWatch Logsの管理コンソールから確認できますよ。
ZabbixやFluentdと比べてどう違うのか?
冒頭でもお話したように、ログ収集・保管・管理はZabbixやFluentdといったソフトが有名です。
もちろんZabbixやFluentdもAWSサーバで利用可能です。
ですが、両者とも管理用のサーバが必要ではありませんか?
なんなら管理用サーバのログ保管もしなくてはならないと言う、わけのわからないことが必要になりませんか?(笑)
そうです、CloudWatch Logsとこれらサードパーティ製のログ管理ソフトとの決定的な違いは、管理用サーバの有無なんです!
上記でもお話したように、CloudWatch Logsであれば管理用サーバは不要です。
そのため管理用サーバの管理も、もちろん不要です。
さらにCloudWatch Logsの大きなメリットとして設定の容易さという点もあげられます。
AWSサービス同士ですので連携が取りやすいため、設定が容易となるんです。
EC2へのインストール・設定方法
それではEC2へCloudWatch Logsエージェントをインストール、設定方法を見ていきましょう。
CloudWatch Logsを利用する場合、以下の2つの設定が必要です。
- 特殊なIAMロールを作成し、EC2に割り当て
- EC2にCloudWatch Logsをインストール・設定する
IAMロールの作成
まずはじめに、EC2からCloudWatch Logsへログ送信を行うのに必要なIAMロールの作成をしましょう。
IAMロールがないと、せっかくEC2にエージェントをインストールして設定しても、
エージェントからCloudWatch Logsへログを送信することができません。
なぜならEC2にCloudWatch Logsへログを保管する権限が無いからです!
IAMユーザーのアクセスキーとシークレットキーをEC2に持たせるという方法もありますが、IAMロールを使う方がセキュリティ面からみても安全ですので、IAMロールを使った方法をご紹介します。
(1)IAM管理コンソールから[ロールの作成]をクリックします
(2)[EC2]を選択して、[次のステップ:アクセス権限]をクリックします
(3)”CloudWatchLogs”と検索すると、”CloudWatchFullAccess”が表示されますので、チェックを入れて[次のステップ:確認]をクリックします
(4)任意のロール名を入力して[ロールの作成]をクリックします
(5)CloudWatchLogsエージェントのためのIAMロールが完成しました
IAMロールをEC2へ適用する
次は作成したIAMロールをEC2へ適用します。
(1)EC2管理コンソール画面から対象のインスタンスを選択し、[アクション]→[インスタンスの設定]→[IAMロールの割り当て/置換]をクリックします
(2)先ほど作成したIAMロールを選択し、[適用]をクリックします
(3)IAMロールの割り当てが完了しました
CloudWatch Logsエージェントのインストール・設定方法
それではEC2にCloudWatch Logsエージェントをインストールし、設定する方法をご紹介します。
(1)EC2サーバへSSHログインします
(2)以下のコマンドでCloudWatch Logsエージェントをインストールします
1 |
sudo yum install -y awslogs |
(3)次のコマンドによって”/etc/awslogs/awscli.conf”を確認・修正します
1 |
sudo vi /etc/awslogs/awscli.conf |
ここではログデータの送信先が正しいリージョンとなっているか確認します。
“region = “の次に書かれているリージョンが、見ようとしているCloudWatch Logsのリージョンと一致しているかを確認します。
違っていたら、”region = “から先の”us-east-1″の部分を修正しましょう。
1 2 3 4 |
[plugins] cwlogs = cwlogs [default] region = us-east-1 |
(4)次のコマンドによって/etc/awslogs/awslogs.confを修正します
1 |
sudo vi /etc/awslogs/awslogs.conf |
ここではどのログを監視し、どのようにCloudWatch Logsへコピーするのかを設定します。
デフォルトで以下のように[/var/log/messages]が入っています。
“file”は監視対象のログファイルを指定します。
今回はお試しというこで、このままデフォルト設定のままとします。
1 2 3 4 5 6 7 |
[/var/log/messages] datetime_format = %b %d %H:%M:%S file = /var/log/messages buffer_duration = 5000 log_stream_name = {instance_id} initial_position = start_of_file log_group_name = /var/log/messages |
(5)以下のコマンドでCloudWatch Logs エージェントを起動します
1 |
sudo systemctl start awslogsd |
CloudWatch Logsでログを確認してみよう!
上記の設定が完了しましたら、実際にログを確認してみましょう。
(1)CloudWatchコンソール画面、左ナビゲーションメニューの[ログ]をクリックします。
(2)上記で設定したlog_group_name、”/var/log/messages”にてログが更新されているか確認してみましょう。
いかがでしたでしょうか?
CloudWatch Logsを使えば、このように簡単にログの収集、保管、管理をすることが可能となります。
さらに、このCloudWatch Logsの発展系として、
ログに特定のキーワードが出力されたらアラート通知を発報するといった仕掛けを設置することが可能となります。
例えば”error”というキーワードがログに含まれていたらメール通知するといった仕掛けですね。
次の記事でその仕掛けの設定方法をご紹介しておりますので、よろしければご一読ください。
CloudWatch Logsから特定キーワードを検出したらアラートメールを送信する方法
以上、hidesanでした!