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, 偏差过滤, 即时通讯集成, 告警去重, 子域名突变, 安全插件, 容器监控, 提示注入, 故障自愈, 智能诊断, 熵值分析, 站点可靠性工程, 系统架构, 自动化攻击, 自动化运维, 证书管理, 运维监控, 集群管理