0
0

135日目 CloudWatchでEC2ログの管理したい(1/2) 社畜L

Last updated at Posted at 2024-08-30

🔍事前に知っておくこと

EC2のログをCloudWatchで管理するとはつまり、EC2のログをCloudWatchに送るということです。
その観点から必要なものが3つあり、それぞれざっくりと解説します。

  • CloudWatchエージェント
    EC2のログを収集しCloudWatchに送信するためのソフトウェア

  • CloudWatchエージェント設定ファイル
    インストールしたCloudWatchエージェントのどのファイルを監視しどのログストリームに管理するか、等の設定が書かれたファイル

  • IAMロール
    EC2に権限を与え他のリソースを利用できるようにする。
    今回は[CloudWatchにデータを送る][SSM読み取り]の2つの権限が必要になる。

🔍やりたいたこと

    • CloudWatchエージェントをインストールする
    • CloudWatchエージェントのJSONはSSMパラメータストアで管理しロードしたい
    • JSONの読み込みは初回のみ手動で今後はEC2再起動のみでSSMパラメータストアを読み込むようにしたい
    • ログ追加時に通知メールが欲しい

全てをまとめて書くとすごい量になってしまうので2回に分けて解説していきます。
今回は2番目まで解説します。
1~2の手順まででCloudWatchへログの送信自体はできます。

🔍実行手順

前提としてVPC、サブネット、EC2、SGなどの構築は終わっているものとします。

CloudWatchエージェントをインストールする

  1. IAMロール作成
    以下のポリシーを持つIAMロールを作成する。

    • [CloudWatchAgentServerPolicy] :CloudWatchにデータを送る
    • [AmazonSSMReadOnlyAccess]:SSM読み取り
      ※EC2内で設定ファイルを作成する場合、[AmazonSSMReadOnlyAccess]は不要。

  2. 監視したいEC2にCloudWatchエージェントをインストールする

    ① インストールコマンドを打つ
    ※これでうまくいくなら2は終わりです。インストールされたことを確認してください。

    sudo yum install amazon-cloudwatch-agent
    

    ② ①が失敗した場合、エージェントインストール予定のEC2のプラットフォームとアーキテクチャを確認

    sudo -i
    uname -m
    cat /etc/os-release
    

    ③ プラットフォームとアーキテクチャごとにCloudWatchエージェントのインストールコマンドは変わるので②で確認した情報と照らし合わせながら、公式サイトを確認し利用可能なダウンロードリンクを探しエージェントをインストールする。

    ※リンク先に下記のようなリストがあるのでそこを参照する。
    スクリーンショット 2024-08-27 130118.png

    ※インストールや解凍に必要なものが足りない場合は別途インストールしてください。

    sudo -i
    wget https://amazoncloudwatch-agent-[利用リージョン].s3.[利用リージョン].amazonaws.com/***
    rpm -U ./amazon-cloudwatch-agent.rpm
    

    インストールされたことを確認

    yum list installed | grep amazon-cloudwatch-agent
    

    補足(今回は実行不要):
    下記コマンドでウィザードを呼び出し、CloudWatchエージェント設定ファイルを生成することもできます。
    パラメータストアからのロードを行わない場合はこちらを実行してください。

    sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
    

CloudWatchエージェントのJSONはSSMパラメータストアで管理しロードしたい

  1. AWSSSMにCloudWatchエージェント設定ファイルを作成し保存する

    ① SSMパラメータストアに任意の名称のString型で下記の内容を変更し保存する。

    {
        "agent": {
            "run_as_user": "root"
        },
        "logs": {
            "logs_collected": {
                "files": {
                    "collect_list": [
                        {
                            "file_path": "[監視したいファイルのパス]",
                            "log_group_class": "STANDARD",
                            "log_group_name": "[CloudWatch内のロググループ名]",
                            "log_stream_name": "[CloudWatch内のログストリーム名]",
                            "retention_in_days": [保存日数]
                        },
                        {
                            "file_path": "[監視したいファイルのパス]",
                            "log_group_class": "STANDARD",
                            "log_group_name": "[CloudWatch内のロググループ名]",
                            "log_stream_name": "[CloudWatch内のログストリーム名]",
                            "retention_in_days": [保存日数]
                        }
                    ]
                }
            }
        }
    }
    

    ② EC2から①で保存した設定を読み込む

    sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c ssm:[SSM名] -s
    sudo systemctl enable fetch-cloudwatch-config.service
    

    ロードした設定ファイルを確認

    sudo cat /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml
    

最終確認

  1. テストログを作成
    sudo echo "test log entry at $(date)" >> [監視するファイルのパス]
    

  2. AWSコンソール上のCloudWatchから先ほど追加したログが設定ファイルで指定したログストリーム内から確認できることを確認する。
     ※AWSコンソール上のCloudWatch内でロググループやログストリームは作成しなくても自動で作成される。

 下図のようにコンソール上からログが確認できる。
スクリーンショット 2024-08-27 133044.png

🔍まとめ

EC2のログをCloudWatchに送る必要があったのでまとめてみました。
次回の投稿は4週間後の予定なので、残りを解説していこうと思います。

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