AWS
CloudWatch
awslogs

awslogsでログをCloudWatchに連携する方法

awscliやlambdaなど、いろいろなところからCloudWatchに連携できますが、Amazon Linuxにたまったログをそのまま連携したい時もあります。
そんなときはawslogsが利用できるようです。

logのputだけじゃなくgetもできるようです。

準備

EC2へのIAMロールの関連付け

ログを出力するサーバにCloudWatchにログが出力可能なロールを紐付けておきます。
とりあえずCloudWatchFullAccessを紐付けました。

いつの頃からか、後からでも紐付けできるようになりました。
awslogsはEC2以外だと利用できないのですかね。。。できたら便利なのですが。

awslogsのインストール

sudo yum install awslogs

リージョンの設定 /etc/awslogs/awscli.conf

awscli.conf
[plugins]
cwlogs = cwlogs
[default]
-region = us-east-1
+region = ap-northeast-1

出力ログの設定 /etc/awslogs/awslogs.conf

デフォルトで[/var/log/messages]が追加されています。削除してもそのままでもいいかと思いますが、とりあえず、以下を追加します。
自分用のカスタムログです。ファイル名とかそういうのはお好みで。

datetime_formatを指定することで、ログの時間とCloudWatch上の表示を一致させてくれます(過去も含む)。
指定しなかったり、ミスマッチだったりすると、過去ログの時間は、取込時になるようです(当然ですがログ内のTimestampは書き換わりません)。

awslogs.conf
[/var/log/mysystem.log]
#[2018-05-12 18:25:15.982] 流し込みたいログのTimestamp
datetime_format = %Y-%m-%d %H:%M:%S.%f
file = /var/log/mysystem.log
buffer_duration = 5000
log_stream_name = {instance_id}
initial_position = start_of_file
log_group_name = /var/log/mysystem.log

利用

awslogsのstart

serviceコマンドで制御できるようです。

sudo service awslogs start

awslogsの永続化

chkconfigで永続化します。

sudo chkconfig awslogs on

ログの確認

うまくいっているとCloudWatchのログに出力されています(割愛)。
いや。ほんとに便利。

参考

以下のサイトが大変参考になりました。ありがとうございます。