awscliやlambdaなど、いろいろなところからCloudWatchに連携できますが、Amazon Linuxにたまったログをそのまま連携したい時もあります。
そんなときはawslogsが利用できるようです。
logのputだけじゃなくgetもできるようです。
準備
EC2へのIAMロールの関連付け
ログを出力するサーバにCloudWatchにログが出力可能なロールを紐付けておきます。
とりあえずCloudWatchFullAccessを紐付けました。
いつの頃からか、後からでも紐付けできるようになりました。
awslogsはEC2以外だと利用できないのですかね。。。できたら便利なのですが。
awslogsのインストール
sudo yum install awslogs
リージョンの設定 /etc/awslogs/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は書き換わりません)。
[/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のログに出力されています(割愛)。
いや。ほんとに便利。
参考
以下のサイトが大変参考になりました。ありがとうございます。