Amazon-CloudWatch

EC2コンソールからGUIで直感的にCloudWatch Agentをインストールできるようになりました!

はじめに

お疲れさまです、寺井です。

何気なくEC2触ってたら、何やら見慣れない領域が…。

何ぞこれ?

CloudWatch エージェントのメトリクス
モニタリングタブには、CWAgent 名前空間の単一インスタンスに関連するメトリクスが含まれるようになりました。 CloudWatch エージェントから送信されたメトリクスを表示するには、それらを CWAgent 名前空間に含めてください。



「え、なにそれめちゃ便利やん」

そのちょっと下には[CloudWatch エージェントを設定]の文字が。
え、まさか?

コンソールからポチポチでCWAgentのインストールができるようになってるっぽい!!!!!(これは神アプデでは?)

AWSの最新アップデート情報追ってもそれっぽいリリースは見当たらなかったので、サイレントアップデートなんでしょうか🤔

今回は、たまたま見つけられたこの神機能を、実際に試してみたいと思います!

先にまとめ

  • EC2コンソールからサーバにログイン不要で、CloudWatch Agentのインストール・初期設定・有効化が可能
  • CWAgentによるメトリクスが、EC2コンソールのモニタリングタブから確認可能に

⚠注意⚠

  • ベータ版:この記事執筆時点(2024-10-22)では、まだベータ版として提供されており、今後仕様が変更される可能性があるらしい。

Amazon EC2 コンソールを使用した CloudWatch エージェントのインストールおよび設定は Amazon EC2 ではベータ版であり、今後変更される場合があります。
引用:Amazon EC2 コンソールを使用して CloudWatch エージェントをインストールおよび設定し、メトリクスを追加する

  • 対応OS限定:SSM Agent内部で保持しているサポート対象OSのみで利用可能。(非対応OSではエラーが発生して失敗する)

公式ドキュメントで見た感じ、AlmaLinux9.4なら対応していそうなんですが、なんか失敗しました。ナンデヤネン(8.10でも失敗。)

サポートされているオペレーティングシステムとマシンタイプ - AWS Systems Manager
AlmaLinux · Releases · aws/amazon-ssm-agent · GitHub

今回の検証では、原因の特定までは至れなかったので、素直にAmazon Linux 2023で進めることにしました。🥺

準備

セットアップする際の参照ドキュメント一覧

EC2でSSM AgentおよびCloudWatch Agentの両方を動作させる必要があるため、以下のドキュメントを参考にしてセットアップを進めてください。

コンソールを操作するユーザに必要なIAM権限

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:GetParameter",
                "ssm:PutParameter"
            ],
            "Resource": "arn:aws:ssm:*:*:parameter/EC2-Custom-Metrics-*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ssm:SendCommand",
                "ssm:ListCommandInvocations",
                "ssm:DescribeInstanceInformation"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:GetInstanceProfile",
                "iam:SimulatePrincipalPolicy"
            ],
            "Resource": "*"
        }
    ]
}

やってみる

ここからは、失敗シーンも踏まえて、実際の操作画面をお見せしながらやっていきます。💪

EC2の[モニタリング]タブにある[CloudWatch エージェントを設定]から先に進みます。

SSMエージェントの有効確認

あるとき~

ないとき~

SSMが利用できない状態(未インストール、通信不可等)の場合、ちゃんとエラーになります。

インスタンスの権限(IAMロール)確認

EC2インスタンスに適切なIAMロールが割り当てられているかを確認。

あるとき~

ないとき~

EC2のIAM権限が不足している場合も、ちゃんとエラーになります。

CloudWatch Agentの有効確認&インストール

CWAgentが有効かどうか確認し、無効ならインストールを促される。
[CloudWatch エージェントをインストールする]を選択

インストールが進行

非対応OSによるエラー

失敗。😔

CloudTrailのログイベントを見ると、[SendCommand]で対象インスタンスに「AWS-ConfigureAWSPackage」が実行されているようです。(SSM経由でCloudWatch Agentをインストールするコマンド)

トラブルシューティング

サーバに入って[/var/log/amazon/ssm/amazon-ssm-agent.log]を確認してみると、AlmaLinux 9.4 (x86_64) に対応するパッケージマニフェストが見つからず、インストールが失敗していたようでした😇

↓以下は対象のログからピックアップした箇所

2024-10-22 15:23:17 ERROR [ssm-document-worker] [1064e593-9324-45de-bb7c-e7ff07e426be] [DataBackend] [pluginName=aws:configurePackage] failed to find platform: no manifest found for platform: almalinux, version 9.4, architecture x86_64
2024-10-22 15:23:17 ERROR [ssm-document-worker] [1064e593-9324-45de-bb7c-e7ff07e426be] [DataBackend] [pluginName=aws:configurePackage] done with download artifact - error: failed to find platform: no manifest found for platform: almalinux, version 9.4, architecture x86_64

Amazon Linux 2023 で再チャレンジ

クイックスタートから、Amazon Linux 2023を選択して立ち上げました。
(このAMIにはデフォルトでSSMAgentがインストールされています。)

再度[CloudWatch エージェントをインストールする]を実行してみます。

成功!!👏

CWAgent 初期セットアップ(収集間隔・メトリクス・ディメンション等の設定)

次画面に遷移すると、CWAgentの初期セットアップ画面が出てきました。

分かりやすくてスゲエエエエエエエエエエエ

メトリクスごとにどういった単位で取得するのか、というところも指定できます。(平均・空き・使用率 ナドナド)

かゆいとこまで手が届く感じスゲエエエエエエエエエエエ

[トレース設定]という欄から、『CloudWatch Application Signals』の有効化や、追加のトレース(X-Ray および OpenTelemetry)とかも設定できるようです。

そんなことまで出来たの?シランカッタ

最後に設定の詳細として、設定のjsonファイルが閲覧できます。地味に嬉しい…。

次画面に遷移すると[設定が正常に送信されました]と表示されており、これをクリックしたら詳細が見られます。

なんかエラーって出てますけど、対象サーバ見に行ったらちゃんと設定ファイルが保存されてて、CWAgentも起動されてました。

# 設定ファイル
[root@ip-10-0-1-81 ~]# cat /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/ssm_EC2-Custom-Metrics-0dcedf75-d4b0-45ab-92f4-9b0bf7758d52
{
    "agent": {
        "metrics_collection_interval": 60
    },
    "metrics": {
        "namespace": "CWAgent",
        "append_dimensions": {
            "InstanceId": "${aws:InstanceId}"
        },
        "metrics_collected": {
            "mem": {
                "measurement": [
                    "used_percent"
                ]
            },
            "cpu": {
                "measurement": [
                    "usage_active"
                ]
            },
            "disk": {
                "measurement": [
                    "used_percent"
                ]
            },
            "processes": {
                "measurement": [
                    "running"
                ]
            },
            "swap": {
                "measurement": [
                    "used_percent"
                ]
            }
        }
    }
}

# エージェントのステータス
[root@ip-10-0-1-81 ~]# systemctl status amazon-cloudwatch-agent.service
● amazon-cloudwatch-agent.service - Amazon CloudWatch Agent
     Loaded: loaded (/etc/systemd/system/amazon-cloudwatch-agent.service; enabled; preset: disabled)
     Active: active (running) since Tue 2024-10-22 06:58:46 UTC; 19min ago
   Main PID: 2941 (amazon-cloudwat)
      Tasks: 8 (limit: 2255)
     Memory: 22.7M
        CPU: 3.730s
     CGroup: /system.slice/amazon-cloudwatch-agent.service
             └─2941 /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent -config /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml -envconfig /opt/aws/amazon-cloudwatch-agent/etc/env-config.json -otelconfig /opt>

Oct 22 06:58:46 ip-10-0-1-81.ap-northeast-1.compute.internal start-amazon-cloudwatch-agent[2945]: I! imds retry client will retry 1 timesI! Detected the instance is EC2
Oct 22 06:58:46 ip-10-0-1-81.ap-northeast-1.compute.internal start-amazon-cloudwatch-agent[2945]: 2024/10/22 06:58:46 Reading json config file path: /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json ...
Oct 22 06:58:46 ip-10-0-1-81.ap-northeast-1.compute.internal start-amazon-cloudwatch-agent[2945]: /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json does not exist or cannot read. Skipping it.
Oct 22 06:58:46 ip-10-0-1-81.ap-northeast-1.compute.internal start-amazon-cloudwatch-agent[2945]: 2024/10/22 06:58:46 Reading json config file path: /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/ssm_EC2-Custom-Metrics->
Oct 22 06:58:46 ip-10-0-1-81.ap-northeast-1.compute.internal start-amazon-cloudwatch-agent[2945]: 2024/10/22 06:58:46 I! Valid Json input schema.
Oct 22 06:58:46 ip-10-0-1-81.ap-northeast-1.compute.internal start-amazon-cloudwatch-agent[2945]: I! Detecting run_as_user...
Oct 22 06:58:46 ip-10-0-1-81.ap-northeast-1.compute.internal start-amazon-cloudwatch-agent[2945]: I! Trying to detect region from ec2
Oct 22 06:58:46 ip-10-0-1-81.ap-northeast-1.compute.internal start-amazon-cloudwatch-agent[2945]: 2024/10/22 06:58:46 D! ec2tagger processor required because append_dimensions is set
Oct 22 06:58:46 ip-10-0-1-81.ap-northeast-1.compute.internal start-amazon-cloudwatch-agent[2945]: 2024/10/22 06:58:46 Configur

設定完了&確認

[完了]に進めると、EC2コンソールに戻り、正常に設定が完了したとのメッセージ。
このリンクから対象のインスタンスIDでフィルタリングされた状態のCloudWatchメトリクスページに遷移できます。

ちゃんとCloudWatchメトリクスで対象のCWAgentのメトリクスが確認できました!
スゴイ簡単!!!


EC2のコンソールにて[CWAgent 名前空間にメトリクスを含める]を有効化することで、CWAgentによる追加メトリクスも表示できるようになりました!💪

あとから設定更新も可能

同じ手順で進めると、[CloudWatch エージェント - インストール済み]となっているので、設定を変更することができます。(※既存設定が上書きされちゃうみたいなので注意)

感想・まとめ

サーバに入らず、ウィザードで直感的にインストールできるのがめちゃくちゃイイ感じでした。

サクッとCWAgentをインストールしたいときなんかに非常に有効な機能ですね。

最後までお読みいただき、ありがとうございました!

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA