CloudWatch Logsエージェントの利用時の注意点

記事タイトルとURLをコピーする

こんにちは、技術1課の多田です。

先週の連休中に大阪に旅行してきました。 大阪は食べ物も観光地も豊富で楽しく過ごせました。また、機会を改めて行きたいものです。

さて、今回の記事は、CloudWatch Logsのエージェント『awslogs』の使用時の注意点として確認を行ったOSは、『Amazon Linux バージョン2015.09.2』になります。 その他のOSの対応状況については、こちらの「CloudWatch Logsエージェントの前提条件」をご覧下さい。

 

以下、目次です。

  1. awslogsとは
  2. logrotateについて
  3. awslogsのデフォルト設定
  4. まとめ

awslogsとは

awslogsとは、CloudWatch Logsのエージェントになります。 awslogsは、EC2の各種ログファイルをCloudWatch Logsにて統合監視するために使用します。 セットアップの詳細は、こちらをご覧ください

logrotateについて

本題に入る前にlogrotateについても記します。 logrotateは、放置しておくと肥大化してしまう各種ログファイルに対して何世代までローテーションするかを設定してログディレクトリの逼迫を防ぐために使います。 awslogsもログローテーションするのですが、対象の設定ファイルは「/etc/logrotate.d/awslogs」になります。

awslogsのデフォルト設定

「/etc/logrotate.d/awslogs」のデフォルト設定は下記の通りです。

[root@ip-10-xx-xx-xx ec2-user]# cat /etc/logrotate.d/awslogs
# Version: 1.1.2-rpm
/var/log/awslogs.log {
missingok
notifempty
size 100M
create 0600 root root
delaycompress
compress
rotate 4
postrotate
service awslogs condrestart
endscript
}

尚、各種パラメーターの役割については以下をご覧下さい。

パラメーター名 役割

missingok

指定のログファイルが存在しなくてもエラーを出さずに処理実行。

notifempty

元のログファイルが空ならばローテーションしない。

size num[K/M]

ログサイズがnumバイトを超えていればローテーションを行う。 (キロ/メガ)の指定も可能。

create [mode] [owner] [group]

(下記のpostrotateした後)、代わりに空の新規ログファイルを作る。 [mode]ではパーミッション指定できる。

delaycompress

圧縮処理をその次のローテーションの時まで遅らせる。 compressも指定しないと機能しない。

compress

ローテーションした後の旧ファイルに圧縮をかける。

rotate num

世代ローテーションのステップ数。 例えば、numが4でログファイル名がhoge.logの場合、ローテーション後、 ファイル名がhoge.log.1 → hoge.log.2の順番に数字がついてローテーションされ、 hoge.log.4までは作成されるが、それ以降は破棄される。

postrotate

script

endscript

ローテーションが行われた後に実行するスクリプト。 awslogsでは、「service awslogs condrestart」で、サービスの再起動が実行されます。

 

この設定の中で、「create 0600 root root」という一文があります。 これは、ログローテーションが実行されると、「/var/log/awslogs.log」のパーミッションが「0600」へと変更されることを意味します。

この状態では、当然ながらroot以外の他のユーザーからはログファイルを読み取ることができません。 このような状態ですと、例えばログファイルの状態を監視しようとしても監視できず、障害発生時にもアラートが発生しない等の状況も発生してしまいます。 そのため、下記のようにパラメーターを変更することでログファイルのパーミッションを変更できます。 尚、パラメーター変更前のログファイルのパーミッションは、次の状態だったと仮定します。

【パラメーター変更前】

# ls -l /var/log/awslogs.log*
-rw------- 1 root root  1620  3月 22 05:17 /var/log/awslogs.log

 

【パラメーター変更】

# Version: 1.1.2-rpm
/var/log/awslogs.log {
missingok
notifempty
size 100M
create 0644 root root ←この行の「0600」の値を「0644」に変更します。
delaycompress
compress
rotate 4
postrotate
service awslogs condrestart
endscript
}

上記の変更後ログローテーションが実行されると、ログファイルのパーミッションが「0644」になります。 上記の設定ですと、ファイルが100MBを超えるとログローテーションが発生しますが、即座に有効化できているかを確認したい場合は次のコマンドを実行します。

[root@ip-10-xx-xx-xx ec2-user]# /usr/sbin/logrotate -f /etc/logrotate.d/awslogs

 

上記コマンドでログローテーションが強制的に実行されますので、「/var/log/awslogs.log」のパーミッションを確認します。 【パラメーター変更後】

# ls -l /var/log/awslogs.log*
-rw-r--r-- 1 root root  1119  3月 22 05:26 /var/log/awslogs.log
-rw------- 1 root root  1620  3月 22 05:17 /var/log/awslogs.log.1

/var/log/awslogs.log」のパーミッションがパラメーター変更前後で変化していることが確認できました。

まとめ

今回は、awslogsの使用時の注意点として、ログローテーションに焦点を当てた内容になります。 awslogsのサービス起動時のログファイルは、パーミッションが「0644」になっているのですが、そのままログを肥大化させ続けてしまうと、ある日突然ログファイルを読み取れないといった事態になりかねないので、運用時は注意が必要です。