BBH
-Biz Branding Hub-
投稿日 : 
2020/11/12
更新日 : 
2020/11/12

【AWS】EC2(Linux)にCloudWatchエージェントを入れる

EC2にCloudWatchエージェントを入れることによって、アプリやOSのログをCloudWatchに転送することができます。
本記事ではEC2(Linux)にエージェントをインストールしてCloudWatchにログを転送する手順を解説します。
エージェントのインストール方法はLinuxとWindowsで異なります。
本記事ではWindowsOSについての解説はいたしませんのでご了承ください。

手順

EC2にCloudWatchエージェントを入れて、CloudWatchにログを転送するには以下の4つの手順を実施します。

・EC2にIAM Roleをアタッチ
・EC2にCloudWacthエージェントのインストール
・CloudWatchエージェント設定ファイルの編集
・CloudWatchエージェントの起動

なお、本手順は以下の公式ドキュメントの抜粋となります。

EC2にAIM Roleをアタッチ

まずは、EC2がCloudWatchにアクセスできるようにIAM Roleをアタッチしてやります。
CloudWatchにログを転送するには、CloudWatchLogsFullAccess権限をつけてやる必要があります。

また、インスタンスにアタッチされた IAM ロールに CloudWatchAgentServerPolicy がアタッチされていることを確認する必要もあります。

CloudWatchAgentServerPolicy はAWSがあらかじめ用意している権限セットを有したRoleで、この中にCloudWatchLogsFullAccess権限が含まれています。

EC2にCloudWacthエージェントのインストール

EC2インスタンスにログインし、以下のコマンドを実行すると、エージェントがインストールされます。

sudo yum install amazon-cloudwatch-agent

CloudWatchエージェント設定ファイルの編集

次にCloudWatchエージェントの設定ファイルを編集します。
どのログをどのロググループやログストリームに転送するか、転送間隔はどれくらいかなどを設定します。
設定ファイルの場所は任意ですが、多くのサンプルでは「/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json」に作成しているので、同じようにした方が無難でしょう。

以下に設定ファイルのサンプルを紹介します。
今回はログを転送するのが目的なので、metricsセクションは設定を行いません。

CloudWatchエージェント設定ファイル(json)

{
    "agent": {
        "metrics_collection_interval": 300,
        "region": "ap-northeast-1",
        -- CloudWatchエージェントのログファイル
        "logfile": "/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log"  
    },
    "logs": {
        "logs_collected": {
        "files": {
            "collect_list": [
                {
                    "file_path": "/var/log/app/log.log",  -- 転送対象のログファイル
                    "auto_removal": false,  -- 転送したログを削除するかの設定
                    "log_group_name": "YOUR_LOG_GROUP_NAME",  -- 転送するロググループ名
                    "log_stream_name": "YOUR_LOG_STREAM_NAME_{instance_id}",  -- 転送するログストリーム名
                    "timezone": "Local",
                    "timestamp_format": "%Y-%-m-%-d %H:%-M:%-S.%f",  -- ログ中のタイムスタンプフォーマット
                    "multi_line_start_pattern": "%Y-%-m-%-d %H:%-M:%-S.%f",  -- 複数行モード時のログの開始フォーマット指定
                    "encoding": "utf-8"
                }
            ]
        }
        },
        "log_stream_name": "YOUE_LOG_STREAM_{instance_id}",  -- デフォルトログストリーム名
        "force_flush_interval" : 5  -- 転送間隔(秒)
    }
}

設定値の詳細については以下の公式ドキュメントを参照してください。

CloudWatchエージェントの起動

以下のコマンドでCloudWatchエージェントを起動することができます。
設定ファイルの場所を変更した場合は、-cオプションのパラメタを変更する必要があるので注意してください。

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

また、以下のコマンドでエージェントの起動を確認することができます。

sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a status


{
  "status": "running",
  "starttime": "2020-10-30T08:14:14+0000",
  "version": "1.247345.35"
}

エージェントの再起動

ログが上手く転送されないなどでエージェントを再起動したい時は以下のコマンドで可能です。

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

初回起動時に作成した「/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json」は、エージェントを実行すると、「/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/file_amazon-cloudwatch-agent.json」に移動するようです。
そのため、上記のコマンドで同じ設定で再起動することができます。

Profile

管理人プロフィール

都内でITエンジニアをやってます。
変遷:中規模SES→独立系SIer→Webサービス内製開発
使用技術はその時々でバラバラですが、C#、AWSが長いです。
どちらかと言うとバックエンドより開発が多かったです。
顧客との折衝や要件定義、マネジメント(10名弱程度)の経験あり。
最近はJava+SpringBootがメイン。

Recommend