CloudWatch云监控
一个简化的MCP服务器,通过MCP协议提供了一种与AWS CloudWatch资源(日志组、日志查询和警报)交互的简化方式。
服务介绍
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 # 在Windows上: .venvScriptsactivate -
安装依赖项:
pip install -r requirements.txt
-
如果尚未配置,请配置AWS凭证:
aws configure
或者设置环境变量:
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集成:
使测试文件可执行
chmod +x test_cloudwatch.py
列出所有日志组
./test_cloudwatch.py log-groups
列出所有告警
./test_cloudwatch.py alarms
使用特定的AWS配置文件
./test_cloudwatch.py log-groups --profile my-profile
启用详细日志记录
./test_cloudwatch.py alarms -v## 使用MCP CLI的示例
使用MCP CLI:
bash
列出所有日志组
mcp inspect cloudwatch://log-groups
获取特定日志组的详细信息
mcp inspect cloudwatch://log-groups/my-log-group-name
列出所有警报
mcp inspect cloudwatch://alarms
列出当前处于ALARM状态的警报
mcp inspect cloudwatch://alarms/in-alarm
列出所有保存的CloudWatch Logs Insights查询
mcp inspect cloudwatch://saved-queries
使用CloudWatch Insights从多个日志组查询日志
mcp call query_logs --log_group_names ["log-group-1", "log-group-2"] --query_string "fields @timestamp, @message | limit 10"
从单个日志组查询日志(仍然支持)
mcp call query_logs --log_group_names "my-log-group" --query_string "fields @timestamp, @message | limit 10"
跨多个日志组发现字段
mcp call discover_log_fields --log_group_names ["log-group-1", "log-group-2"]
检查多个日志组是否存在
mcp call log_group_exists --log_group_names ["log-group-1", "log-group-2"]
获取所有保存的CloudWatch Logs Insights查询
mcp call get_saved_queries
许可证
MIT