1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

インフォ・ラウンジAdvent Calendar 2023

Day 16

Amazon Linux 2023でCloudWatch Agentを設定する

Last updated at Posted at 2023-12-16

インフォ・ラウンジ Advent Calendar 2023 の16日目です。

やること

2023年3月にリリースされたAmazon Linux 2023にCloudWatch Agentをインストールしてメトリクスを収集します。

Amazon Linux 2023はFedoraベースとなって(ただしFeroraとの互換性はない)、パッケージ管理ツールがyumからdnfへの変更、5年間のサポートを基本とするライフサイクルなどの変更がありました。

そのため、今までAmazon Linux2で使用していたインストール手順が使えなくなったので改めてまとめてみます。使用したAMIは以下の通りです。

al2023-ami-2023.2.20231113.0-kernel-6.1-x86_64

EC2の準備

まずはCloudWatchを使用できるロールを持ったEC2を立てます。コンソールから立てても構わないのですが、今回はAWS CDKで設定しました。概要は以下のような感じで、インスタンスロールにCloudWatchAgentServerPolicyを適用します。また、UserDataを使って起動時にエージェントをインストールしてしまいます。

const instance = new ec2.Instance(this, 'Ec2Instance', {
  instanceType: ec2.InstanceType.of(
    ec2.InstanceClass.T3A,
    ec2.InstanceSize.MICRO
  ),
  machineImage: ec2.MachineImage.lookup({
    name: 'al2023-ami-2023.2.20231113.0-kernel-6.1-x86_64',
    owners: ['amazon'],
  }),
  vpc: vpc,
  // CloudWatchのポリシーを持ったロールを設定
  role: new iam.Role(this, 'MediagInstanceRole', {
    assumedBy: new iam.ServicePrincipal('ec2.amazonaws.com'),
    description: 'Role for Mediag Instance',
    managedPolicies: [
      iam.ManagedPolicy.fromAwsManagedPolicyName('CloudWatchAgentServerPolicy')
    ]
  }),
  ssmSessionPermissions: true
}
// dnfでagentをインストール・有効化
instance.addUserData(
  'sudo dnf install amazon-cloudwatch-agent',
  'sudo systemctl enable amazon-ssm-agent',
  'sudo systemctl start amazon-ssm-agent',
)

agentの設定

ssmSessionPermissionsを有効にしておいたので、セッションマネージャー経由でSSH接続することができます。エージェントは起動しているので、細かい設定をしていきます。

# インストール確認
$ rpm -qa amazon-cloudwatch-agent
amazon-cloudwatch-agent-1.300028.1-1.amzn2023.x86_64

# ステータスチェック
$ systemctl status amazon-cloudwatch-agent
● amazon-cloudwatch-agent.service - Amazon CloudWatch Agent
     Loaded: loaded (/etc/systemd/system/amazon-cloudwatch-agent.service; enabled; preset: disabled)
     Active: active (running) since Thu 2023-12-07 05:39:16 UTC; 1 week 1 day ago
   Main PID: 714650 (amazon-cloudwat)
      Tasks: 9 (limit: 1066)
     Memory: 50.2M
        CPU: 1h 1min 10.082s
     CGroup: /system.slice/amazon-cloudwatch-agent.service

$ amazon-cloudwatch-agent-ctl -a status
{
  "status": "running",
  "starttime": "2023-12-07T05:39:15+00:00",
  "configstatus": "configured",
  "version": "1.300028.1"
}

設定ファイル

設定ファイルは、以前(AmazonLinux2)は /opt/aws/amazon-cloudwatch-agent/bin/config.jsonというファイルを置いて読み込んでいたような気がするのですが、/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.jsonに置けば良いようです。ここが一番の注意点かもしれません。

jsonファイル自体は、以前のものを流用できました。ここでは、nginxのアクセスログと、EC2のメモリやディスク使用量を収集するようにしています。細かい設定項目はドキュメントがあります。ウィザードを使用して対話的に作成することもできるようですね。

$ cat /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
{
    "agent": {
        "metrics_collection_interval": 60
    },
    "logs": {
        "logs_collected": {
            "files": {
                "collect_list": [
                    {
                        "file_path": "/var/log/nginx/access.log",
                        "auto_removal" : false,
                        "log_group_name": "/hoge/fuga",
                        "log_stream_name": "nginx_access.log_{instance_id}",
                        "timestamp_format": "%d/%b/%Y:%H:%M:%S %z"
                    }
                ]
            }
        }
    },
    "metrics": {
        "metrics_collected": {
            "mem": {
                "measurement": ["mem_used_percent"]
            },
            "disk": {
                "measurement": ["used_percent"],
                "resources": ["*"]
            }
        },
        "append_dimensions": {
            "ImageId": "${aws:ImageId}",
            "InstanceId": "${aws:InstanceId}",
            "InstanceType": "${aws:InstanceType}",
            "AutoScalingGroupName": "${aws:AutoScalingGroupName}"
        }
    }
}

設定ファイルを置いたら、再起動して変更を反映しましょう

$ sudo systemctl restart amazon-cloudwatch-agent

コンソールからCloudWatchを確認して、ロググループやカスタムメトリクスが収集されていればOKです。

うまく収集されていない場合は、ログを見てみるとよいかもしれません。デフォルトの状態ではjournalに出ているようです。

$ journalctl | grep cloudwatch

Dec 16 04:49:24 ip-10-0-0-87.ap-northeast-1.compute.internal start-amazon-cloudwatch-agent[1331795]: I! Detected the instance is EC2
Dec 16 04:49:24 ip-10-0-0-87.ap-northeast-1.compute.internal start-amazon-cloudwatch-agent[1331795]: 2023/12/16 04:49:24 Reading json config file path: /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json ...
Dec 16 04:49:24 ip-10-0-0-87.ap-northeast-1.compute.internal start-amazon-cloudwatch-agent[1331795]: 2023/12/16 04:49:24 I! Valid Json input schema.
:

まとめ

Amazon Linux 2023でCloudWatch Agentの設定をしてみました。
Amazon Linux 2のサポートは2025年の6月までなので、今後は徐々にAmazon Linux 2023が増えてくると思います。少しずつ変更に慣れていくと良さそうですね。参考になれば嬉しいです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?