[アドカレ2024]SSMのRun CommandでCloudWatch Agentを設定してみた

最初に

ども、安田です。
「きっと君は来ない、ひとりきりのクリスマス」に向けて、
アドカレブログのトップバッターとしてアウトプットします。


実施目的とメリット

  • 標準監視設定を一元管理
    パラメータストアに設定を保存しておくことで、変更やバージョン管理が容易。

  • 自動化が容易
    EC2の起動時にRun Commandや起動スクリプトを使って、CloudWatch Agentの設定を自動的に適用可能。

  • 複数環境の同時適用が可能
    同じ設定を複数のサーバに簡単に展開できるし、環境ごとに異なるパス(例: /cloudwatchagent/prod/config/cloudwatchagent/dev/config)を用意して切り替え可能

  • 手動オペレーションミスや設定内容のミスを削減
    設定ファイルをサーバに手動で配置する手間が省けるから、設定ミスを防げる。


今回の検証で作成するAWSリソース

  • EC2インスタンス
    OSのおすすめ
    Amazon Linux系(SSMがデフォルトでインストールされている)
    必要なIAMポリシー
    AmazonSSMManagedInstanceCore
    CloudWatchAgentServerPolicy
    参考リンク
    SSMに関してはこちらの記事を参照してください。

  • パラメータストア
    CloudWatch AgentのConfig.jsonを設定。

  • Run Commandドキュメント
    パラメータストアのConfig.jsonをマネージインスタンスのローカル設定ファイルに反映するためのドキュメントを作成。


Run CommandでCloudWatch Agentをインストール

手順

  1. Run Commandを実行

    • AWS Management Console: 検索欄に Systemsmanager を入力。ノードツールからRun Commandをクリックする。

    • コマンドドキュメント: 検索欄に AWS-ConfigureAWSPackage を入力。

    • コマンドパラメータ: フィールドに AmazonCloudWatchAgent を入力。

    • ターゲット: 作成済みの検証環境を選択。

    • 実行: をクリックすると実行結果のページに遷移します。

以下のように実行結果が成功になればOKです!

※その他のオプションについては、公式記事を参照してください。S3へのログ出力はエラーになったときのトラブルシュートに役立ちます。

  1. サーバ側でインストール結果を確認

    rpm -qa | grep cloudwatch

    結果:

    amazon-cloudwatch-agent-1.300049.1b929-1.x86_64

    正しくCloudWatchAgentがインストールされています。


パラメータストアを作成

手順

  1. configファイルのパラメータを設定
    systemmanagerのページから、アプリケーションツールのパラメータストアにアクセス
  2. 作成をクリック
    • 名前を入力:/cloudwatchagent/prod/config
    • 説明を入力:CloudWatch Agent configuration for custom metrics
    • 利用枠:標準
    • タイプ:文字列
    • データ型:text
    • 値:↓を入れる
      
      {
      "agent": {
      "metrics_collection_interval": 60,
      "run_as_user": "root"
      },
      "metrics": {
      "namespace": "${aws:Hostname}",
      "aggregation_dimensions": [
          [
              "InstanceId"
          ]
      ],
      "append_dimensions": {
          "InstanceId": "${aws:InstanceId}"
      },
      "metrics_collected": {
          "collectd": {
              "collectd_security_level": "encrypt",
              "collectd_auth_file": "/etc/collectd.d/auth_file",
              "metrics_aggregation_interval": 60
          },
          "disk": {
              "measurement": [
                  "used_percent"
              ],
              "metrics_collection_interval": 60,
              "resources": [
                  "*"
              ]
          },
          "mem": {
              "measurement": [
                  "mem_available_percent"
              ],
              "metrics_collection_interval": 60
          }
      }
      }
      }


ドキュメントの作成

  1. ドキュメントを設定
    `systemmanager`のページから、変更管理ツールの`ドキュメント`にアクセスする。
  2. 作成をクリック
    `ドキュメントの作成`をクリックし`コマンドまたはセッション`をクリックする。

    • 名前を入力:`ApplyCloudWatchAgentConfigFromSSM`
    • ターゲットタイプ-オプション:`空でOK`
    • ドキュメントタイプ:`Command`
    • コンテンツ:`yaml`
    • 値:↓を入れる
      
      description: "Fetch CloudWatch Agent config from Parameter Store and apply it"
      mainSteps:
    • action: "aws:runCommand"
      name: "FetchAndApplyConfig"
      inputs:
      DocumentName: "AWS-RunShellScript"
      Parameters:
      commands:

      • "# 1. Fetch the config from Parameter Store"
      • "sudo amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c ssm:/cloudwatchagent/prod/config"
      • "# 2. Restart the agent to apply the new config"
      • "sudo systemctl restart amazon-cloudwatch-agent"

設定内容の解説:
Run Commandを使用して、AWS Systems Manager Parameter Storeに保存されたCloudWatch Agentの設定を取得し、ローカル設定ファイルとして扱います。その後エージェントに設定を適用し動作します。


Run Commandの実行

  1. 作成したドキュメントの実行
    冒頭と同じようにRuncommandで対象インスタンスに対してApplyCloudWatchAgentConfigFromSSMを実行。

    サーバに接続して設定ファイルが正しく適用されているかを確認する。

    cat /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/ssm__cloudwatchagent_prod_config

    パラメータストアと同じであることを確認:

    {
    "metrics": {
        "namespace": "${aws:Hostname}",
        "aggregation_dimensions": [
            [
                "InstanceId"
            ]
        ],
        "append_dimensions": {
            "InstanceId": "${aws:InstanceId}"
        },
        "metrics_collected": {
            "disk": {
                "measurement": [
                    "used_percent"
                ],
                "metrics_collection_interval": 60,
                "resources": [
                    "*"
                ]
            },
            "mem": {
                "measurement": [
                    "mem_available_percent"
                ],
                "metrics_collection_interval": 60
            }
        }
    }
    }

メトリクス出力の確認

Cloudwatchagentで設定したメトリクスが出力されていることを確認します。


感想

感想は、設定管理と適用を一括管理することができることが素晴らしいと思いました。次の挑戦として、今回のRuncommandをトリガーに自動でCloudWatchアラームを設定できるような検証を行おうと思っています。ではでは


返信を残す

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

CAPTCHA