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 消息的结构化数据
- 在单个查询中处理多个日志组
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
执照
麻省理工学院