概要
/var/log/messages
などのOSのログ、/var/log/httpd/access.log
などのサーバ・ソフトウェアのログをCloudWatch Logsに集約します。設定はかんたんです。- EC2インスタンスやContainerなどの計算資源は使い捨てですが、ログだけは監査などのために保管しておきたいため一通り設定しました。
設定
ssm-agentを使っていない場合は、ssm-agentを設定しておいたほうが良いです。(AWS Access keyでの認証もできますが、面倒だし少しセキュアではないので)
Amazon Linux 2の場合
設定は楽です。こちらの公式ドキュメントを参考にインストールすればOKです。
% sudo yum install -y awslogs
/etc/awslogs/awscli.conf
を変更します。デフォルトだとusになっているので、ap-northeast-1
などに書き換えます。
つぎに、/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 [/var/log/secure] datetime_format = %b %d %H:%M:%S file = /var/log/secure buffer_duration = 5000 log_stream_name = {instance_id} initial_position = start_of_file log_group_name = /var/log/secure
datetime_format
は、読み込むログファイル内で、日付がどのようなフォーマットで表記されているかです。これをもとにtimestampを生成した上で、CloudWatchに送信されます。
最後に、systemctlでサービスを有効にします。
% sudo systemctl start awslogsd % sudo systemctl enable awslogsd.service
Ubuntuの場合
Amazon Linux 2のようにパッケージは用意されていません。Pythonのセットアップスクリプトを実行することによって、/var/awslogs
に必要ファイルが展開されます。
セットアップ方法はこちらが一番綺麗に整理されているので参考にするのが良いです。
途中で、regionのパラメータを設定する必要があるのでそちらは適宜置き換えます。以下は東京の例。
$ sudo python ./awslogs-agent-setup.py --region ap-northeast-1
セットアップ中に、AWS access key IDとAWS secret access keyが聞かれますが、ssm-agentを使っているならば空白で飛ばしてOKです。
インストールが完了すると、設定ファイルは/var/awslogs/etc/awslogs.conf
に置かれているので開きます。
Ubuntu/Debianの場合は以下のような設定を追記します。
[/var/log/syslog] datetime_format = %b %d %H:%M:%S file = /var/log/syslog buffer_duration = 5000 log_stream_name = {instance_id} initial_position = start_of_file log_group_name = /var/log/syslog [/var/log/auth.log] datetime_format = %b %d %H:%M:%S file = /var/log/auth.log buffer_duration = 5000 log_stream_name = {instance_id} initial_position = start_of_file log_group_name = /var/log/auth.log [/var/log/kern.log] datetime_format = %b %d %H:%M:%S file = /var/log/kern.log buffer_duration = 5000 log_stream_name = {instance_id} initial_position = start_of_file log_group_name = /var/log/kern.log [/var/log/dpkg.log] datetime_format = %Y-%m-%d %H:%M:%S file = /var/log/dpkg.log buffer_duration = 5000 log_stream_name = {instance_id} initial_position = start_of_file log_group_name = /var/log/dpkg.log
最後にリスタートを忘れずに。
% sudo service awslogs restart
設定の確認
こんな感じでインスタンスIDごとにログストリームができます。
Logs Insightで横断的に検索できます。使い方はこちらの記事を参照。
このようにCloudWatch Logsに入ってしまえば、メッセージや流量をトリガーにSNS経由でアラートを発行できるようになります。
とりあえずシステムのログはCloudWatchに入れてしまうのが良いと思います。
まとめ
- システム系のログは流量が少ないので何も考えずにCloudWatch Logsに入れてしまって良いと思います。
- アプリケーション系は要望によって、要設計。
Comments