7步极速部署Oncall:从0到1构建企业级值班调度系统

7步极速部署Oncall:从0到1构建企业级值班调度系统

你是否还在为团队值班调度混乱而头疼?员工不清楚值班安排、紧急事件响应迟缓、手动调整流程繁琐?本文将通过7个清晰步骤,帮助你从零部署Oncall——LinkedIn开源的专业值班调度系统(Oncall),彻底解决值班管理痛点。读完本文后,你将能够:

  • 在本地或Docker环境中快速部署Oncall服务
  • 配置用户认证与权限管理
  • 集成LDAP实现企业用户同步
  • 对接Iris系统实现事件升级
  • 定制个性化值班规则与通知策略

1. 项目概述:为什么选择Oncall?

Oncall是LinkedIn开发的开源值班调度系统(Oncall),专为企业级运维团队设计,提供可视化的值班日历、灵活的排班规则和多渠道通知机制。其核心优势包括:

功能特性传统排班工具Oncall系统
可视化界面无或简陋交互式日历视图,支持日/周/月切换
排班规则固定轮换,修改困难支持轮询/多团队/无跳过匹配等多种算法
用户同步手动维护支持LDAP/Slack自动同步与认证
事件集成与Iris等事件管理系统深度集成
通知机制邮件提醒支持邮件/短信/Slack多渠道通知
权限管理细粒度团队权限控制,支持管理员/成员角色

mermaid

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支持多团队管理,每个团队可独立配置排班规则和成员:

  1. 创建团队:管理员登录后,通过"Teams" → "Create Team"创建新团队
  2. 添加成员:进入团队设置,通过"Manage Members"添加用户
  3. 分配角色:支持"admin"(管理员)和"member"(普通成员)两种角色

mermaid

6. 高级功能:从排班到事件升级

6.1 排班规则配置

Oncall支持多种排班算法,满足不同场景需求:

  1. 轮询调度(Round Robin):用户按顺序轮换值班,适用于小型团队

    scheduler:
      module: 'oncall.scheduler.round-robin'
      params:
        shift_length: 86400  # 值班时长(秒)
    
  2. 多团队调度(Multi-team):多个子团队按比例分担值班

    scheduler:
      module: 'oncall.scheduler.multi-team'
      params:
        teams: ['backend', 'frontend']
        ratio: [2, 1]  # backend团队值2天,frontend值1天
    
  3. 无跳过匹配调度(No-skip Matching):避免特定用户连续值班

    scheduler:
      module: 'oncall.scheduler.no-skip-matching'
      params:
        min_shift_gap: 172800  # 最小间隔(秒)
    

6.2 Iris事件集成

通过以下步骤实现Oncall与Iris系统集成:

  1. 在Iris中创建Oncall应用,定义"requester"和"description"变量
  2. 配置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
    
  3. 在Oncall中测试集成:进入团队页面,点击"Escalate"创建测试事件

6.3 通知系统配置

Oncall支持多渠道通知,确保值班人员及时收到提醒:

  1. 邮件通知:配置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'
    
  2. 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 性能监控

  1. 启用Prometheus指标:

    metrics:
      module: 'oncall.metrics.prometheus'
      port: 9090
    
  2. 关键监控指标:

    • 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提供了企业级值班管理所需的全部特性。未来可以进一步探索:

  1. 自定义调度算法:根据团队需求开发定制化排班模块
  2. 移动应用:开发移动端应用,方便值班人员随时查看
  3. AI辅助调度:基于历史数据预测值班负载,优化排班建议

立即行动,访问Oncall项目仓库获取最新代码,加入Gitter社区获取支持,开始构建你的企业级值班调度系统!

如果觉得本文有帮助,请点赞+收藏+关注,下期将带来《Oncall高级调度策略与最佳实践》!

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值