BananaOps/tracker-slack

GitHub: BananaOps/tracker-slack

Tracker的Slack集成,支持通过斜杠命令和交互式模态框直接在Slack中创建和管理部署、故障、配置漂移等事件。

Stars: 0 | Forks: 0

Slack Integration

Tracker Slack

Tracker 的 Slack 集成
直接通过 Slack 创建和管理 Tracker 事件

CI Status Latest Release License Go Report Card Known Vulnerabilities

Go Slack API Docker Kubernetes Helm

## 🎯 什么是 Tracker Slack? **Tracker Slack** 是一个 Slack 集成,它将您的团队沟通平台与事件跟踪系统 [Tracker](https://github.com/BananaOps/tracker) 连接起来。它允许团队直接从 Slack 使用斜杠命令和交互式模态框来创建、修改和管理部署事件、事故、配置漂移和 RPA 使用情况。 ### 为什么选择 Tracker Slack? - **🚀 原生 Slack 集成** - 无需离开 Slack 即可创建事件 - **📝 交互式模态框** - 用于创建详细事件的丰富表单 - **🔄 实时更新** - 使用交互式按钮修改和更新事件 - **📅 每日摘要** - 通过 cron 自动生成每日事件摘要 - **🎯 多事件支持** - 管理部署、事故、漂移和 RPA 使用情况 - **🔗 无缝工作流** - 直接与 Tracker API 集成 - **⚡ 快速操作** - 使用 emoji 反应和跟帖回复更新状态 ### 使用场景 - **部署通知** - 通过审批工作流发布部署公告 - **事故报告** - 快速创建事故并进行状态跟踪 - **配置漂移警报** - 报告并跟踪基础设施变更 - **RPA 使用日志** - 记录自动化执行情况 - **团队协调** - 利益相关者通知和状态更新 - **每日站会支持** - 自动生成计划事件摘要 ## ✨ 功能特性 ### 🎯 Slack 命令 - **`/deployment`** - 通过审批工作流创建部署事件 - **`/incident`** - 报告并跟踪具有优先级的事故 - **`/drift`** - 记录配置漂移检测 - **`/rpa_usage`** - 记录机器人流程自动化执行情况 ### 📝 交互式模态框 - **丰富表单**:包含所有元数据的完整事件创建功能 - **项目选择**:从 Tracker 目录动态获取的下拉菜单 - **环境支持**:PROD, PREP, UAT, DEV 环境 - **利益相关者管理**:多用户选择以便进行通知 - **链接集成**:支持 ticket 和 pull request 链接 - **日期/时间选择器**:支持时区的精确调度 ### 🔄 事件管理 - **编辑事件**:通过交互式按钮修改现有事件 - **状态更新**:使用下拉菜单快速更改状态 - **审批工作流**:通过反应批准/拒绝部署 - **跟帖回复**:在消息跟帖中自动更新状态 - **Emoji 反应**:消息上的可视化状态指示器 ### 📅 自动化报告 - **每日摘要**:当日事件的定时报告 - **按环境分组**:按环境和项目组织事件 - **直接链接**:快速访问原始 Slack 消息 - **时区支持**:可配置的时间显示时区 - **Cron 调度**:使用 cron 表达式进行灵活调度 ### 🔗 Tracker 集成 - **REST API**:与 Tracker 后端直接通信 - **事件同步**:Slack 和 Tracker 之间的实时同步 - **元数据映射**:平台间完整的字段映射 - **状态跟踪**:双向状态更新 - **链接保留**:维持与外部资源的连接 ## 🚀 快速开始 ### 前置条件 1. **Tracker 实例**:您需要一个正在运行的 [Tracker](https://github.com/BananaOps/tracker) 实例 2. **Slack 应用**:创建一个具有所需权限的 Slack 应用 3. **环境变量**:配置所需的环境变量 ### Slack 应用配置 1. 在 [api.slack.com](https://api.slack.com/apps) 上**创建一个 Slack 应用** 2. 使用以下 scope **配置 OAuth & Permissions**: chat:write commands reactions:write users:read 3. **添加斜杠命令**: - `/deployment` - 请求 URL:`https://your-domain.com/slack/command` - `/incident` - 请求 URL:`https://your-domain.com/slack/command` - `/drift` - 请求 URL:`https://your-domain.com/slack/command` - `/rpa_usage` - 请求 URL:`https://your-domain.com/slack/command` 4. **启用交互功能**: - 请求 URL:`https://your-domain.com/slack/interactive_api_endpoint` 5. **获取您的 tokens**: - Bot User OAuth Token (以 `xoxb-` 开头) - Signing Secret ### 使用 Docker (推荐) ``` # 下载镜像 docker pull bananaops/tracker-slack:latest # 使用环境变量运行 docker run -d \ -p 8080:8080 \ -e SLACK_BOT_TOKEN="xoxb-votre-bot-token" \ -e SLACK_SIGNING_SECRET="votre-signing-secret" \ -e TRACKER_HOST="http://votre-instance-tracker:8080" \ -e TRACKER_DEPLOYMENT_CHANNEL="deployments" \ -e TRACKER_INCIDENT_CHANNEL="incidents" \ -e TRACKER_DRIFT_CHANNEL="drift-alerts" \ -e TRACKER_SLACK_WORKSPACE="votre-workspace" \ -e TRACKER_TIMEZONE="Europe/Paris" \ -e TRACKER_SLACK_CRON_MESSAGE="0 8 * * *" \ bananaops/tracker-slack:latest ``` ### 使用 Kubernetes 和 Helm ``` # 添加 Helm 仓库(如可用) helm repo add bananaops https://bananaops.github.io/helm-charts # 使用自定义 values 安装 helm install tracker-slack bananaops/tracker-slack \ --set secret.slack.bot_token="xoxb-votre-bot-token" \ --set secret.slack.signing_secret="votre-signing-secret" \ --set env.tracker.host="http://tracker.tracker.svc.cluster.local:8080" \ --set ingress.hosts[0].host="tracker-slack.votredomaine.com" ``` ### 从源码运行 ``` # 克隆仓库 git clone https://github.com/BananaOps/tracker-slack.git cd tracker-slack # 设置环境变量 export SLACK_BOT_TOKEN="xoxb-votre-bot-token" export SLACK_SIGNING_SECRET="votre-signing-secret" export TRACKER_HOST="http://localhost:8080" export TRACKER_DEPLOYMENT_CHANNEL="deployments" export TRACKER_INCIDENT_CHANNEL="incidents" export TRACKER_DRIFT_CHANNEL="drift-alerts" export TRACKER_SLACK_WORKSPACE="votre-workspace" export TRACKER_TIMEZONE="Europe/Paris" export TRACKER_SLACK_CRON_MESSAGE="0 8 * * *" # 运行应用程序 go run main.go ``` ## 📖 配置 ### 环境变量 | 变量 | 描述 | 默认值 | 必需 | |----------|-------------|---------|----------| | `SLACK_BOT_TOKEN` | Slack Bot User OAuth Token | - | ✅ | | `SLACK_SIGNING_SECRET` | Slack App 签名密钥 | - | ✅ | | `TRACKER_HOST` | Tracker API 基础 URL | - | ✅ | | `TRACKER_DEPLOYMENT_CHANNEL` | 部署专用的 Slack 频道 | `deployments` | ✅ | | `TRACKER_INCIDENT_CHANNEL` | 事故专用的 Slack 频道 | `incidents` | ✅ | | `TRACKER_DRIFT_CHANNEL` | 漂移警报专用的 Slack 频道 | `drift-alerts` | ✅ | | `TRACKER_SLACK_WORKSPACE` | Slack workspace 名称 | - | ✅ | | `TRACKER_TIMEZONE` | 日期显示的时区 | `UTC` | ❌ | | `TRACKER_SLACK_CRON_MESSAGE` | 每日摘要的 cron 调度 | `0 8 * * *` | ❌ | ### Slack 频道配置 为不同类型的事件创建专用频道: ``` # 推荐的频道结构 #deployments - Annonces de déploiement et approbations #incidents - Rapports d'incidents et suivi #drift-alerts - Notifications de dérive de configuration #general - Résumés quotidiens (optionnel) ``` ### Cron 调度示例 ``` # 每天 8 点 TRACKER_SLACK_CRON_MESSAGE="0 8 * * *" # 工作日 9 点 TRACKER_SLACK_CRON_MESSAGE="0 9 * * 1-5" # 工作时间每 2 小时 TRACKER_SLACK_CRON_MESSAGE="0 9-17/2 * * 1-5" ``` ## 🏗️ 架构 ``` ┌─────────────────────────────────────────────────────────────┐ │ Workspace Slack │ │ /deployment /incident │ │ /drift /rpa_usage │ └────────────────────────┬────────────────────────────────────┘ │ Commandes Slash & Interactions │ ┌────────▼────────┐ │ Tracker Slack │ │ (Service Go) │ │ │ │ ┌─────────────┐ │ │ │ Gestionnaire│ │ │ │ API Slack │ │ │ └─────────────┘ │ │ ┌─────────────┐ │ │ │ Générateur │ │ │ │ de Modales │ │ │ └─────────────┘ │ │ ┌─────────────┐ │ │ │ Planificateur│ │ │ │ Cron │ │ │ └─────────────┘ │ └────────┬────────┘ │ Appels API REST │ ┌────────▼────────┐ │ API Tracker │ │ (Service Principal) │ │ │ │ ┌─────────────┐ │ │ │ API Event │ │ │ └─────────────┘ │ │ ┌─────────────┐ │ │ │ API Catalog │ │ │ └─────────────┘ │ └────────┬────────┘ │ ┌────────▼────────┐ │ Base de │ │ Données │ │ (MongoDB) │ └─────────────────┘ ``` ### 组件流程 1. **Slack 命令** → 用户在 Slack 中输入 `/deployment` 2. **Slack API** → 向 Tracker Slack 服务发送 webhook 3. **模态框生成** → 根据事件类型创建交互式表单 4. **用户输入** → 用户填写并提交表单 5. **API 集成** → Tracker Slack 调用 Tracker API 6. **事件创建** → 事件存储在 Tracker 数据库中 7. **Slack 响应** → 格式化的消息发布到相应频道 8. **交互式更新** → 用户可以通过按钮编辑/更新 9. **每日摘要** → cron 作业获取并发布每日事件 ## 🎯 使用示例 ### 1. 创建部署事件 **在 Slack 中:** ``` /deployment ``` 这将打开一个交互式模态框,您可以在其中填写: - **摘要**:"将 user-service v2.1.0 部署到生产环境" - **项目**:从下拉菜单中选择(从 Tracker 目录获取) - **环境**:PROD, PREP, UAT, 或 DEV - **影响**:是/否 - **开始日期**:日期/时间选择器 - **利益相关者**:多用户选择器 - **Ticket**:Jira/GitHub ticket 链接 - **Pull Request**:GitHub PR 链接 - **描述**:详细的部署说明 **结果**:一条格式化的消息被发布到部署频道,并带有用于审批、编辑和状态更新的交互式按钮。 ### 2. 报告事故 **在 Slack 中:** ``` /incident ``` **模态框包含:** - **摘要**:"API Gateway 返回 500 错误" - **项目**:"api-gateway" - **环境**:PROD - **优先级**:P1, P2, P3, 或 P4 - **利益相关者**:值班团队成员 - **Ticket**:事故管理系统链接 - **描述**:事故详细描述 **结果**:发布到事故频道,并带有关闭按钮和自动状态跟踪。 ### 3. 配置漂移警报 **在 Slack 中:** ``` /drift ``` **使用场景**:基础设施团队在生产环境中检测到手动更改 - **摘要**:"检测到安全组的手动更改" - **项目**:"infrastructure" - **环境**:PROD - **描述**:漂移详情 ### 4. RPA 使用日志 **在 Slack 中:** ``` /rpa_usage ``` **使用场景**:记录自动化执行情况 - **摘要**:"发票处理批次已完成" - **环境**:PROD - **开始日期**:执行时间 - **描述**:"处理了 150 张发票,2 张失败需要人工审核" ### 5. 交互式事件管理 创建事件后,团队成员可以使用按钮和下拉菜单与其进行交互。 **可用操作:** **编辑事件**:点击 "✏️ 修改" 按钮 **批准部署**:点击 "✅ 批准" 以批准部署 **更新状态**:使用下拉菜单更改状态: - 🔄 进行中 - ⏸️ 暂停 - ❌ 取消 - ⏳ 推迟 - ✅ 完成 **状态更新**:自动跟帖回复和 emoji 反应显示当前状态。 ### 6. 每日事件摘要 **在 8:00 自动运行**(可配置): ``` 📅 Événements Tracker d'Aujourd'hui : 🏭 PROD user-service: - 09:00 CET - Déployer user-service v2.1.0 en production [fil] - 14:30 CET - Déploiement hotfix pour bug critique [fil] 🧪 UAT payment-service: - 10:00 CET - Déployer payment-service v1.5.0 pour test [fil] ``` ### 7. 事件链接 事件会自动链接到 Tracker: - **Slack 消息 ID** 存储在 Tracker 中 - **直接链接** 位于每日摘要中 - 平台之间的**双向同步** ## 🛠️ 技术栈 ### 后端 - **语言**:Go 1.22.7+ - **Slack 集成**:[slack-go/slack](https://github.com/slack-go/slack) v0.16.0 - **调度**:[robfig/cron](https://github.com/robfig/cron) v3.0.1 - **HTTP 服务器**:Go 标准库 - **API 集成**:Tracker API 的 REST 客户端 ### Slack 功能 - **斜杠命令**:`/deployment`, `/incident`, `/drift`, `/rpa_usage` - **交互组件**:模态框、按钮、下拉菜单、日期选择器 - **Block Kit**:使用 Slack Block Kit 进行富消息格式化 - **Webhooks**:签名验证和 payload 解析 - **实时更新**:消息编辑和跟帖回复 ### DevOps 与部署 - **容器化**:多阶段构建的 Docker - **编排**:Kubernetes 部署 - **Helm Chart**:包含生产就绪的 Helm Chart - **配置**:环境变量和 Kubernetes secrets - **监控**:用于可观测性的结构化日志 ### 集成架构 - **Tracker API**:与主 Tracker 服务的 RESTful 集成 - **事件映射**:Slack 和 Tracker 之间的完整字段映射 - **时区支持**:可配置的时区处理 - **Cron 调度**:使用 cron 表达式进行灵活调度 ## 📊 项目状态 - ✅ **Slack 命令**:生产就绪 - 4 个斜杠命令已实现 - ✅ **交互式模态框**:生产就绪 - 用于事件创建的丰富表单 - ✅ **事件管理**:生产就绪 - 创建、编辑、更新事件 - ✅ **每日摘要**:生产就绪 - 基于 cron 的自动化报告 - ✅ **Docker**:生产就绪 - 多阶段 Docker 构建 - ✅ **Kubernetes**:生产就绪 - 支持 ingress 的 Helm Chart - ✅ **Tracker 集成**:生产就绪 - 完整的 API 集成 - 🚧 **Webhook 验证**:计划中的高级安全功能 - 🚧 **高级工作流**:计划中的多步骤审批流程 ## 🤝 贡献 我们欢迎通过贡献来改进 Tracker Slack!以下是您可以提供帮助的方式: 1. **🐛 报告 Bug**:[提出 issue](https://github.com/BananaOps/tracker-slack/issues) 2. **💡 建议功能**:[发起讨论](https://github.com/BananaOps/tracker-slack/discussions) 3. **📝 改进文档**:提交文档改进 4. **🔧 提交 PR**:修复 bug 或添加功能 ### 开发环境配置 ``` # 克隆仓库 git clone https://github.com/BananaOps/tracker-slack.git cd tracker-slack # 安装依赖 go mod download # 配置环境变量(见 Configuration 章节) cp .env.example .env # 使用您的值编辑 .env # 本地运行 go run main.go # 运行测试 go test ./... # 格式化代码 make fmt # 对代码进行 Lint make lint ``` ### 适合新手的 Issues - 添加对更多 Slack 交互组件的支持 - 改进错误处理和用户反馈 - 为模态框生成添加单元测试 - 改进每日摘要的格式化 - 添加对自定义 emoji 反应的支持 ## 🔗 相关项目 - **[Tracker](https://github.com/BananaOps/tracker)** - 核心事件跟踪平台 - **[Tracker GitHub Action]()** - GitHub Actions 集成 - **[Tracker CLI](https://github.com/BananaOps/tracker-cli)** - 命令行界面 ## 💬 社区与支持 - **GitHub Issues**:[报告 bug 或请求功能](https://github.com/BananaOps/tracker-slack/issues) - **GitHub Discussions**:[提问和分享想法](https://github.com/BananaOps/tracker-slack/discussions) - **主项目**:[Tracker 文档](https://github.com/BananaOps/tracker) ## 🔒 安全 如果您发现安全漏洞,请发送电子邮件至 security@bananaops.org。所有安全漏洞都将得到及时处理。

BananaOps 社区用 ❤️ 打造

⭐ 在 GitHub 上给我们一颗星🐛 报告 Bug💬 加入讨论

标签:BananaOps, DevOps工具, DNS解析, Docker容器, EVTX分析, EVTX分析, Golang, Go语言, Helm Chart, Slack API, Slack集成, Snyk安全检测, 事件管理, 协同办公, 团队协作, 子域名突变, 安全编程, 开源项目, 攻击面发现, 日志审计, 消息通知, 程序破解, 请求拦截