##やりたいこと
EC2インスタンス内のログをAWSで管理したい。
##ログをAWSで管理すると嬉しいこと
- Zabbixなどの監視用ミドルを使わずにログを監視できる
- ログをリアルタイムにLambdaで処理できる
- S3に転送できたり、Kinesisと連携できたりする
用途は様々あるので、その手始めとしてCloudWatch Logsを使用してEC2内のログをCloudWatchに送る。
##1. CloudWatch書き込み用のポリシーを作成してEC2のロールに紐づける
「IMA」→「ポリシー」→「ポリシーの作成」
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents",
"logs:DescribeLogStreams"
],
"Resource": [
"*"
]
}
]
}
参考:https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/QuickStartEC2Instance.html
作成したポリシーをEC2インスタンスのロールに紐づける。
2. EC2にCloudWatchLogsエージェントをインストールする。
※EC2のイメージはAmazonLinux2を使用しています
$ sudo yum update -y
$ sudo yum install -y awslogs
$ sudo vi /etc/awslogs/awscli.conf
[default]
region = us-east-1
↓
[default]
region = ap-northeast-1
CloudWatchに送るログの指定を行っていきます。
デフォルトで/var/log/messagesを送る設定が記載されているので、それを修正して今回は/var/log/test.logを作成して、対象のログファイルとします。
$ sudo vi /etc/awslogs/awslogs.conf
[/var/log/test.log]
datetime_format = %b %d %H:%M:%S
file = /var/log/test.log
buffer_duration = 5000
log_stream_name = {instance_id}
initial_position = start_of_file
log_group_name = /var/log/test.log
$ sudo systemctl start awslogsd
$ sudo systemctl enable awslogsd.service
これでインストールと設定は完了になるので、動作確認を行います。
3. 動作確認
対象のログファイルに文字列を記載します。
$ sudo vi /var/log/test.log
aaaaaa
CloudWatchのログを確認します。
「CloudWatch」→「ログ」→「ロググループ」
awslogs.confのlog_stream_nameの値をインスタンスIDにしているので、「ロググループ」→「インスタンスID」配下にEC2のログが出力されています。
awslogs.confの詳しい設定項目については公式を参考にしてください。
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/AgentReference.html