Amazon CloudWatch Logsを試してみる
目次
インフラエンジニアの指原です!
AWSにはCPU使用率などをモニタリングするCloudWatchというサービスがあります。
CloudWatchには様々な機能がありますが、今回はその中でも気になっていたCloudWatch Logsを試してみました。
CloudWatch Logsとは?
EC2やその他アプリケーションのログファイルをモニタリングしたり、特定の文字列を確認した際にアラームを発生させたりできるサービスです。
ログファイルのモニタリング - Amazon CloudWatch
とりあえずEC2上のapacheのアクセスログを送信するところまでやってみようと思います。
IAMロールの作成
CloudWatch Logsにログファイルを送信するためにIAMロールを作成してやります。
EC2からログファイルの送信を行うのでロールタイプはAmazon EC2を選択
CloudWatch Logsのポリシーが用意されているので今回はこれを利用します。
CloudWatchlogsFullAccessを選択
IAMの設定はこれだけでOKです。
その後IAMロールを付与したEC2インスタンスを作成します。
awslogsのインストール
起動したインスタンスにログイン後、専用エージェントであるawslogsをインストールします。
[ec2-user@ip-172-xxx-xxx-xxx ~]$ sudo yum install awslog
続いて設定ファイルの変更です。
デフォルトの設定だとバージニア北部リージョン(us-east-1)のCloudWatchを使用してしまうので東京リージョン(ap-northeast-1)に変更します。
[ec2-user@ip-172-xxx-xxx-xxx ~]$ sudo vim /etc/awslogs/awscli.conf [default] region = us-east-1 ⇒region = ap-northeast-1
エージェントの起動、自動起動の設定を行います。
[ec2-user@ip-172-xxx-xxx-xxx ~]$ sudo /etc/init.d/awslogs start Starting awslogs: [ OK ]
自動起動設定
[ec2-user@ip-172-xxx-xxx-xxx ~]$ sudo chkconfig awslogs on
これで送信されているはず!
確認してみましょう!!
ログ送信の確認
コンソール上で確認すると「/var/log/messages」というロググループが作成されていることが分かります。
クリックするとログストリームにインスタンスIDが出力されています。
さらにこいつをクリックするとmessagesの内容が確認できます。
いけましたね!
なぜmessagesがCloudWatch Logsに書き込まれるのか?
⇒デフォルトでmessagesが設定されているからです。
設定は/etc/awslogs/awslogs.confに書かれています。
[/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
apacheのアクセスログを送信する
では今度はapacheのアクセスログをCloudWatch Logsに出力してみましょう!
サーバ上で設定ファイルを変更します。
[ec2-user@ip-172-xxx-xxx-xxx ~]$ sudo vim /etc/awslogs/awslogs.conf
以下を追記します。
[/var/log/httpd/] file = /var/log/httpd/access_log buffer_duration = 5000 log_stream_name = {hostname} initial_position = start_of_file log_group_name = /var/log/httpd
上記設定の内容です。
file
CloudWatch Logs にプッシュするログファイルを指定(/var/log/httpd/*のようにワイルドカード指定も可能です。)
buffer_duration
ログイベントのバッチ期間を指定(5000は最小値且つデフォルト)
log_stream_name
ログストリームの設定(デフォルトはinstance_idですが今回はhostnameにしてみます)
initial_position
データの読み出し位置の指定、end_of_fileもありますが、基本的にはデフォルトのstart_of_fileでいいと思います。
log_group_name
送信先ロググループを指定します。
設定を反映するためにawslogsを再起動します。
[ec2-user@ip-172-xxx-xxx-xxx ~]$ sudo /etc/init.d/awslogs restart
ログ送信の確認
これで確認してみましょう!!
再度コンソールから確認。。。
「/var/log/httpd」が追加されています!!
さらにクリックしてみると。。
ホスト名でログストリームが作成されてますね!!
apacheのアクセスログも確認できました!!
簡単でしたね!!
今回はapacheのアクセスログを送信するだけでしたが、HTTPのステータスコードを監視して40xのエラーが出たときにアラームを送信することも可能です。
その他ElasticSearchと連携してログの分析なども行えます。
まとめ
- CloudWatch Logsとはログ収集用サービス
- 使用するにはawslogsというエージェントが便利
- 送信するだけなら超簡単
次は巷で話題のAWS Lambdaを使用してサーバーレスアーキテクチャを実現してみます!