EC2からCloudWatch Logsへログを送信する(AWS Systems Manager編)
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の公式ドキュメントを参照し、自分の収集したいログにあった設定に適宜変更していただければと思います。
今回は以下設定を行います。
{
"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-*
だからです。
{
"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