BananaOps/tracker-slack
GitHub: BananaOps/tracker-slack
Tracker的Slack集成,支持通过斜杠命令和交互式模态框直接在Slack中创建和管理部署、故障、配置漂移等事件。
Stars: 0 | Forks: 0
Tracker Slack
Tracker 的 Slack 集成
直接通过 Slack 创建和管理 Tracker 事件
## 🎯 什么是 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安全检测, 事件管理, 协同办公, 团队协作, 子域名突变, 安全编程, 开源项目, 攻击面发现, 日志审计, 消息通知, 程序破解, 请求拦截