C

CloudWatch云监控

@CharlieFng/cloudwatch-mcp
0 Stars 10 次浏览 CharlieFng 更新于 2026-08-23

一个简化的MCP服务器,通过MCP协议提供了一种与AWS CloudWatch资源(日志组、日志查询和警报)交互的简化方式。

该服务暂未提供标准配置,请参考 README 手动接入

服务介绍

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)

设置

  1. 确保已安装Python 3.12+。

  2. 创建虚拟环境(可选但推荐):

    python -m venv .venv
    source .venv/bin/activate # 在Windows上: .venvScriptsactivate

  3. 安装依赖项:

    pip install -r requirements.txt

  4. 如果尚未配置,请配置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