0
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?

【Amazon CloudWatch】CloudWatch AgentでEC2任意ログを収集

Posted at

ハンズオンの目的

本ハンズオンでは、Private サブネットの EC2 から
CloudWatch Logs へ任意ログを収集する構成を SSM 接続のみで構築し、
以下理解することを目的とする。

  • CloudWatch Agent の導入と設定
  • 任意ログ(例:/var/log/messages)の収集
  • VPC エンドポイントを使った 完全閉域通信

構成と準備

使用リソース

リソース / 項目 詳細内容
VPC Private Subnet
EC2 Amazon Linux 2023
接続方式 SSM Session Manager
NAT なし
Interface Endpoint ssm / ec2messages / ssmmessages / logs
ログ送信 CloudWatch Agent → CloudWatch Logs

実施手順

STEP 1. IAMロールの作成(CloudWatch にログを送る権限)
STEP 2. EC2 に CloudWatch Agent をインストール
STEP 3. テスト用ログファイルを作成
STEP 4. CloudWatch Agent 設定ファイルを配置
STEP 5. CloudWatch Agent を起動
STEP 6. 状態確認
STEP 7. CloudWatch Logs で確認
STEP 8. ログが増えるかテスト

検証内容と結果

STEP 1. IAMロールの作成(CloudWatch にログを送る権限)

EC2 に以下のポリシーをアタッチ:
AmazonSSMManagedInstanceCore SSM接続用
CloudWatchAgentServerPolicy CloudWatchにログを送る権限

STEP 2. EC2 に CloudWatch Agent をインストール

EC2インスタンスへSSM接続を行い、以下のコマンドを実行

sudo dnf install amazon-cloudwatch-agent -y

インストール完了後、以下にディレクトリが作成される
/opt/aws/amazon-cloudwatch-agent
※AMI2023にはデフォルトではインストールされていない

STEP 3. テスト用ログファイルを作成

EC2インスタンスで以下のコマンドを実行

sudo bash -c 'echo "Hello CloudWatch Log" >> /var/log/myapp.log'

STEP 4. CloudWatch Agent 設定ファイルを配置

CloudWatch Agent の設定ファイルは
/opt/aws/amazon-cloudwatch-agent/bin/config.json
に置く形式にします。

config.json
sudo tee /opt/aws/amazon-cloudwatch-agent/bin/config.json > /dev/null << 'EOF'
{
  "logs": {
    "logs_collected": {
      "files": {
        "collect_list": [
          {
            "file_path": "/var/log/myapp.log",
            "log_group_name": "myapp-log-group",
            "log_stream_name": "{instance_id}",
            "timezone": "UTC"
          }
        ]
      }
    }
  },
  "metrics": {
    "append_dimensions": {
      "InstanceId": "${aws:InstanceId}"
    },
    "metrics_collected": {
      "cpu": {
        "measurement": [
          {"name": "cpu_usage_idle", "unit": "Percent"},
          {"name": "cpu_usage_system", "unit": "Percent"},
          {"name": "cpu_usage_user", "unit": "Percent"}
        ],
        "metrics_collection_interval": 60
      }
    }
  }
}
EOF

設定のポイント

  • /var/log/myapp.log のログを CloudWatch Logs へ送信
  • Log group:myapp-log-group
  • Stream:インスタンスID
  • CPU メトリクスも収集

STEP 5. CloudWatch Agent を起動

EC2インスタンスで以下のコマンドを実行

sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl \
    -a fetch-config \
    -m ec2 \
    -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json \
    -s

STEP 6. 状態確認

EC2インスタンスで以下のコマンドを実行

sudo systemctl status amazon-cloudwatch-agent

正常なら active (running)。

STEP 7. CloudWatch Logs で確認

AWS コンソール → CloudWatch → Logs → Log groups

  • myapp-log-group が作成されている
  • 中に log stream(EC2のID)
  • Hello CloudWatch Log のログが見える

STEP 8. ログが増えるかテスト

EC2インスタンスで以下のコマンドを実行

sudo bash -c 'echo "Another line at $(date)" >> /var/log/myapp.log'

CloudWatch Logs に増えていれば 成功!
image.png

今回の学び

  • IFEPの不足が原因でロググループが作成されなかった
    EC2⇒CloudWatch Logsが通るルートがなかった
    ★com.amazonaws.ap-northeast-1.logs
    ⇒Cloudwatch専用のIFEP
  • CloudWatch Agentのインストールができなかった
    CloudWatch Agent のインストール時、EC2 はパッケージを S3 から取得する。S3 は Interface Endpoint ではなく Gateway Endpoint 経由で通信するため、Interface Endpointへの通信だけを許可していても、S3 へのパケットが遮断されインストールに失敗する。
    EC2のSGに東京リージョンの S3マネージドプレフィックスリスト (pl-61a54008) を宛先とした HTTPS (443) 通信を追加することで、0.0.0.0/0 を許可することなく、安全かつ最小権限でインストールが可能になる。
    ⇒EC2のSG設定のアウトバウンドにInterface EndpointへアタッチしたのSGのみを参照するようにしていた
0
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
0
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?