Amazon Linux 2 LTSにCloudWatch Logsをインストール・設定する


IAMポリシー作成

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents",
                "logs:DescribeLogStreams"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:logs:*:*:*"
        }
    ]
}

IAMロール作成

作成したIAMポリシーをIAMロールに紐付ける

IAMロール割り当て

作成したIAMロールをwebサーバに割り当てる

CloudWatch Logsインストール

sudo su -
yum update -y
yum install -y awslogs

# 東京regionを設定
cp -ip /etc/awslogs/awscli.conf /etc/awslogs/awscli.conf.org
diff /etc/awslogs/awscli.conf.org /etc/awslogs/awscli.conf
# 差分の無いことを確認

vi /etc/awslogs/awscli.conf
# =====vi ここから=====
region = ap-northeast-1
# =====vi ここまで====

diff /etc/awslogs/awscli.conf.org /etc/awslogs/awscli.conf
# 編集した差分を確認

# 取得したいログファイルを設定
cp -ip /etc/awslogs/awslogs.conf /etc/awslogs/awslogs.conf.org
diff /etc/awslogs/awslogs.conf.org /etc/awslogs/awslogs.conf
vi /etc/awslogs/awslogs.conf
# =====vi ここから=====
[general]
state_file = /var/awslogs/state/agent-state

[MessagesLog]
file = /var/log/messages
log_group_name = MessagesLog
log_stream_name = {instance_id}
datetime_format = %b %d %H:%M:%S

[SecureLog]
file = /var/log/secure
log_group_name = SecureLog
log_stream_name = {instance_id}
datetime_format = %b %d %H:%M:%S
# =====vi ここまで====

diff /etc/awslogs/awslogs.conf.org /etc/awslogs/awslogs.conf
# 編集した差分を確認

mkdir -p /var/awslogs/state/
ls -ld /var/awslogs/state/
# ディレクトリが存在することを確認

# サービス起動
systemctl status awslogsd.service
systemctl start awslogsd.service
systemctl status awslogsd.service
# 起動していることを確認

# サービスの自動起動有効化
systemctl is-enabled awslogsd.service
systemctl enable awslogsd.service
systemctl is-enabled awslogsd.service
# enableであることを確認

確認

「AWSコンソソールのサービス>CloudWatch>ログ」に
ロググループ「MessagesLog」と「SecureLog」が作成されていれば成功です

参考記事

https://www.yamamanx.com/aws-cloudwatch-logs-ec2-nginx/
https://dev.classmethod.jp/cloud/aws/awslogs-amazonlinux2/