CloudWatch Logs Agent の設定について、調べたことをまとめました。
はじめに
Agentの設定ファイルは、/var/awslogs/etc/awslogs.conf
にあります。
/var/log/messagesをログ送信するだけの、簡単な設定ファイルはこんな感じです。
とってもシンプルですね。
[general]
state_file = /var/awslogs/state/agent-state
[/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
log_stream_name で使えるプレースホルダー
log_stream_name には、{instance_id}の他に、 {hostname} と {ip_address} が使えます。
ベタで書かなくていいのは嬉しいですね。
file にwildcardを使う
file = /var/log/messages*
の様にワイルドカードで指定することが可能です。
ファイル名が日付でインクリメントされるようなログをハンドリングしたい場合に有効ですが、
性質が違うログ(access_log_80, access_log_443)を誤ってハンドリングするかもしれないので注意が必要です。
Only the latest file is pushed to CloudWatch Logs based on file modification time.
指定されたパスに該当するファイルが複数あっても、
ログ送信の対象は、mtimeがもっとも新しいファイルになります。
datetime_formatを指定して、Creation Timeの表示を変える
datetime_formatには、ログから時刻を抽出する際のフォーマットを指定します。
datetime_formatが正しく指定されている場合、
Web Consoleで確認できるCreation Timeに、ログから抽出した時刻を表示させることができます。
datetime_formatが指定されなかったり、Syntaxが間違っていたり、
Syntaxが正しくてもログから時刻が抽出できない場合は現在時刻になります。
生ログの時刻をdatetime_format
でパースできないと現在時刻が使われるようです。
【緩募】
一点困ったのは、フォーマットの中にUnix Time Stampの指定する方法がわかりませんでした。
/var/log/audit/audit.log
などで利用したいのですが、誰か知っている方いらっしゃったら教えて下さい。
参考
http://aws.typepad.com/aws_japan/2014/07/cloudwatch-log-service.html
https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/AgentReference.html