← 返回文章列表

跨云日志分析:智能顾问 CloudQ 集成阿里云 SLS MCP 实践

背景

在多云架构下,业务日志分散在不同云平台是常态——腾讯云的应用日志在 CLS,阿里云的服务日志在 SLS。当需要排查跨云问题时,运维人员不得不在多个控制台之间切换,效率低下。

腾讯云智能顾问 CloudQ 已经能分析腾讯云 CLS 日志,但如何让它也能"看到"阿里云的 SLS 日志?答案是 MCP(Model Context Protocol)——一个让 AI 助手调用外部工具的标准协议。

阿里云官方提供了 Observable MCP ServerGitHub),支持通过自然语言查询 SLS 日志。我们要做的就是把它部署起来,然后让智能顾问 CloudQ 通过自定义 MCP 连接到它。

架构

用户端 👨‍💻 运维人员 企业微信 腾讯云 智能顾问 CloudQ AI 分析 & 工具调度 自定义 MCP 连接器 CVM 跳板机 公网 EIP 🔒 安全组 Nginx 反向代理 :8080 Basic Auth + Rate Limit MCP Server SSE 传输协议 127.0.0.1:8000 systemd 托管 · 仅监听 localhost · 进程隔离 阿里云 SLS API 日志服务 · 查询接口 AK/SK 认证 🔑 RAM 子账号 · SLS 只读 Logstore A 应用日志 Logstore B 访问日志 ... 自然语言 MCP / SSE API 调用 结果返回

智能顾问 CloudQ 通过自定义 MCP 连接器访问阿里云 SLS 日志

架构分为三个区域:

  • 用户端:运维人员在企业微信中用自然语言向 CloudQ 提问(如"帮我查一下阿里云 SLS 最近 1 小时的错误日志")
  • 腾讯云:智能顾问 CloudQ 接收问题后,通过自定义 MCP 连接器发起 SSE 请求,经 CVM 上的 Nginx 反向代理(Basic Auth + Rate Limit)转发到本地 MCP Server
  • 阿里云:MCP Server 使用 RAM 子账号(最小 SLS 只读权限)调用阿里云 SLS API 查询日志,结果沿链路返回,CloudQ 整理后在企微中呈现

前置条件

项目 要求
阿里云账号RAM 子账号,仅授予 SLS 只读权限(log:Get* + log:List*
腾讯云 CVM一台有公网 IP 的 CVM(1核1G即可),安装 Python 3.8+ 和 Nginx
智能顾问已开通自定义 MCP 连接能力

Step 1:安装 MCP Server

pip install mcp-server-aliyun-observability

创建 systemd 服务 /etc/systemd/system/aliyun-mcp.service

[Unit]
Description=Aliyun Observable MCP Server (SSE)
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/python3 -m mcp_server_aliyun_observability \
  --transport sse --transport-port 8000 --host 127.0.0.1 \
  --access-key-id <ALIYUN_AK> \
  --access-key-secret <ALIYUN_SK>
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable aliyun-mcp
systemctl start aliyun-mcp
关键:MCP Server 仅监听 127.0.0.1:8000,不直接暴露公网。所有外部访问通过 Nginx 代理。

Step 2:Nginx 反向代理

安装 Nginx 和 htpasswd 工具:

yum install -y nginx httpd-tools  # CentOS/TencentOS
apt install -y nginx apache2-utils  # Ubuntu/Debian

生成 Basic Auth 密码文件:

htpasswd -cb /etc/nginx/mcp_htpasswd <用户名> <密码>
chmod 644 /etc/nginx/mcp_htpasswd

Nginx 配置 /etc/nginx/conf.d/aliyun-mcp.conf

server {
  listen 8080;
  server_name <你的公网IP>;

  auth_basic "CloudQ MCP Auth";
  auth_basic_user_file /etc/nginx/mcp_htpasswd;

  location /sse {
    proxy_pass http://127.0.0.1:8000;
    proxy_http_version 1.1;
    proxy_buffering off;
    proxy_cache off;
    proxy_set_header Connection '';
    proxy_set_header Host 127.0.0.1:8000;
    proxy_read_timeout 300s;
  }

  location /messages/ {
    proxy_pass http://127.0.0.1:8000;
    proxy_http_version 1.1;
    proxy_buffering off;
    proxy_cache off;
    proxy_set_header Connection '';
    proxy_set_header Host 127.0.0.1:8000;
    proxy_read_timeout 300s;
  }

  location / { return 403; }
}
SSE 必需配置:proxy_buffering offproxy_cache off 是 SSE 长连接的关键,否则事件流会被缓冲导致连接超时。/messages/ 路径也需要代理(MCP 协议的消息通道)。

Step 3:安全组

在 CVM 所属的安全组中添加入站规则:

协议 端口 来源 说明
TCP80800.0.0.0/0(或智能顾问出口 IP)MCP Server HTTP 代理

如果能确认智能顾问的出口 IP 段,建议收紧为 IP 白名单 + Basic Auth 双重防护。

Step 4:智能顾问配置

在腾讯云智能顾问控制台,添加自定义 MCP 连接:

配置项
SSE 地址http://<公网IP>:8080/sse
Header KeyAuthorization
Header ValueBasic <base64(用户名:密码)>

Base64 编码生成:

echo -n '用户名:密码' | base64

Step 5:验证

本地验证:

# 无认证应返回 401
curl -s -o /dev/null -w "%{http_code}" http://<公网IP>:8080/sse

# 有认证应返回 SSE 事件流
curl -s -N -m 5 -u 用户名:密码 http://<公网IP>:8080/sse

企微验证:在 CloudQ 对话中输入——

"帮我查一下阿里云 SLS 中有哪些 logstore"

CloudQ 会调用 sls_list_logstores 工具并返回结果。

可用工具

MCP Server 接入后,CloudQ 可调用以下 SLS 工具:

工具 功能 典型用法
sls_list_logstores列出所有 logstore"有哪些日志库"
sls_describe_logstore获取字段结构"xxx 日志库有哪些字段"
sls_translate_natural_language_to_query自然语言转 SLS SQL"最近1小时ERROR日志"
sls_execute_query执行查询执行上一步生成的 SQL

踩坑记录

问题 现象 解决
Nginx 代理 Host Header 不匹配MCP Server 返回 "Invalid Host header"proxy_set_header Host 127.0.0.1:8000
htpasswd 权限不足Nginx 500 错误,日志报 Permission deniedchmod 644 /etc/nginx/mcp_htpasswd
自签 TLS 证书智能顾问报 "tls: failed"改用 HTTP + Basic Auth(智能顾问不信任自签证书)
SSE 被缓冲连接超时无响应proxy_buffering off; proxy_cache off;
Nginx 80 端口被占用启动失败 Address in use使用其他端口(如 8080),注释 nginx.conf 默认 server

安全建议

层级 措施
应用层Nginx Basic Auth + Rate Limit (10r/s)
网络层安全组仅开放代理端口,后续收紧为智能顾问 IP 白名单
进程层MCP Server 仅监听 127.0.0.1,不直接暴露
凭证层阿里云 RAM 子账号最小权限(仅 SLS 只读)

总结

通过 MCP 协议,智能顾问 CloudQ 的能力边界从腾讯云扩展到了阿里云。整个部署只需一台 CVM、一个 Nginx 代理和一行 pip install,即可让 CloudQ 在企微对话中自然语言查询阿里云 SLS 日志。

这种"MCP Server 作为桥梁"的模式具有通用性——不仅限于 SLS,任何支持 MCP 协议的第三方工具都可以用同样的方式接入智能顾问,实现多云、多源的统一可观测。