CloudWatch MCP サーバー
この簡素化されたMCPサーバーは、MCPプロトコルを介してAWS CloudWatchリソースと効率的にやり取りする方法を提供します。CloudWatchのロググループ、ログクエリ、アラームをリソースおよびツールとして公開します。
特徴
- すべての CloudWatch ロググループとそのメタデータを一覧表示する
- すべての CloudWatch アラームとその現在の状態を一覧表示する
- CloudWatch Insights を使用して複数のロググループにまたがって CloudWatch ログをクエリする
- 共有スキーマを使用して複数のログ グループ間で利用可能なフィールドを検出します
- ログクエリの@messageフィールドの自動JSON解析
- 特定のロググループが存在するかどうかを確認する
- 特定のロググループに関する詳細情報を取得する
- アラームを状態別にフィルタリングする(すべてのアラーム、または ALARM 状態のアラームのみ)
- 保存されたすべての CloudWatch Logs Insights クエリを取得する
前提条件
- Python 3.12以上
- AWS 認証情報が設定されている(環境変数、AWS CLI、または IAM ロール経由)
- MCP CLI (バージョン 0.1.1 以上)
- Boto3 (Python 用 AWS SDK)
設定
- Python 3.12 以降がインストールされていることを確認してください。
- 仮想環境を作成します (オプションですが推奨されます)。
python -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
- 依存関係をインストールします:
pip install -r requirements.txt
- AWS 認証情報をまだ設定していない場合は設定します。または環境変数を設定します。
export AWS_ACCESS_KEY_ID="your-access-key"
export AWS_SECRET_ACCESS_KEY="your-secret-key"
export AWS_REGION="your-region"
プロジェクト構造
cloudwatch_server.py
- CloudWatch 統合用の MCP サーバー実装aws_cloudwatch.py
- 簡素化された AWS CloudWatch 統合モジュールtest_cloudwatch.py
- CloudWatch 統合をテストするためのコマンドライン ユーティリティ
サーバーの実行
MCP サーバーを起動します。
python cloudwatch_server.py
または、MCP CLI を使用します。
mcp run cloudwatch_server.py
MCPサーバーの使用
リソース
サーバーは次のリソースを公開します。
cloudwatch://log-groups
- すべての CloudWatch ロググループを一覧表示しますcloudwatch://log-groups/{log_group_name}
- 特定のロググループに関する詳細情報を取得しますcloudwatch://alarms
- すべてのCloudWatchアラームを一覧表示しますcloudwatch://alarms/in-alarm
- 現在 ALARM 状態にある CloudWatch アラームのみを一覧表示しますcloudwatch://saved-queries
- 保存されたすべての CloudWatch Logs Insights クエリを一覧表示します
ツール
サーバーは次のツールを提供します。
query_logs
- CloudWatch Insights を使用して CloudWatch ログをクエリする- パラメータ:
log_group_names
: クエリする単一のロググループ名またはロググループ名のリストquery_string
: CloudWatch Insights クエリ文字列start_time
: (オプション) クエリの開始時刻(Unixタイムスタンプミリ秒)end_time
: (オプション) クエリの終了時刻(Unixタイムスタンプミリ秒)
- 特徴:
- @message フィールドの JSON を自動的に解析します
- JSONメッセージの構造化データを返します
- 1回のクエリで複数のロググループを処理する
discover_log_fields
- 複数のロググループにわたって利用可能なフィールドを検出する- パラメータ:
log_group_names
: 分析する単一のロググループ名またはロググループ名のリスト
- 特徴:
- 複数のロググループにわたってフィールドを効率的に検出します
- ロググループ間でスキーマを共有することを想定
- @message 内のネストされた JSON フィールドを検出します
- フィールドタイプ(数値、ブール値、文字列、配列)を識別します
log_group_exists
- CloudWatch ロググループが存在するかどうかを確認する- パラメータ:
log_group_names
: チェックする単一のロググループ名またはロググループ名のリスト
- 戻り値:
- 各ロググループとその存在ステータスをマッピングする辞書
get_saved_queries
- 保存されたすべての CloudWatch Logs Insights クエリを取得します
CloudWatch統合のテスト
提供されているテスト スクリプトを使用して、CloudWatch 統合を直接テストできます。
# Make the test file executable
chmod +x test_cloudwatch.py
# List all log groups
./test_cloudwatch.py log-groups
# List all alarms
./test_cloudwatch.py alarms
# Use a specific AWS profile
./test_cloudwatch.py log-groups --profile my-profile
# Enable verbose logging
./test_cloudwatch.py alarms -v
MCP CLI の例
MCP CLI の使用:
# List all log groups
mcp inspect cloudwatch://log-groups
# Get details about a specific log group
mcp inspect cloudwatch://log-groups/my-log-group-name
# List all alarms
mcp inspect cloudwatch://alarms
# List alarms currently in ALARM state
mcp inspect cloudwatch://alarms/in-alarm
# List all saved CloudWatch Logs Insights queries
mcp inspect cloudwatch://saved-queries
# Query logs from multiple log groups using CloudWatch Insights
mcp call query_logs --log_group_names '["log-group-1", "log-group-2"]' --query_string "fields @timestamp, @message | limit 10"
# Query logs from a single log group (still supported)
mcp call query_logs --log_group_names "my-log-group" --query_string "fields @timestamp, @message | limit 10"
# Discover fields across multiple log groups
mcp call discover_log_fields --log_group_names '["log-group-1", "log-group-2"]'
# Check if multiple log groups exist
mcp call log_group_exists --log_group_names '["log-group-1", "log-group-2"]'
# Get all saved CloudWatch Logs Insights queries
mcp call get_saved_queries
ライセンス
マサチューセッツ工科大学