7步极速部署Oncall:从0到1构建企业级值班调度系统
你是否还在为团队值班调度混乱而头疼?员工不清楚值班安排、紧急事件响应迟缓、手动调整流程繁琐?本文将通过7个清晰步骤,帮助你从零部署Oncall——LinkedIn开源的专业值班调度系统(Oncall),彻底解决值班管理痛点。读完本文后,你将能够:
- 在本地或Docker环境中快速部署Oncall服务
- 配置用户认证与权限管理
- 集成LDAP实现企业用户同步
- 对接Iris系统实现事件升级
- 定制个性化值班规则与通知策略
1. 项目概述:为什么选择Oncall?
Oncall是LinkedIn开发的开源值班调度系统(Oncall),专为企业级运维团队设计,提供可视化的值班日历、灵活的排班规则和多渠道通知机制。其核心优势包括:
| 功能特性 | 传统排班工具 | Oncall系统 |
|---|---|---|
| 可视化界面 | 无或简陋 | 交互式日历视图,支持日/周/月切换 |
| 排班规则 | 固定轮换,修改困难 | 支持轮询/多团队/无跳过匹配等多种算法 |
| 用户同步 | 手动维护 | 支持LDAP/Slack自动同步与认证 |
| 事件集成 | 无 | 与Iris等事件管理系统深度集成 |
| 通知机制 | 邮件提醒 | 支持邮件/短信/Slack多渠道通知 |
| 权限管理 | 无 | 细粒度团队权限控制,支持管理员/成员角色 |
2. 环境准备:软硬件要求与依赖项
2.1 系统要求
| 环境类型 | 操作系统 | 内存 | CPU | 存储 |
|---|---|---|---|---|
| 开发环境 | Ubuntu 20.04+/CentOS 7+ | ≥2GB | ≥2核 | ≥10GB |
| 生产环境 | Ubuntu 20.04+/CentOS 7+ | ≥4GB | ≥4核 | ≥20GB |
2.2 依赖组件
Oncall运行依赖以下组件:
- Python 3.6+
- MySQL 5.7+
- Docker & Docker Compose (可选)
- LDAP服务器 (可选,用于用户同步)
- Iris系统 (可选,用于事件升级)
3. 部署方案:两种部署模式对比与选择
Oncall提供两种部署模式,可根据实际需求选择:
3.1 本地部署:适合开发与定制
3.1.1 安装系统依赖
Ubuntu/Debian:
sudo apt-get update && sudo apt-get install -y \
libsasl2-dev python3-dev libldap2-dev libssl-dev \
python3-pip python3-setuptools mysql-server mysql-client
CentOS/RHEL:
sudo yum install -y openldap-devel python3-devel mysql-devel \
openssl-devel python3-pip mysql-server
3.1.2 获取源码
git clone https://gitcode.com/gh_mirrors/on/oncall.git
cd oncall
3.1.3 安装Python依赖
python3 setup.py develop
pip3 install -e '.[dev]'
3.1.4 初始化数据库
# 启动MySQL服务
sudo systemctl start mysql
sudo systemctl enable mysql
# 初始化数据库 schema
mysql -u root -p < ./db/schema.v0.sql
# 可选:导入测试数据
mysql -u root -p -o oncall < ./db/dummy_data.sql
3.2 Docker部署:适合生产环境
3.2.1 安装Docker与Docker Compose
# 安装Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
# 安装Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.12.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
3.2.2 启动服务
# 使用Makefile简化命令
make compose
# 或直接使用docker-compose
docker-compose up --build -d
Docker Compose会自动创建两个服务:
- oncall-web: Oncall主应用,映射端口8080
- oncall-mysql: MySQL数据库,使用默认密码1234(生产环境需修改)
4. 基础配置:从启动到访问
4.1 配置文件详解
Oncall使用YAML格式配置文件,位于configs/config.yaml(本地部署)或configs/config.docker.yaml(Docker部署)。核心配置项说明:
# 服务器配置
server:
host: 0.0.0.0 # 监听地址
port: 8080 # 端口号
# 数据库连接
db:
conn:
kwargs:
user: root # 数据库用户名
password: '1234' # 数据库密码(生产环境必须修改)
host: oncall-mysql # 数据库地址
database: oncall # 数据库名
# 认证配置
auth:
debug: False
module: 'oncall.auth.modules.debug' # 默认调试模式,无需密码
# 通知设置
notifications:
default_roles: ["primary", "secondary"] # 默认通知角色
default_times: [86400, 604800] # 提前通知时间(秒)
default_modes: ["email"] # 默认通知方式
4.2 启动服务
本地部署启动:
# 方式1:使用make命令
make serve
# 方式2:直接运行
oncall-dev ./configs/config.yaml
Docker部署启动:
# 查看服务状态
docker-compose ps
# 查看日志
docker-compose logs -f oncall-web
4.3 访问系统
服务启动后,通过浏览器访问:http://服务器IP:8080
默认测试用户:
- 用户名:jdoe
- 密码:任意(调试模式下不验证密码)
首次登录后,系统显示默认"Test Team"的值班日历,包含示例值班事件。
5. 用户管理:认证与同步机制
5.1 LDAP认证配置
生产环境中建议使用LDAP认证替代调试模式。修改配置文件:
auth:
debug: False
module: 'oncall.auth.modules.ldap_import' # LDAP认证模块
ldap_url: 'ldaps://ldapserver.org' # LDAP服务器地址
ldap_cert_path: '/etc/ldap_cert.pem' # 证书路径(可选)
ldap_bind_user: 'cn=oncall,ou=serviceaccount,dc=company,dc=org' # 绑定用户
ldap_bind_password: 'xxxx' # 绑定密码
ldap_base_dn: 'ou=accounts,dc=company,dc=org' # 用户搜索基准DN
ldap_search_filter: '(uid=%s)' # 搜索过滤器
import_user: True # 自动导入新用户
attrs:
username: 'uid' # LDAP属性映射到Oncall用户名
full_name: 'cn' # 全名
email: 'mail' # 邮箱
call: 'telephoneNumber' # 电话
sms: 'mobile' # 手机号
slack: 'uid' # Slack用户名
5.2 用户同步服务
配置完成后,启动用户同步服务:
# 本地部署
./oncall-user-sync /path/to/config.yaml
# Docker部署
docker exec -it oncall_oncall-web_1 ./oncall-user-sync /home/oncall/config/config.yaml
同步服务会定期(默认间隔360秒)从LDAP拉取用户信息并更新到Oncall数据库。
5.3 团队与权限管理
Oncall支持多团队管理,每个团队可独立配置排班规则和成员:
- 创建团队:管理员登录后,通过"Teams" → "Create Team"创建新团队
- 添加成员:进入团队设置,通过"Manage Members"添加用户
- 分配角色:支持"admin"(管理员)和"member"(普通成员)两种角色
6. 高级功能:从排班到事件升级
6.1 排班规则配置
Oncall支持多种排班算法,满足不同场景需求:
-
轮询调度(Round Robin):用户按顺序轮换值班,适用于小型团队
scheduler: module: 'oncall.scheduler.round-robin' params: shift_length: 86400 # 值班时长(秒) -
多团队调度(Multi-team):多个子团队按比例分担值班
scheduler: module: 'oncall.scheduler.multi-team' params: teams: ['backend', 'frontend'] ratio: [2, 1] # backend团队值2天,frontend值1天 -
无跳过匹配调度(No-skip Matching):避免特定用户连续值班
scheduler: module: 'oncall.scheduler.no-skip-matching' params: min_shift_gap: 172800 # 最小间隔(秒)
6.2 Iris事件集成
通过以下步骤实现Oncall与Iris系统集成:
- 在Iris中创建Oncall应用,定义"requester"和"description"变量
- 配置Oncall的Iris集成参数:
iris_plan_integration: iris_host: 'http://iris-server' iris_api_key: 'your-api-key' application: 'oncall' dynamic_plan: 'Oncall test' target_mapping: primary: 0 secondary: 1 manager: 2 - 在Oncall中测试集成:进入团队页面,点击"Escalate"创建测试事件
6.3 通知系统配置
Oncall支持多渠道通知,确保值班人员及时收到提醒:
-
邮件通知:配置SMTP服务器
notifier: skipsend: False # 生产环境设为False email: smtp_host: 'smtp.example.com' smtp_port: 587 smtp_use_tls: True smtp_username: 'oncall@example.com' smtp_password: 'your-password' -
Slack通知:配置Slack API令牌
messengers: - type: 'rocketchat_messenger' application: 'oncall' api_url: 'https://slack.com/api' token: 'xoxb-your-slack-token'
7. 运维与监控:确保系统稳定运行
7.1 数据备份
定期备份MySQL数据库,防止数据丢失:
# 创建备份脚本 backup.sh
#!/bin/bash
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/var/backups/oncall"
mkdir -p $BACKUP_DIR
# Docker环境备份
docker exec oncall_oncall-mysql_1 mysqldump -u root -p1234 oncall > $BACKUP_DIR/oncall_$TIMESTAMP.sql
# 保留最近30天备份
find $BACKUP_DIR -name "oncall_*.sql" -mtime +30 -delete
7.2 性能监控
-
启用Prometheus指标:
metrics: module: 'oncall.metrics.prometheus' port: 9090 -
关键监控指标:
oncall_events_created_total: 创建的事件总数oncall_notifications_sent_total: 发送的通知总数oncall_api_requests_total: API请求总数,按端点和状态码拆分
7.3 常见问题排查
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 无法访问Web界面 | 服务未启动 | 检查oncall-web服务状态,查看日志 |
| 登录失败 | LDAP配置错误 | 检查LDAP连接参数,查看认证日志 |
| 排班不生效 | 调度器配置错误 | 检查排班规则,验证用户是否已添加到团队 |
| 通知未发送 | 邮件/Slack配置错误 | 检查通知配置,测试SMTP连接 |
总结与展望
通过本文7个步骤,你已成功部署并配置了Oncall值班调度系统。从环境准备到高级功能,Oncall提供了企业级值班管理所需的全部特性。未来可以进一步探索:
- 自定义调度算法:根据团队需求开发定制化排班模块
- 移动应用:开发移动端应用,方便值班人员随时查看
- AI辅助调度:基于历史数据预测值班负载,优化排班建议
立即行动,访问Oncall项目仓库获取最新代码,加入Gitter社区获取支持,开始构建你的企业级值班调度系统!
如果觉得本文有帮助,请点赞+收藏+关注,下期将带来《Oncall高级调度策略与最佳实践》!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



