COLUMN

Amazon Q Developer CLIを使って、保守運用作業を楽にしよう

こんにちは、白鳥です。

2025年7月8日にAmazon CloudWatchとApplication SignalsのMCP serverが追加となりました。これによりMCPに対応した生成AIのアプリケーションにおいて、CloudWatchのメトリクスやCloudWatch Logs、CloudWatch Application Signalsからの情報取得や分析を行うことが容易となります。Amazon Q Developer CLIにおいても、以前からAWS上で運用中のシステムの調査や対処はできましたが、より多くの情報をもとにした対応ができるようになります。今回の記事では、このCloudWatch系のMCP Serverを有効にしたAmazon Q Developer CLIを使って、システム稼働状況の調査や、障害原因調査や対処を体験してみたいと思います。

想定する読者

  • AWS構築や運用に苦労している方
  • AWSで構築されたシステム保守運用の調査をAIでアシストしたい方

AWSを使った生成AIの活用に関するお問い合わせはこちら!

今回の流れ

今回は、以下の流れで進めたいと思います。

  • MCP Server追加
  • 現況システム調査
  • アラーム状態にしたのち、原因と対処をAIにて実施

AWSを使った生成AIの活用に関するお問い合わせはこちら!

前提条件

今回事前に下記のような環境の準備を行いました。

  • Javaベースのサンプルアプリケーションを東京リージョンのEC2上に構築
  • CloudWatchは、CloudWatchエージェントを使って主に下記のメトリクスを送信
    • CPU
    • メモリ
    • ディスク
    • ネットワークインターフェース
  • CloudWatch アラームはCPUUtilizationのみ設定(閾値50%)
  • ログファイルは下記をCloudWatch Logsへ送信。
    • CloudWatchエージェントログ
    • Syslog
    • Kernelログ
    • Bootログ
    • アプリケーションログ
  • CloudWatch Application Signalsはデフォルト設定で取得
  • CloudWatch Syntheticsは設定しない
  • EC2インスタンスは、Systems Managerで操作可能な状態にしておく

構築が終わったら、正常時のメトリクスをためておくため、2~3日ほど起動したままにしておきます。

MCP Server追加

次に、手元のPCのAmazon Q Developer CLIの設定を行います。Amazon Q Developer CLIの最新版へのアップデート、MCP Serverに必要なパッケージのアップデート、AWS CLIの最新化およびアクセスキー/シークレットアクセスキーの設定を行います。これらの設定手順は前回までの記事を参考にしてください。

次にMCP Serverの設定を行います。jsonファイルを修正し、下記2種類のいずれかに保存します。

  • `C:\Users\${User}\.aws\amazonq`フォルダの場合、PCすべてに適用
  • ワークスペースのルートにある.amazonq/ディレクトリの場合、対象のワークスペースにのみ適用

CloudWatch/CloudWatch Logs/CloudWatch Application Signalsの3つのMCP Serverのみを利用する場合は、下記のようになります。

{
  "mcpServers": {
    "awslabs.cloudwatch-mcp-server": {
      "command": "uvx",
      "args": [
        "awslabs.cloudwatch-mcp-server@latest"
      ],
      "env": {
        "AWS_REGION": "ap-northeast-1",
        "FASTMCP_LOG_LEVEL": "ERROR"
      },
      "autoApprove": [],
      "disabled": false,
      "timeout": 60,
      "transportType": "stdio"
    },
    "awslabs.cloudwatch-logs-mcp-server": {
      "command": "uvx",
      "args": [
        "awslabs.cloudwatch-logs-mcp-server@latest"
      ],
      "env": {
        "AWS_REGION": "ap-northeast-1",
        "FASTMCP_LOG_LEVEL": "ERROR"
      },
      "autoApprove": [],
      "disabled": false,
      "timeout": 60,
      "transportType": "stdio"
    },
    "awslabs.cloudwatch-appsignals-mcp-server": {
      "command": "uvx",
      "args": [
        "awslabs.cloudwatch-appsignals-mcp-server@latest"
      ],
      "env": {
        "AWS_REGION": "ap-northeast-1",
        "FASTMCP_LOG_LEVEL": "ERROR"
      },
      "autoApprove": [],
      "disabled": false,
      "timeout": 60,
      "transportType": "stdio"
    }
  }
} 

CloudWatch MCP Serverの公式ドキュメント(https://github.com/awslabs/mcp/tree/main/src/cloudwatch-mcp-server)を見ると、envセクションでAWS Profileを設定するようになっていますが、AWS CLIのデフォルトプロファイルを使用する場合は設定不要です。今回はAWS CLIのデフォルトプロファイルを使用するため設定しませんでした。

パッケージとコンフィグファイルの保存が終わったら、Amazon Q Developer CLIを起動します。

今回はWindowsのPCで実行しているため、WSL上でバージョン確認とAmazon Q Developer CLIの起動を行います。

バージョン確認

q --version

起動コマンド

q chat

MCPサーバーが初期化され起動すれば成功です。

このスクリーンショットを見るとCloudWatch/CloudWatch Logs/CloudWatch Application Signalsの各MCPサーバーが起動中の状態に見えますが、最初のプロンプトを打ち込んでいるうちに起動します。心配であれば最初にこのようなプロンプトを入れて確認することができます。

CloudWatch MCP Server、CloudWatch Logs MCP Server、CloudWatch Application Signals MCP Serverの起動を確認してください。起動が確認できない場合は、原因と対処案を教えてください。

AWSを使った生成AIの活用に関するお問い合わせはこちら!

現況システム調査

それでは、現行のアプリケーションの運用状況の調査をお願いしてみましょう。

東京リージョン(ap-northeast-1)にあるCloudWatch Application Signalsのshiratori_appサービス(注釈:Application Signalsで設定したサービス名)について直近1時間のメトリクス・ログ・トレースからサービスの運営状況を調査したレポートを作成してください

現況調査を行う場合のプロンプトの基本は、下記のとおりです。

  • 必要なメトリクス・ログ・トレースはどのリージョンにあるかを明記
  • サービス名やインスタンスIDなど、調査対象を明確化
  • 調査期間(直近1時間、何年何月何日何時から何年何月何日何時まで、など)を明示

これらの調査のヒントになる情報がないと、狙った調査を行うことができません。

> CloudWatch Application Signalsのshiratori_appサービスの運営状況を調査するため、直近1時間のメトリクス、ログ、トレースを取得してレポートを作成します。

まず、東京リージョン(ap-northeast-1)でshiratori_appサービスの情報を取得しましょう。

🛠️ Using tool: use_aws (trusted)

Label: List Application Signals services in Tokyo region

> 時間範囲を指定してサービス一覧を取得します:

🛠️ Using tool: use_aws (trusted)

Label: List Application Signals services with time range

> shiratori_appサービスが確認できました。次に、サービスの詳細なメトリクスを取得します:

🛠️ Using tool: use_aws (trusted)

Label: Get shiratori_app service details

> 次に、CloudWatchメトリクスを取得してサービスの性能を確認します:

(略)

> エラー率のメトリクスも取得します:

> フォルト率のメトリクスも取得します:

> 次に、ログを確認します:

> ログストリームが見つからないため、X-Rayトレースを確認してみます:

> 正しいパラメータでX-Rayトレースを取得します:

> レポートを作成するために、収集したデータをファイルに保存します:

🛠️ Using tool: fs_write

● Path: /home/shiratori/shiratori_app_service_report.md

> # shiratori_appサービス運営状況調査レポート

東京リージョンのCloudWatch Application Signalsのshiratori_appサービスについて、直近1時間(2025年7月XX日 XX:00-XX:00 JST)の運営状況を調査し、包括的なレポートを作成しました。

## 主要な発見事項

✅ 正常稼働中: サービスは基本的に安定して動作しています

⚠️ 注意が必要な点:

• エラー率が1.6-4.2%で変動(特にXX:25頃に4.16%のピーク)

• レスポンス時間に大きなばらつき(最大2秒超)

• セッション管理(POST /session)でエラーが集中

### 課題と推奨事項

1. 緊急対応: セッション管理サービスの接続エラー調査

2. ログ設定: CloudWatch Logsの設定確認が必要

3. 監視強化: エラー率3%超過とレスポンス時間1秒超過のアラート設定

完全なレポートは /home/shiratori/shiratori_app_service_report.md に保存されています。このレポートには詳細な分析結果、具体的な推奨事項、および次のアクションプランが含まれています。

このような概要が示されています。

詳細のファイルにはレイテンシーやエラー率の統計、トレースからの主なオペレーション、推奨される対応事項が示されています。

今回、CloudWatch LogsのロググループがAmazon Q Developer側で確認できなかったので、調査対象となるCloudWatch Logsのロググループも指定する必要がありそうです。このあたりは、都度プロンプトで入力するのではなく、AI向けの保守ドキュメントを作成しておくことで、プロンプトを簡略化できるかもしれません。(システム概要や設定されているメトリクス・ログ・トレース情報などの事前情報)

アラーム状態にしたのち、原因と対処をAIにて実施

それでは、次に障害調査を行ってみましょう。

EC2にログインし下記のコマンドを実行し、5分程度待機してCPUUtilzationがアラーム状態になることを確認します。

CPUに負荷を与えるコマンド例

dd if=/dev/zero of=/dev/null bs=1000M count=100000

アラーム状態になったことを確認したら、次のプロンプトを入力し障害原因の調査を開始します。

ユーザーからのエラー申告が増えており、東京リージョンのCPUUtilizationがアラーム状態になりました。同リージョンにあるCloudWatch、CloudWatch Logs、CloudWatch Application Signalsを調査し、エラー申告の原因と対応を調査してください。また、EC2インスタンス内部の操作やOS内部のコマンド実行に対しても調べてください

これも、調査の対象サービスやログを指定することで効果的な調査を行うことができます。

> 東京リージョンでのCPU使用率アラームとユーザーエラー申告の調査を開始します。まず、CloudWatchでCPU使用率の詳細とEC2インスタンスの状況を確認しましょう。

🛠️ Using tool: use_aws (trusted)

Label: 東京リージョンのCPU関連アラーム状況を確認

> CPU使用率が61.1%でアラーム状態になっているEC2インスタンス(i-********)を特定しました。次に、このインスタンスの詳細情報を確認します。

🛠️ Using tool: use_aws (trusted)

Label: 問題のEC2インスタンスの詳細情報を取得

> 「Shiratori-appTest」という名前のm7a.largeインスタンスで、テスト環境のようです。CloudWatch Application Signalsのロールも設定されています。次に、CloudWatch Logsでこのインスタンスのログを確認しましょう

🛠️ Using tool: use_aws (trusted)

Label: CloudWatch Logsのロググループを確認

> Application Signalsのログが見つかりました。次に、Application Signalsのデータを確認し、最近のエラーログを調べましょう。

🛠️ Using tool: use_aws (trusted)

Label: Application Signalsのログストリームを確認

> 最新のApplication Signalsログを確認しましょう。

🛠️ Using tool: use_aws (trusted)

Label: 最新のApplication Signalsログイベントを取得

> Application Signalsのログから、shiratori_appアプリケーションが動作していることが確認できます。次に、EC2インスタンスのシステムログを確認しましょう。

🛠️ Using tool: use_aws (trusted)

Label: syslogの最新ログイベントを取得

> 次に、EC2インスタンスの詳細なメトリクスを確認しましょう。

🛠️ Using tool: use_aws (trusted)

Label: EC2インスタンスのCPU使用率の詳細を取得

> CPU使用率の推移を見ると、X:15頃から急激に上昇していることが分かります。次に、メモリ使用率も確認しましょう。

🛠️ Using tool: use_aws (trusted)

Label: EC2インスタンスのメモリ使用率を取得

>次に、EC2インスタンスに直接接続してシステム状況を確認しましょう。

🛠️ Using tool: use_aws (trusted)

Label: EC2インスタンスでtopコマンドを実行してプロセス状況を確認

🛠️ Using tool: use_aws (trusted)

Label: SSMコマンドの実行結果を取得

> 重要な発見です!ddプロセスがCPUを100%使用しており、20分以上実行されています。これが高CPU使用率の原因です。次に、このプロセスの詳細を確認しましょう。

🛠️ Using tool: use_aws (trusted)

Label: ddプロセスの詳細を確認

🛠️ Using tool: use_aws (trusted)

Label: ddプロセス詳細の実行結果を取得

> 問題が特定できました!dd if=/dev/zero of=/dev/null bs=1000M count=100000というコマンドが実行されており、これが高CPU使用率の原因です。これは意図的に負荷をかけるテストコマンドのようです。

次に、このプロセスがいつから実行されているか、誰が実行したかを確認しましょう。

🛠️ Using tool: use_aws (trusted)

Label: プロセス実行履歴とユーザーセッション情報を確認

🛠️ Using tool: use_aws (trusted)

Label: プロセス履歴の実行結果を取得

> 重要な情報が判明しました:

1. 問題の原因: dd if=/dev/zero of=/dev/null bs=1000M count=100000コマンドがXX:18:14から実行されており、CPU使用率100%を維持している

2. 実行者: ubuntuユーザーがsudoでrootになり、このコマンドを実行

3. 実行時間: 約22分間継続実行中

4. 親プロセス: PID XXXXから実行されている

次に、このプロセスを終了して問題を解決しましょう。

🛠️ Using tool: use_aws (trusted)

Service name: ssm

Operation name: send-command

Parameters:

- document-name: "AWS-RunShellScript"

- parameters: {"commands":["echo 'Terminating dd process PID XXXX'","kill -TERM XXXX","sleep 2","ps aux | grep XXXX | grep -v grep || echo 'Process terminated successfully'","top -b -n 1 | head -5"]}

- instance-ids: ["i-*********"]

Profile name: default

Region: ap-northeast-1

Label: 問題のddプロセスを終了

🛠️ Using tool: use_aws (trusted)

Label: プロセス終了の実行結果を取得

> 素晴らしい!問題が解決されました。CPU使用率が大幅に改善されています:

• **以前**: CPU使用率100%(ddプロセス)

• **現在**: CPU使用率13.6%(正常レベル)

最後に、現在のCPU使用率を確認して、アラーム状態が解消されるかを確認しましょう。

🛠️ Using tool: use_aws (trusted)

Label: 問題解決後のCPU使用率を確認

> ## 調査結果と対応のまとめ

### **問題の特定**

1. 根本原因: EC2インスタンス(i-********)で実行されていたdd if=/dev/zero of=/dev/null bs=1000M count=100000コマンドがCPU使用率100%を維持していた

2. 実行詳細:

• **実行開始時刻**: 2025-07-XX XX:18:XX UTC

• **実行者**: ubuntuユーザー(sudo経由でroot権限)

• **プロセスID**: XXXX

• **継続時間**: 約22分間

3. 影響範囲:

• CPU使用率が61-69%に上昇(アラーム閾値50%を超過)

• システム負荷の増加(load average: 1.92, 2.00, 1.51)

• メモリ使用量の増加(約1GB使用)

### **実施した対応**

1. 即座の問題解決:

• 問題のddプロセス(PID XXXX)をkill -TERMで正常終了

• CPU使用率が13.6%まで低下し正常レベルに回復

2. 調査手法:

• CloudWatch アラーム状況の確認

• Application Signals ログの分析

• EC2インスタンス内部でのプロセス調査(SSM経由)

• システムログ(syslog、auth.log)の確認

### **推奨される予防策**

1. 監視強化:

• プロセスレベルの監視設定

• 異常なCPU使用プロセスの自動検出

• より細かい閾値設定(例:CPU 80%で警告、90%でクリティカル)

2. アクセス制御:

• 負荷テストコマンドの実行に関するガイドライン策定

• sudo権限の適切な管理

• 本番環境での負荷テスト実行の制限

3. 自動化対応:

• 異常プロセス検出時の自動終了スクリプト

• CloudWatch アラーム連携による自動対応

### **結論**

問題は意図的な負荷テストコマンドの実行によるものでした。プロセスを終了することで即座に解決し、CPU使用率は正常レベルに回復しました。今後は同様の問題を防ぐため、負荷テストの実行管理と監視体制の強化が推奨されます。

ログからEC2内部に入り、アラームの原因となったコマンド実行の特定と、対象プロセスの終了による対処まで完了しています。

AWSを使った生成AIの活用に関するお問い合わせはこちら!

この結果からわかるAWS運用作業における現在地の考察

これまでの記事と同様に、一連の動作からAmazon Q Developerを用いた運用作業の現在地について考察してみたいと思います。あくまで現時点におけるデモ利用をもとにした考察のため、今後の基盤モデルの進歩や、ツール・コンテキスト・プロンプトの工夫などで大きく変わる可能性もあります。

事前準備

事前の準備については、通常の保守運用業務と同様に必要なメトリクス・ログ・トレースを取得し、調査対象となるリソースなどの基礎情報をまとめておくことが大切です。人手で行う場合も監視設定や保守ドキュメントを整えておくことは重要ですが、AIが運用作業を行う場合も同様となります。

保守作業を行うためのAmazon Q Developer CLIに必要な権限

Amazon Q Developer CLIに与える権限も、最小限とすべきです。必要以上に大きな権限を付与し、意図しない作業(リソースの追加や削除)については制限しておく必要があります。特に、Systems ManagerについてはEC2内部のリモートコマンド実行が可能となるため、権限を付与するかどうかは運用設計の際に検討すべき項目と考えます。

今回の調査や一次対応においては、次のような権限があるとよいかと思います。

CloudWatch権限
  • cloudwatch:DescribeAlarms
  • cloudwatch:DescribeAlarmHistory
  • cloudwatch:GetMetricData
  • cloudwatch:ListMetrics
CloudWatch Logs権限
  • logs:DescribeLogGroups
  • logs:DescribeQueryDefinitions
  • logs:ListLogAnomalyDetectors
  • logs:ListAnomalies
  • logs:StartQuery
  • logs:GetQueryResults
  • logs:StopQuery
CloudWatch Application Signals 権限
  • application-signals:ListServices
  • application-signals:GetService
  • application-signals:ListServiceLevelObjectives
  • application-signals:GetServiceLevelObjective
  • application-signals:BatchGetServiceLevelObjectiveBudgetReport
  • xray:GetTraceSummaries
  • xray:BatchGetTraces
EC2権限
  • ec2:DescribeInstances
  • ec2:StartInstanes
  • ec2:StopInstances
Systems Manager権限
  • ssm:SendCommand
  • ssm:GetCommandInvocation
  • ssm:DescribeInstanceInformation

対処の実行について

今回は、EC2内部の作業も自動で行うように設定しましたが、自律的な対処を行ってくれるようになる反面、意図しない作業や不注意による承認なども含めて対応方針を検討する必要があります。特に本番環境で実行する場合、コマンド実行による影響度も加味したうえでの承認が必要となるため、現実的には対処案の提示までにとどめ、実行は人手やツールで行うなどのルール付けが必要になります。

まとめ

今回はMCP Serverを活用してAWSの保守運用作業をより簡易にできないか試してみましたが、AWSだけにとどまらずEC2内部のOSやアプリケーションレイヤの調査まで踏み込むなど、実際の運用者に近いところまでの調査や対処を行っていたように思います。これからもこうした作業にAIを活用してより高い品質での業務ができればと思います。

NTT東日本では、AWSの構築保守だけではなく、ネットワーク設計なども含めたエンドツーエンドでのソリューション提供をおこなっております。

経験値豊かなメンバーがご担当させていただきますので、是非お気軽にお問い合わせください!

AWSを使った生成AIの活用に関するお問い合わせはこちら!

ページ上部へ戻る

相談無料!プロが中立的にアドバイスいたします

クラウド・AWS・Azureでお困りの方はお気軽にご相談ください。