🖥️

EC2からCloudWatch Logsへログを送信する(AWS Systems Manager編)

2022/02/06に公開

EC2からCloudWatch Logsへのログを送信するための設定方法はいくつか種類がありますが、今回はSystems Managerを使ってAWSコンソール上で設定する方法についてまとめます。
全ての作業を直接インスタンスに入ることなく実施することができます。

CloudWatchエージェントのインストール

IAMロールの作成

AWSリソースに書き込むためには権限が必要です。今回はCloudWatchに書き込むための権限が必要になるため、EC2がCloudWatchに書き込むことを許可するIAMロールを作成します。

ではIAMロールを作成していきます。

エンティティはAWSサービス、ユースケースはEC2を選択して、「次のステップ」をクリックします。

ポリシーは「CloudWatchAgentServerPolicy」と「AmazonSSMManagedInstanceCore」にチェックをします。
CloudWatchAgentServerPolicyはCloudWatch、CloudWatch Logsへの書き込みの許可を持ち、AmazonSSMManagedInstanceCoreはSession Managerに必要なアクセス許可をを持ちます。

選択したら「次のステップ」をクリック。
タグの追加はデフォルトのまま何も設定しないままで問題ありません。そのままさらに「次のステップ」をクリックします。

ロール名を入力したら「ロールの作成」をクリックして、ロールの作成は終わりです。

IAMロールのアタッチ

対象のEC2を選択し、アクション>セキュリティ>IAMロールを変更の順にクリックします。
先ほど作成したロールを選択してアタッチします。

CloudWatchエージェントのインストール

Systems Managerからインストールを行います。
Systems Manager>Run Command>コマンドを実行するの順にクリックします。

AWS-ConfigureAWSPackageのドキュメントを選択します。

コマンドのパラメータのNameにAmazonCloudWatchAgent、Versionにlatestと入力します。他はデフォルトで問題ありません。

次にターゲットでインストールする対象のインスタンスを選択します。
その他のパラメータはデフォルトの空のままで問題ありません。

出力オプションは今回は「CloudWatch 出力」を選択します。ロググループ名は特に指定がなければ空で大丈夫です。Systems Managerが自動でロググループを作成してくれます。

あとは「実行」をクリックし、ステータスで成功が表示されればインストールは終わりです。

CloudWatch Logsへログ送信の設定を行う

CloudWatch Logsへのログ送信の設定を行います。
設定ファイルはパラメータストアに設定を行い、EC2へはSystems Managerでそのパラメータストアの設定を反映するという流れで設定を進めていきます。

パラメータストアの設定

jsonファイルの各パラメータの値はAmazonの公式ドキュメントを参照し、自分の収集したいログにあった設定に適宜変更していただければと思います。
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-Configuration-File-Details.html

今回は以下設定を行います。

AmazonCloudWatch-LogParams
{
    "logs": {
        "logs_collected": {
            "files": {
                "collect_list": [
                    {
                        "file_path": "/home/ec2-user/test.log",
                        "log_group_name": "/home/ec2-user/test.log",
                        "log_stream_name": "{instance_id}"
                    }
                ]
            }
        }
    }
}

注意点としては、パラメータストアの名前はAmazonCloudWatch-のプレフィックスをつけるようにしてください。
理由はCloudWatchAgentServerPolicyのポリシーでデフォルトで許可されているssmのパラメータがCloudWatchAgentServerPolicy-*だからです。

CloudWatchAgentServerPolicy
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "cloudwatch:PutMetricData",
                "ec2:DescribeVolumes",
                "ec2:DescribeTags",
                "logs:PutLogEvents",
                "logs:DescribeLogStreams",
                "logs:DescribeLogGroups",
                "logs:CreateLogStream",
                "logs:CreateLogGroup"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:GetParameter"
            ],
            "Resource": "arn:aws:ssm:*:*:parameter/AmazonCloudWatch-*"
        }
    ]
}

もし別名を使いたい場合は、別途許可するリソースを追加する必要があります。

Run Commandで設定

Systems Managerで設定したパラメータストアの値をEC2に反映します。
CloudWatchエージェントのインストール時と同様に、Systems ManagerのRun Commandを起動します。

AmazonCloudWatch-ManageAgentのドキュメントを選択します。

コマンドのパラメータには、Optional Configuration Locationに先ほど作成したパラメータストアの名称AmazonCloudWatch-LogParamsを設定します。他はデフォルトのままで問題ありません。

あとは「実行」をクリックし、CloudWatchエージェントのインストールの時と同様にステータスで成功が表示されればインストールは終わりです。

以上で作業は終わりです。
CloudWatch Logsで設定したロググループでログが閲覧できるようになっていると思います。

まとめ

CloudWatch Logsへログを送信することでログの閲覧が簡単にできるようになったり、監視の仕組みも作りやすくなります。
Systems Managerを使えば簡単に設定できますのでぜひ試してみてください。

Discussion