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, 事故响应, 偏差过滤, 日志审计, 状态监控, 用户代理, 自定义请求头, 自愈系统, 运维自动化