Gayathri2102/incident-response-ai

GitHub: Gayathri2102/incident-response-ai

基于Java/Spring Boot的分布式AIOps系统,通过Kafka实时检测微服务指标异常并调用Claude AI自动生成根因分析,将故障事件路由至Slack通知。

Stars: 0 | Forks: 0

# incident-response-ai 一个分布式的 Java/Spring Boot 系统,用于监控模拟微服务,通过 Kafka 检测实时指标中的异常,并使用 Claude AI API 自动生成根因分析——将丰富后的故障事件报告路由至 Slack。 ## 架构 ``` Metrics Simulator (Spring Boot :8081) │ ▼ Kafka: system.metrics Anomaly Detector (Spring Boot :8082) │ ▼ Kafka: system.anomalies Incident Orchestrator (Spring Boot :8083) ├──► Claude API (RCA generation) ├──► PostgreSQL (incident storage) └──► Slack Webhook (notifications) │ ▼ Incident API (Spring Boot :8084) └──► REST API (GET /incidents, POST /incidents/{id}/resolve) ``` ## 技术栈 | 层级 | 技术 | 原因 | |---|---|---| | 语言 | Java 17 | 强类型,生产级 | | 框架 | Spring Boot 3.x | 业界标准微服务 | | 流处理 | Apache Kafka | At-least-once 投递,重放,DLQ | | 数据库 | PostgreSQL | ACID 合规,强制幂等性 | | 缓存 | Redis | 限流,去重 | | AI | Claude API | 卓越的技术推理能力,适用于 RCA | | 韧性 | Resilience4j | 断路器 + 带退避的重试 | | 调度 | ShedLock | 分布式作业去重 | | 可观测性 | Prometheus + Grafana | 生产级指标 | | CI/CD | GitHub Actions | 每次推送自动测试 | ## 生产级模式 | 模式 | 实现方式 | 重要原因 | |---|---|---| | 幂等键 | SHA-256 哈希 + PostgreSQL UNIQUE | 防止 Kafka 重新投递导致重复事件 | | 断路器 | 针对 Claude API 的 Resilience4j | 当 AI 不可用时实现优雅降级 | | 指数退避 + 抖动 | Resilience4j retry | 防止重试时发生惊群效应 | | 死信队列 | Kafka DLQ topic | 处理失败时不会丢失消息 | | 分布式锁 | ShedLock | 确保每个集群仅运行一个调度任务,而非每个 pod 一个 | | 关联 ID | Kafka 消息头 | 实现跨服务的完整请求追踪 | | 连接池 | HikariCP 调优配置 | 防止数据库连接耗尽 | ## 快速入门 **前置条件:** Docker Desktop, Java 17, Maven ``` # 1. Clone repo git clone https://github.com/gayathri-bala/incident-response-ai cd incident-response-ai # 2. 启动所有基础设施 docker-compose up -d # 3. 验证一切正在运行 docker-compose ps # 4. 打开 Kafka UI: http://localhost:8090 # 5. 打开 Grafana: http://localhost:3000 (admin/admin) # 6. 打开 Prometheus: http://localhost:9090 # 7. 启动 metrics 模拟器 cd metrics-simulator mvn spring-boot:run ``` ## 架构决策记录 - [ADR-001:选择 Kafka 而非 RabbitMQ](docs/ADR/001-kafka-vs-rabbitmq.md) - [ADR-002:选择 Claude API 而非 OpenAI](docs/ADR/002-claude-api-integration.md) - [ADR-003:幂等性策略](docs/ADR/003-idempotency-strategy.md) ## API 端点 ``` GET /api/incidents — List all incidents (paginated) GET /api/incidents/{id} — Get incident with full AI RCA POST /api/incidents/{id}/resolve — Mark incident as resolved GET /actuator/prometheus — Prometheus metrics GET /actuator/health — Health check ``` ## 关键工程决策 **为什么选择 Kafka?** 消息保留机制允许重放异常事件以进行调试。消费者组允许对异常处理进行独立扩展。 **为什么使用幂等键?** Kafka 的 at-least-once 投递保证意味着异常事件可能会被重新投递。对 (service + anomaly_type + time_window) 进行 SHA-256 哈希处理可确保相同的异常永远不会创建重复的故障事件,并在数据库层面通过 UNIQUE 约束予以强制执行。 **为什么在 Claude API 上使用断路器?** AI API 属于外部依赖——它难免会出现故障。当故障发生时,故障事件仍会被创建并存储,只是缺少 AI 生成的 RCA。系统能够优雅降级,而不是彻底瘫痪。 ## 作者 Gayathri Balasubramanian — [linkedin.com/in/gayathri-bala](https://linkedin.com/in/gayathri-bala)
标签:AIOps, Apache Kafka, Claude API, GitHub Actions, Grafana, PostgreSQL, RCA, Redis, Resilience4j, ShedLock, Slack Webhook, Spring Boot, SRE, 人工智能, 偏差过滤, 分布式系统, 响应大小分析, 域名枚举, 实时指标, 幂等性, 异常检测, 弹性设计, 微服务监控, 搜索引擎查询, 智能运维, 根因分析, 死信队列, 流处理, 测试用例, 熔断降级, 用户模式Hook绕过, 自动化报警, 自动笔记, 自定义请求头, 请求拦截, 软件成分分析, 链路监控, 限流