NTT東日本の自治体クラウドソリューション

Amazon Q Developer CLIを使って、保守運用作業を楽にしよう(Mackerel対応版)

こんにちは、白鳥です。

10月3日にMackerelのMCP Server対応が発表されました。

MackerelとAIでシステム専任の担当者を作る ―― Mackerel MCPサーバーで始めるアラート対応【前編】 - Mackerel ブログ #mackerelio

ClaudeとMackerelをつなげてみよう! ―― Mackerel MCPサーバーで始めるアラート対応【後編】 - Mackerel ブログ #mackerelio

NTT東日本の「クラウド導入・運用サービス」では、Mackerelを使ってお客さまのパブリッククラウド環境の監視・保守を行っています。今回はAmazon Q DeveloperとMackerel MCP Serverを利用して、保守運用作業をやってみたいと思います。

想定する読者

  • AWSとMackerelを利用して保守運用を行っている方
  • AWSで構築されたシステム管理をAIでアシストしたい方

AWSの構築/運用のお悩みにNTT東日本のエンジニアがおこたえします。お気軽にご相談ください。

Mackerel MCP Serverとは

Mackerelのはてな社が提供するMCP Serverとなります。ローカルMCP Serverとなり、Mackerelのメトリクスやトレースの取得などを行うことができます。2025年10月3日のリリース時点では、下記のツールが使えます。

  • list_alerts - アラートの一覧を取得します
  • get_alert - 特定のアラートを取得します
  • get_alert_logs - 特定のアラートのログを取得します
  • list_dashboards - ダッシュボードの一覧を取得します
  • get_dashboard - 特定のダッシュボードを取得します
  • update_dashboard - 特定のダッシュボードを更新します
  • list_hosts - ホストの一覧を取得します
  • get_host_metrics - 特定のホストのメトリックを取得します
  • list_services - サービスの一覧を取得します
  • get_service_metrics - 特定のサービスのメトリックを取得します
  • list_monitors - 監視ルールの一覧を取得します
  • get_monitor - 特定の監視ルールを取得します
  • get_trace - 分散トレーシング分析のために、トレースIDでトレースデータを取得します

今回の流れ

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

  • Mackerel オーガニゼーション設定
  • アラート調査と解決
  • ダッシュボード作成

前提条件

今回の作業は当社の検証環境で行いました。

前々回のコラムの環境を流用して、これにMackerelの監視環境を追加しています。

  • Javaベースのサンプルアプリケーションを東京リージョンのEC2上に構築
  • EC2にはMackerelエージェントをインストール
  • Mackerelのオーガニゼーションはデフォルト状態
  • CloudWatchは、CloudWatchエージェントを使って主に下記のメトリクスを送信
    • CPU
    • メモリ
    • ディスク
    • ネットワークインターフェース
  • ログファイルは下記をCloudWatch Logsへ送信。
    • CloudWatchエージェントログ
    • Syslog
    • Kernelログ
    • Bootログ
    • アプリケーションログ
  • CloudWatch Application Signalsはデフォルト設定で取得
  • CloudWatch Syntheticsは設定しない

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

MCP Server追加

事前準備として、Mackerel APIキーを取得します。

Mackerel APIキーはオーガニゼーション詳細>APIキーのタブで取得できます。ダッシュボードを作成する際にはWrite権限が必要ですが、調査のみであればRead権限のみでも可能です。

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

また、これまで紹介したMCP ServerはPythonで動作するものでしたが、Mackerel MCP Serverは、Node.jsの環境で動作します。したがって、Node.jsの最新版をインストールしておきます。今回使用しているWSL(Ubuntu)の場合は、例えばこのようなコマンドでインストールします。

sudo apt install -y nodejs npm

インストールバージョンの確認

node -v && npm -v

MCPサーバーの設定を行います。今回は新たなMCP Serverとして、Mackerel MCP Serverを追加します。追加手順は前回と同様ですが、改めて記載しておきます。

下記の2種類のいずれかのjsonファイルを修正します。

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

Mackerel MCP Serverのみを利用する場合は、このような形になります。

{
  "mcpServers": {
    "mackerel": {
      "command": "npx",
      "args": ["-y", "@mackerel/mcp-server"],
      "env": {
        "MACKEREL_APIKEY": "${MACKEREL_APIKEY}"
      }
    }
  }
}

バージョン確認

q --version

起動コマンド

q chat

例によって起動すれば準備完了です。起動時にmackerelという文字が表示されていれば正しく設定されています。

AWSの構築/運用のお悩みにNTT東日本のエンジニアがおこたえします。お気軽にご相談ください。

Mackerel オーガニゼーション設定

今回Mackerelの環境はmackerel-agentを入れただけの状態にしてあります。まずは推奨設定に基づいて監視ルールを設定してもらいます。本来であれば監視閾値や通知先などはしっかり決まったものになりますが、Amazon Q Developerによる推奨値を設定してもらいます。

現在のMackerelのオーガニゼーションを確認し、監視ルールを推奨ルールに基づいて設定してください

Mackerelのオーガニゼーション確認と監視ルール設定を行います。まず現在の状況を確認してから、推奨ルールを設定していきます。

🛠️ Using tool: list_services from mcp server mackerel

🛠️ Using tool: list_hosts from mcp server mackerel

> 現在のMackerelオーガニゼーションの状況:

サービス:

• shiratori_app (Infrastructure ロール)

ホスト:

• ip-192-168-2-252 (EC2インスタンス m7a.large)

• ディスク使用率: 88% (要注意)

• メモリ: 7.9GB

既存監視ルール:

• connectivity監視のみ

推奨監視ルールを設定します:

> 直接APIを使用して監視ルールを作成します:

🛠️ Using tool: execute_bash

↳ Purpose: curlでCPU監視ルールを作成

🛠️ Using tool: execute_bash

↳ Purpose: メモリ使用率監視ルールを作成

🛠️ Using tool: execute_bash

↳ Purpose: ディスク使用率監視ルールを作成(緊急対応)

🛠️ Using tool: execute_bash

↳ Purpose: ロードアベレージ監視ルールを作成

> 完了しました!Mackerelオーガニゼーションに以下の推奨監視ルールを設定しました:

## 設定済み監視ルール

1. CPU使用率監視 (ID: ********)

• メトリック: cpu.user

• 警告: 80% 以上

• 危険: 90% 以上

• 継続時間: 3分

2. メモリ使用率監視 (ID: ********)

• メトリック: memory.used

• 警告: 85% 以上

• 危険: 95% 以上

• 継続時間: 3分

3. ディスク使用率監視 (ID: ********) ⚠️ 緊急

• メトリック: filesystem./.percent_used

• 警告: 85% 以上

• 危険: 95% 以上

• 継続時間: 1分(現在88%使用中のため短縮)

4. ロードアベレージ監視 (ID: ********)

• メトリック: loadavg5

• 警告: 2.0 以上

• 危険: 4.0 以上

• 継続時間: 5分

5. 接続性監視 (既存)

• ホストの生存監視

## 緊急対応が必要

現在のホスト(ip-XXX-XXX-XXX-XXX)のディスク使用率が88%と高いため、ディスク容量の確保を検討してください。

実はここでAmazon Q Developerの設定に誤りがあります。メモリ監視ルールがメモリ使用率と言っているにもかかわらず、memory.used(メモリ使用量)になっています。したがって、95バイトでアラートが出るようになっているため、修正を指示します。

メモリの監視設定が誤っているように見えます。95%ではなく、95Bで設定されているように見えますので、確認してパーセントに修正してください

> メモリ監視設定を確認して修正します。

🛠️ Using tool: get_monitor from mcp server mackerel

> 問題を確認しました。メモリ監視が memory.used(バイト単位)で設定されており、95バイトで監視されています。パーセント監視に修正します。既存の監視ルールは変更できないため、削除して新しく作成します。

🛠️ Using tool: execute_bash

↳ Purpose: 誤ったメモリ監視ルールを削除

🛠️ Using tool: execute_bash

↳ Purpose: 正しいメモリ使用率監視ルールを作成

> 古いアラートをクローズします:

🛠️ Using tool: execute_bash

↳ Purpose: 古いメモリアラートをクローズ

> ## ✅ メモリ監視設定修正完了

### 修正内容

問題:

• 旧設定: memory.used > 95 バイト(誤設定)

• 現在のメモリ使用量: 約3.9GB = 3,895,063,893バイト

• 95バイトを大幅に超過してCRITICALアラート発生

修正後:

• 新設定: memory.percent_used > 95 パーセント(正しい設定)

• 監視ID: ********

• 警告: 85%、危険: 95%

### 現在の監視ルール一覧

1. CPU使用率監視 (********): 80%/90%

2. ディスク使用率監視 (********): 85%/95%

3. メモリ使用率監視(パーセント) (********): 85%/95% ✅ 修正済み

4. ロードアベレージ監視 (********): 2.0/4.0

5. 接続性監視 (********): 生存監視

### アラート状況

• 古いメモリアラート: クローズ済み

• 現在のアラート: なし

メモリ監視設定が正しくパーセント監視に修正され、誤ったアラートも解決しました!

指示したうえで具体的な修正は正しく行ってくれました。

アラート調査と解決

設定の過程でディスク使用率が高いことがわかりました。この問題を対処していきましょう。

不要なログや出力メッセージが発見できれば成功です。バックグラウンドでアプリケーションを動かしており、必要なログはCloudWatch Logsへ出力しているため、journalやnohup.outはローカルに保存しておく必要性はありません。ここからはEC2インスタンスの内部に入って調査を行いますので、AWS CLIを使用します。

AWS CLIを使用して当該ホストのディスクの中身を調査して不要と思われるファイルを確認してください。AWS CLIのプロファイルは****を使用してください

> AWS CLIを使用してEC2インスタンスの情報を取得し、ディスク調査を行います。

🛠️ Using tool: call_aws from mcp server awslabs.aws-api-mcp-server

> EC2インスタンスの情報を取得しました。次にSSM Session Managerを使用してインスタンスに接続し、ディスクの使用状況を調査します。

> SSM Session Managerでセッションが開始されましたが、対話的なコマンド実行が必要です。代わりにSSM Run Commandを使用してディスク使用状況を調査します。

> コマンドが送信されました。結果を取得します:

> ## ディスク使用状況調査結果

### 現在の状況

• **ルートパーティション**: 15GB中13GB使用(88%)

• **使用可能領域**: 1.8GB

### 主要なディスク使用箇所

最大の使用領域:

1. shiratori_appアプリケーション: 7.5GB (/opt/shiratori_app)

2. システムライブラリ: 1.6GB (/usr/lib)

3. システムデータ: 1.5GB (/var/lib)

ログファイル:

• **systemd journal**: 380MB (/var/log/journal)

• **Amazon CloudWatch**: 112MB (/var/log/amazon)

• **システム統計**: 2.2MB (/var/log/sysstat)

大きなファイル:

• /opt/shiratori_app/nohup.out (サイズ不明だが500MB以上)

### 削除推奨ファイル

## 🚨 緊急対応が必要な問題を発見

### 最大の問題

nohup.out ファイル: 6.2GB - これが最大の容量消費原因です!

### 削除推奨ファイル(即座に実行可能)

1. 最優先 - nohup.out: 6.2GB

2. systemd journal: 380MB

3. 古いログファイル: 約50MB

### 即座にディスク容量を回復する方法

正しく不要なログファイルを見つけてくれました。クリーンアップを依頼しましょう

では、こちらのファイルをクリーンアップしてください

> かしこまりました。クリーンアップを開始します。

🛠️ Using tool: call_aws from mcp server awslabs.aws-api-mcp-server

● Running call_aws with the param:

🛠️ Using tool: execute_bash

↳ Purpose: クリーンアップ処理完了まで待機

> ## 🎉 ディスククリーンアップ完了!

### 劇的な改善結果

Before(クリーンアップ前):

• ディスク使用率: 88% (13GB/15GB使用)

• 使用可能領域: 1.8GB

After(クリーンアップ後):

• ディスク使用率: 56% (8.0GB/15GB使用)

• 使用可能領域: 6.5GB

### 削除されたファイル

1. nohup.out: 6.2GB → 0GB(空ファイル化)

2. systemd journal: 286.7MB削除

3. 古いログファイル: 複数削除

### 実行された対策

1. nohup.outファイルの処理

• バックアップを/tmpに作成

• ファイルを空にしてアプリケーション継続実行

2. systemd journalクリーンアップ

• 100MB以下に制限

• 古いジャーナルファイル削除

3. 古いログファイル削除

• 30日以上古いgzipログファイル削除

### 今後の予防策

Mackerel監視ルールで早期検知:

• ディスク使用率85%で警告

• ディスク使用率95%で危険アラート

定期メンテナンス推奨:

• nohup.outファイルの定期ローテーション設定

• journalログの自動クリーンアップ設定

ディスク容量問題は解決し、監視体制も整いました!

作業完了の確認のため、Mackerelのメトリクスも正常値に戻っていることを確認してもらいます。

3分間待機して、ディスク使用量が正常に戻っていることを確認してください

> 3分間待機してから、ディスク使用量が正常に戻っていることを確認します。

🛠️ Using tool: execute_bash

↳ Purpose: 3分間待機

🛠️ Using tool: list_alerts from mcp server mackerel

● Running list_alerts with the param:

⋮ {}

> ## ✅ ディスク使用量確認結果(3分後)

### 現在の状況

ディスク使用率: 56% (8.0GB/15GB使用)

• 使用可能領域: 6.5GB

• nohup.outファイル: 558KB (正常に動作中)

### 状況分析

1. ディスク容量: ✅ 正常

• 88% → 56%に改善

• 6.5GB の空き容量確保

2. nohup.outファイル: ✅ 正常

• アプリケーション継続動作中

• ファイルサイズ管理済み

### 結論

• **ディスク容量問題は完全に解決**

• **監視ルールは正常に動作**

ディスク容量は正常に戻り、監視システムも適切に機能しています!

Amazon Q Developerのデフォルトツールであるuse_awsを活用して、EC2インスタンス内部の調査を行い、正しく不要なファイルを探し出して削除するところまで成功しました。

AWSの構築/運用のお悩みにNTT東日本のエンジニアがおこたえします。お気軽にご相談ください。

ダッシュボード作成

最後に、Mackerelのダッシュボードをおまかせで作成してみたいと思います。冒頭のMackerel MCP Serverの説明の通り、Mackerel MCP Serverには新規のダッシュボード作成ツールがありませんので、新規のダッシュボードを作成してから指示を出します。

現在のシステム構成に基づいて、推奨ダッシュボードを作成してください。

> 現在のシステム構成に基づいて、推奨ダッシュボードを作成します。まず既存のダッシュボードを確認してから、新しいダッシュボードを作成します。

🛠️ Using tool: list_dashboards from mcp server mackerel

> ダッシュボードが確認できました!実際のダッシュボードIDは「********」で、URLパスが「********」になっています。正しいIDで推奨設定を適用します。

🛠️ Using tool: update_dashboard from mcp server mackerel

● Running update_dashboard with the param:

⋮ {

⋮ "memo": "AWS EC2 m7a.large インスタンス (ip-XXX-XXX-XXX-XXX) の監視ダッシュボード",

⋮ "title": "shiratori_app システム監視ダッシュボード",

⋮ "widgets": [

⋮ {

⋮ "layout": {

⋮ "width": 6,

⋮ "x": 0,

⋮ "y": 0,

⋮ "height": 4

⋮ },

⋮ "range": {

⋮ "offset": 0,

⋮ "type": "relative",

⋮ "period": 3600

⋮ },

⋮ "title": "ロードアベレージ",

⋮ "type": "graph",

⋮ "graph": {

⋮ "name": "loadavg5",

⋮ "type": "host",

⋮ "hostId": "*********"

⋮ }

⋮ },

⋮ {

⋮ "layout": {

⋮ "width": 3,

⋮ "x": 6,

⋮ "y": 0,

⋮ "height": 3

⋮ },

⋮ "fractionSize": 2,

⋮ "suffix": "",

⋮ "title": "現在のロードアベレージ",

⋮ "type": "value",

⋮ "metric": {

⋮ "name": "loadavg5",

⋮ "type": "host",

⋮ "hostId": "********"

⋮ }

⋮ },

⋮ {

⋮ "layout": {

⋮ "width": 3,

⋮ "x": 9,

⋮ "y": 0,

⋮ "height": 3

⋮ },

⋮ "roleFullname": "shiratori_app:Infrastructure",

⋮ "title": "アラート状況",

⋮ "type": "alertStatus"

⋮ },

⋮ {

⋮ "layout": {

⋮ "width": 12,

⋮ "x": 0,

⋮ "y": 4,

⋮ "height": 8

⋮ },

⋮ "markdown": "## shiratori_app Infrastructure\n\n**ホスト**: ip-XXX-XXX-XXX-XXX \n**インスタンス**: i-******** \n**タイプ**: m7a.large (AMD EPYC 9R14 × 2コア) \n**メモリ**: 7.9GB \n**OS**: Ubuntu 24.04 \n**エージェント**: mackerel-agent/0.85.2 \n\n### 監視闾値\n- **CPU**: 警告80% / 危険90%\n- **メモリ**: 警告85% / 危険95%\n- **ディスク**: 警告85% / 危険95%\n- **ロードアベレージ**: 警告2.0 / 危険4.0\n\n### 現在の状況\n- **ステータス**: 稼働中 ✅\n- **アクティブアラート**: なし\n- **最終更新**: 2025-10-09 15:30\n\n### メトリクス収集状況\n現在メトリクスデータの収集が開始されています。 \nデータが表示されるまで数分かかる場合があります。\n\n### 推奨メトリクス追加\nメトリクスデータが収集された後、以下のグラフを追加することを推奨します:\n- CPU使用率 (cpu.*)\n- メモリ使用量 (memory.*)\n- ディスク使用量 (filesystem.*)\n- ネットワークトラフィック (interface.*)",

⋮ "title": "システム情報",

⋮ "type": "markdown"

⋮ }

⋮ ],

⋮ "dashboardId": "********",

⋮ "urlPath": "shiratori-app-monitoring"

⋮ }

> ✅ ダッシュボード作成完了!

# easyTravel システム監視ダッシュボード

## 📊 作成完了

ダッシュボードID: ********

URL: https://mackerel.io/orgs/shiratori-org/dashboards/shiratori-app-monitoring

タイトル: shiratori_app システム監視ダッシュボード

## 🎯 現在の構成

### 配置済みウィジェット

1. ロードアベレージグラフ (6×4)

• メトリック: loadavg5

• 表示期間: 1時間

2. 現在のロードアベレージ値 (3×3)

• リアルタイム値表示

• 小数点2桁表示

3. アラート状況 (3×3)

• shiratori_app:Infrastructure ロールのアラート状態

4. システム情報 (12×8)

• ホスト詳細情報

• 監視閾値

• 現在の状況

• 推奨メトリクス情報

## 📈 次のステップ

### メトリクス収集開始後の追加推奨

メトリクスデータが収集され始めたら、以下のウィジェットを手動で追加してください:

1. CPUグラフ: cpu.user, cpu.system, cpu.idle

2. メモリグラフ: memory.used, memory.free

3. ディスクグラフ: filesystem./.used

4. ネットワークグラフ: interface.ens5.rxBytes.delta, interface.ens5.txBytes.delta

### 監視のポイント

• **ロードアベレージ**: 2コアシステムなので2.0以下が理想

• **メモリ使用率**: 現在81%と高めなので要注意

• **アラート**: 設定済み監視項目が自動で表示

ダッシュボードが正常に作成され、基本的な監視体制が整いました!

完成品はこちらになります。なぜかロードアベレージのみを表示し、ほかのメトリクスは手動で設定するようになっていますが、システム概要をテキストに表示しています。

ちなみにMackerelにはおまかせダッシュボードという機能もあり、Webシステムであればこのように自動でダッシュボードを作ってくれます。

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

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

保守設計について

今回は単純にコンテキストが不足しているように感じました。インフラ監視に必要な情報は一通り設定されていますが、アプリケーション側の保守情報の収集や関連ドキュメントが不足している環境ですと、一般的な閾値設定やダッシュボードにとどまるように感じました。また、前々回のCloudWatchでの調査レポートに比べるとインフラ監視の情報にとどまったため、アプリケーションのエラーやログ調査といった部分は追加の情報を与えてあげる必要がありそうでした。

Mackerel MCP Serverの使いどころ

MackerelにはEventbridgeでのアラート通知機能があります。アラート通知を起因としたイベントドリブンなAIエージェントの呼び出しによって一次調査を迅速化させたり、場合によっては非定型の障害対応をおこなったりすることもできるのではないかと思いました。

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

こちらは、前々回のコラムと比較すると、Mackerelでできない部分を補完してあげる必要があると感じます。具体的には下記のような権限が必要かと思います。

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

対処の実行について

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

AWSの構築/運用のお悩みにNTT東日本のエンジニアがおこたえします。お気軽にご相談ください。

まとめ

今回はAWSとMackerelを利用した保守運用作業をより簡易にできないか試してみました。

監視設定の閾値などが決まっていればAmazon Q Developerに指示出しを行いながらやれるのは新たな作業手順としてありそうだなと感じました。また、障害調査においては生成AIの知見をうまく使いながら強化できる一方で、適切な閾値設定やアラートに対するアクションプランの決定についてはシステムの概要や要件をうまく伝えながら設定していく必要があると感じました。

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

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

ページ上部へ戻る

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

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