kerochan-web/sentinel

GitHub: kerochan-web/sentinel

一个轻量级自托管运维自动化平台,通过熔断保护、闭环验证和工单集成实现安全可控的事件响应与自动修复。

Stars: 0 | Forks: 0

# sentinel 一个自托管、具备生产环境意识的运维自动化平台,旨在模拟企业 SRE 环境中常见的真实事件管理与自动化修复工作流。 与盲目执行重启命令的简单 cron 作业或 shell 脚本不同,sentinel 作为严格的闭环控制器运行。它集成了健康追踪、自动化系统修复、静态安全边界、状态持久化以及企业工单系统(ServiceNow),从而构建出安全、可观测的运维行为模型。 ## 核心功能与架构基元 * 确定性熔断(锁定引擎):使用内嵌的 SQLite 状态引擎,在应用重启期间永久跟踪修复次数。如果服务在超过其配置的最大重试次数后继续失败,熔断器将打开(isLockedOut = true),停止所有脚本执行,以防止无限重启循环,直到收到人工操作员的重置信号。 * 爆炸半径保护(安全边界):实现了一个词法解析器,在执行前评估用户配置的 shell 字符串。如果因配置拼写错误注入了危险命令(例如 rm -rf、mkfs、dd)或未参数化的目标,执行将被中止,记录严重安全违规,并且熔断器会立即跳闸。 * 闭环修复后验证:启动修复命令后,执行块会强制进行一段稳定期暂停,随后立即进行内联健康重新检查。只有当端点实际返回健康状态码时,服务恢复才会被记录为成功。 * 模拟企业生命周期(ServiceNow API):使用标准 ServiceNow schema 通过网络与本地模拟 Table API 端点集成。它会在发现时创建记录,处理状态转换,并在循环验证解决情况后发布关闭说明。 * 即时操作员警报:内置的轻量级钩子直接映射到 ntfy.sh 的发布/订阅主题,当生成工单或服务进入完全锁定状态时,向处于待命状态的工程师推送即时的桌面或手机推送通知。 * 可观测性支柱:暴露独立的 /metrics 抓取接口,供 Prometheus 跟踪活动锁定和确切的重试执行次数。 * 使用 OpenTelemetry 检测执行路径,将结构化的 trace 快照直接输出到 stdout,以映射从遥测捕获到 shell 退出上下文的运维生命周期。 ## 项目结构 . ├── cmd │ ├── mock-itsm # 独立的本地 ServiceNow 模拟 API 服务器 │ │ └── main.go │ └── sentinel # 核心自动化二进制守护进程 │ └── main.go ├── config.yaml # 中央基础设施配置(监控器、目标、凭证) ├── go.mod ├── go.sum ├── internal │ ├── audit # 结构化只追加 JSON 文件日志记录器 │ │ └── audit.go │ ├── config # YAML 解析 schema 和持续时间抽象 │ │ └── config.go │ ├── itsm # 事件生命周期状态控制器及 API 客户端 │ │ ├── client.go │ │ ├── engine.go │ │ ├── sql_store.go # SQLite schema 迁移和持久化引擎 │ │ └── store.go │ ├── metrics # Prometheus 指标检测包 │ │ └── metrics.go │ ├── monitor # HTTP、TCP 和网络探测处理程序 │ │ └── monitor.go │ ├── notifier # ntfy.sh API 集成层 │ │ └── notifier.go │ └── remediation # 安全 shell 命令处理和关键字强制执行 │ ├── remediator.go │ └── safety.go └── pkg └── models # 结构化 schema(ServiceNow JSON 记录) └── itsm.go ## 配置示例 (config.yaml) 系统使用声明式配置,同时定义了全局约束和特定的目标配置文件: servicenow: instance_url: "http://localhost:8081" username: "sentinel_svc" password: "securepassword123" remediation_defaults: max_retries: 3 cooldown_period: 30s circuit_breaker_threshold: 5 notifications: ntfy_topic: "sentinel-alerts-production-node" services: - name: "nginx-frontend" type: "systemd" target: "nginx" check_interval: 30s maintenance: true maintenance_until: "2026-07-16T14:00:00Z" - name: "inventory-api" type: "http" target: "http://localhost:8080/health" check_interval: 15s maintenance: false remediation_command: "echo 'Restarting microservice...' && systemctl restart inventory-api" ## 验证工作流 要在本地运行完整的端到端自动化修复验证,请使用三个独立的终端来跟踪生命周期状态转换: 1. 启动模拟 ITSM 服务器 启动本地模拟服务器,以在端口 `8081` 上模拟企业工单系统端点: go run cmd/mock-itsm/main.go 2. 运行受监控的应用程序和模拟工具 在端口 `8080` 上运行您的后端应用或模拟目标。通过您的测试工具切换其离线状态以注入故障: curl -X POST http://localhost:8080/toggle-chaos 3. 初始化 Sentinel 启动核心自动化控制器: go run cmd/sentinel/main.go ## 实时观察生命周期阶段: 1. 检测:sentinel 记录 inventory-api 的跟踪失败。 2. ITSM 通信:POST payload 被发送到模拟服务器。终端 1 记录明确的传入工单创建请求 (INC0001001)。 3. 修复和验证:令牌替换后的命令触发,经过稳定延迟后,闭环健康验证将评估服务状态。 4. 熔断驱动:如果应用程序保持停机状态,重试阈值将在 SQLite 内递增。一旦达到 max_retries,控制台将记录熔断器打开事件,向您的 ntfy.sh 流触发即时通知钩子,并安全地有效锁定未来的执行,直到检测到人工操作员介入。 5. 可观测性验证:通过 curl 立即检查实时遥测计数器: curl http://localhost:2112/metrics ## 许可证声明 sentinel - 轻量级运维工具平台 版权所有 (C) 2026 Kerochan 本程序为自由软件:您可以自由地对其进行再分发和/或修改 依据由自由软件基金会发布的 GNU 通用公共许可证条款, 无论是该许可证的第 3 版,还是(根据您的选择)任何更高版本。 分发本程序的目的是希望它有用, 但不提供任何保证;甚至没有适销性 或特定用途适用性的默示保证。有关更多详细信息,请参见 GNU 通用公共许可证。 您应该已经随本程序收到了一份 GNU 通用公共许可证的副本。 如果没有,请参见
标签:EVTX分析, ServiceNow, SRE, 事故响应, 偏差过滤, 日志审计, 状态监控, 用户代理, 自定义请求头, 自愈系统, 运维自动化