bluey-ai/blue.y

GitHub: bluey-ai/blue.y

基于 DeepSeek AI 的 Kubernetes 集群智能运维助手,通过即时通讯工具提供 7x24 监控、自动诊断和事件响应能力。

Stars: 0 | Forks: 0

# BLUE.Y — AI Ops 助手 **BLUE.Y 会问“为什么”,所以你不必亲力亲为。** 为你的 EKS 集群提供 7x24 小时 AI 驱动的基础设施监控和事件响应,完全通过 Telegram(或 Slack、MS Teams、WhatsApp)操作。 ## 架构 ``` Telegram Bot ←→ BLUE.Y (Node.js, EKS pod) ├── Monitors (cron-scheduled) │ ├── PodMonitor — unhealthy pods, crash loops, restarts │ ├── NodeMonitor — node readiness, pressure conditions │ ├── CertMonitor — TLS certificate expiry (cert-manager) │ └── HPAMonitor — autoscaler utilization thresholds ├── Clients │ ├── KubeClient — K8s API (pods, deployments, metrics, HPA) │ ├── BedrockClient — DeepSeek V3/R1 AI analysis │ ├── TelegramClient — Telegram Bot API │ ├── EmailClient — AWS SES incident reports │ └── JiraClient — Jira ticket creation └── Scheduler ├── Cron-based monitor execution ├── Auto-diagnose (unhealthy pod → logs/events/AI analysis) ├── Alert deduplication (15-min cooldown per resource) └── Incident timeline (in-memory, last 50 events) ``` ## 技术栈 | 组件 | 技术 | |-----------|-----------| | Runtime | Node.js 22, TypeScript 5 | | K8s Client | `@kubernetes/client-node` v1 | | AI | DeepSeek V3 (快速) + R1 (推理), OpenAI-compatible API | | 告警 | Telegram Bot API (long polling) | | 邮件 | AWS SES (configurable sender address) | | 工单 | Jira REST API | | 调度 | `cron` library | | 容器 | Alpine-based, non-root user, 256Mi/512Mi | ## Telegram 命令 ### 监控 | Command | Description | |---------|-------------| | `/status` | 集群健康概览(节点 + 各 namespace 的 Pod) | | `/check` | 立即运行所有监控器 | | `/nodes` | 节点 CPU/内存可分配资源 | | `/resources [ns]` | 通过 metrics API 查看 Pod CPU/内存使用情况 + HPA 摘要 | | `/hpa [ns]` | HPA autoscaler 状态 — 当前 vs 目标利用率 | | `/doris` | Doris FE/BE 健康 + 资源使用仪表板 | ### Pod 与 Deployment | Command | Description | |---------|-------------| | `/logs ` | 查看Pod最后 30 行日志 | | `/logsearch ` | 在最后 500 行日志中搜索匹配模式 | | `/describe ` | Pod 详情(容器、状态、IP、节点) | | `/events [ns] [pod]` | 最近的 K8s events | | `/deployments [ns]` | 列出 deployments 及 ready/total replicas | | `/rollout ` | Rollout 状态、镜像、副本进度 | | `/diagnose ` | 完整 AI 诊断(describe + logs + events + AI 分析) | ### 操作(需要 `/yes` 确认) | Command | Description | |---------|-------------| | `/restart ` | 通过 annotation patch 进行滚动重启 | | `/scale ` | 扩缩副本数 (0-10) | ### 报告 | Command | Description | |---------|-------------| | `/email
` | 通过邮件发送事件报告(最近一次诊断或 Bot 响应) | | `/jira` | 根据最近一次事件创建 Jira ticket | | `/incidents` | 查看事件时间线 | ### 系统 | Command | Description | |---------|-------------| | `/sleep` | 暂停所有监控(紧急开关) | | `/wake` | 恢复监控 | | `/help` | 显示所有命令 | 同时也支持自然语言查询 — BLUE.Y 会结合 AI 与集群上下文分析你的问题。 ## 监控器与阈值 | Monitor | Schedule | Warning | Critical | |---------|----------|---------|----------| | Pods | 每 2 分钟 | 重启次数 > 5 | Not Running, CrashLoopBackOff | | Nodes | 每 5 分钟 | 压力条件 | NotReady | | Certs | 每 6 小时 | 14 天内过期 | 7 天内过期 | | HPA | 每 5 分钟 | CPU/Mem >= 70%,已达最大副本数 | CPU/Mem >= 85% | ## 自动诊断 当 Pod 监控器检测到 Critical 级别问题时,BLUE.Y 会自动: 1. 向 Telegram 发送初始告警 2. 收集 Pod 描述、日志(最后 50 行)和 K8s events 3. 将原始诊断信息发送到 Telegram 4. 使用 DeepSeek AI 对收集的数据进行分析 5. 保存事件上下文以便邮件/Jira 分享 6. 对每个 Pod 应用 15 分钟冷却时间,防止告警骚扰 ## 安全机制 - **需要确认**:重启和扩缩容操作需要明确的 `/yes` - **操作限制**:每小时最多 5 次操作(可配置) - **阻止的命令**:`kubectl delete pvc/namespace/node`、`kubectl drain/cordon` - **审计日志**:所有操作都会记录(最近 1000 条,可通过 `/audit` API 访问) - **Read-only RBAC**:ClusterRole 仅授予只读访问权限 + 仅限 deployment 的 patch/scale 权限 - **Non-root 容器**:以 `bluey` 用户 (UID 1001) 运行 ## 环境变量 | Variable | Required | Default | Description | |----------|----------|---------|-------------| | `PORT` | No | `8000` | HTTP server port | | `AI_API_KEY` | Yes | — | DeepSeek API key | | `AI_BASE_URL` | No | `https://api.deepseek.com/v1` | AI API endpoint | | `AI_ROUTINE_MODEL` | No | `deepseek-chat` | 快速模型 (V3) | | `AI_INCIDENT_MODEL` | No | `deepseek-reasoner` | 推理模型 (R1) | | `TELEGRAM_BOT_TOKEN` | Yes | — | Telegram bot token | | `TELEGRAM_CHAT_ID` | Yes | — | 授权的 chat ID | | `WATCH_NAMESPACES` | No | `default,monitoring` | 监控的 namespace 列表(逗号分隔) | | `KUBE_IN_CLUSTER` | No | `true` | 使用集群内 K8s config | | `JIRA_EMAIL` | No | — | Jira 账号邮箱 | | `JIRA_API_TOKEN` | No | — | Jira API token | | `JIRA_BASE_URL` | No | `https://your-org.atlassian.net` | Jira instance URL | | `JIRA_PROJECT_KEY` | No | `OPS` | Jira project key | | `EMAIL_FROM` | No | `noreply@example.com` | SES sender address | | `GRAFANA_EXTERNAL_URL` | No | — | 公网 Grafana URL(显示在密码重置消息中) | | `AI_SYSTEM_CONTEXT` | No | — | 注入到 AI prompt 中的集群特定上下文(deployments、URLs、troubleshooting) | | `AI_VISION_CONTEXT` | No | — | 用于 Vision AI 图像分析的服务列表 | | `PING_SERVICE_MAP` | No | `{}` | 服务名 → `{label, url}` 的 JSON map,用于 `/ping` 命令 | | `TEAM_EMAILS` | No | `{}` | 名字 → 邮箱的 JSON map,用于 `/email ` 简写 | | `PRODUCTION_URLS` | No | `[]` | `{name, url, expect}` 的 JSON 数组,用于 QA 冒烟测试 | 所有密钥存储在 K8s Secret `blue-y-secrets` 中。 ## 部署 在 EKS 上运行(支持任何集群和命名空间)。通过你选择的 CI/CD 流水线(包含 Bitbucket Pipelines 示例)。 ``` # Local development npm install npm run dev # 构建 npm run build # 部署 (via Bitbucket Pipelines) git push origin main # Pipeline: 构建 → ECR push → kubectl apply ``` ### K8s 资源 - **Deployment**: `blue-y-production`, Recreate strategy, 1 replica - **Service**: ClusterIP, 端口 80 → 8000 - **ServiceAccount**: `blue-y` 搭配 IRSA (`BlueYBedrockRole`) - **ClusterRole**: `blue-y-readonly` (读取 pods/nodes/deployments/events/secrets/metrics/HPA + patch deployments) - **Secret**: `blue-y-secrets` (deepseek-api-key, telegram-bot-token, telegram-chat-id, jira-email, jira-api-token) ## API 端点 | Endpoint | Method | Description | |----------|--------|-------------| | `/health` | GET | 健康检查(状态、运行时间) | | `/check` | POST | 手动触发所有监控器 | | `/audit` | GET | 查看审计日志(最近 100 条) | ## 项目结构 ``` src/ ├── main.ts # Entry point, Telegram command handler, Express server ├── config.ts # Environment config ├── scheduler.ts # Cron scheduler, auto-diagnose, incident timeline ├── clients/ │ ├── bedrock.ts # DeepSeek AI client (V3 fast + R1 reasoner) │ ├── email.ts # AWS SES email client │ ├── jira.ts # Jira REST API client │ ├── kube.ts # Kubernetes API client (pods, nodes, deployments, HPA, metrics) │ └── telegram.ts # Telegram Bot API client ├── monitors/ │ ├── base.ts # Monitor interface │ ├── pods.ts # Pod health monitor │ ├── nodes.ts # Node health monitor │ ├── certs.ts # TLS certificate expiry monitor │ └── hpa.ts # HPA utilization monitor └── utils/ └── logger.ts # Winston logger ```
标签:AIOps, ChatOps, DeepSeek, EKS, GNU通用公共许可证, HPA, Jira集成, MITM代理, MS Teams, Node.js, Pod监控, Slack机器人, SRE, Telegram Bot, TypeScript, WhatsApp, 偏差过滤, 即时通讯集成, 告警去重, 子域名突变, 安全插件, 容器监控, 提示注入, 故障自愈, 智能诊断, 熵值分析, 站点可靠性工程, 系统架构, 自动化攻击, 自动化运维, 证书管理, 运维监控, 集群管理