Redmine SLA
Support四小时的 SLA 并不等于四小时。响应与解决按工作时间计算——你的日历、你的节假日、你的暂停规则——并提供预警、严重阈值与超时判定。
多台服务器: $399

- Redmine
- 4、5、6 和 7
- 目标
- 4 个独立计时器
- 数据库
- PostgreSQL、MySQL、MariaDB、SQLite
- 报表
- 4 份,支持 CSV 导出
- 额外 gem
- 无
- 修改的核心文件
- 无
Working hours, properly
Weekly schedules with split shifts, per-calendar time zones, fixed and recurring holidays and special working days. Wall-clock across DST, so 09:00–18:00 stays 09:00–18:00.
Four independent clocks
First response, acknowledgement, resolution and closure — each with its own target, state and pause behaviour. Configure only the ones you use.
Waiting on the customer
Per-status rules decide which clocks stop. “Waiting for customer” can freeze resolution while first response keeps running — because that one is still on you.
Conditions in plain words
Match on project, tracker, status, category, assignee, group, customer or any custom field — by real names, never record IDs.
Warning, critical, breach
Thresholds fire before the deadline, not after it. Mail goes through Redmine’s own mailer, and a unique-index claim means no alert is ever sent twice.
Compliance you can defend
Compliance by target, response and resolution distributions with median and outliers, and a breach table with due date, actual date and overrun.
团队下班,计时器也跟着停
直接拿两个时间戳相减,周末就成了你的罚时。Redmine SLA 沿着你的工作日历逐段计算,只统计营业时间内的分钟数,所以周五傍晚提交的四小时目标会在周一到期,而不是当天晚上。
| 问题提交时间 | 计入的工作时间 | 到期时间 | 自然时间 |
|---|---|---|---|
| 周二 09:30 | 4h,连续 | 周二 13:30 | 4 小时 |
| 周五 17:00 | 周五 1h,周一 3h | 周一 12:00 | 67 小时 |
| 周五 17:00,周一为节假日 | 周五 1h,周二 3h | 周二 12:00 | 91 小时 |
| 任意时间,24×7 日历 | 经过 4h | 四小时后 | 4 小时 |
日历支持分段班次、独立时区、一次性和周期性节假日,以及特殊工作日。
四个计时器,各有各的规则
只设置你真正承诺的目标。每个目标都按各自的事件开始、暂停和停止,所以「等待客户」可以冻结解决计时,而首次响应照常计时。
首次响应:有人回复了
作者以外的任何人发表第一条公开评论时停止。什么算作回复,可按策略设置。
确认:有人接手了
问题被指派时停止,或到达你选定的某个状态时停止。
解决:问题修好了
问题到达已关闭状态,或你选定的某个解决状态时停止。
关闭:工单办结了
为最终关闭单独设定的目标,适合先解决、稍后再与客户确认的团队。
看起来就是 Redmine,因为它就是
没有 iframe,没有独立应用,也不用再登录一次。这些都是插件在 Redmine 7.0 上的真实界面,展示的是一个演示项目,其中的问题覆盖了每一种 SLA 状态。
客服人员:每个问题上都有 SLA 面板
每个目标一行,显示其状态、剩余时间、目标已用比例和确切的到期时间。


团队负责人:队列按即将出问题的先后排序
按状态、健康度、策略或是否违约筛选,按到期时间排序,导出为 CSV。这些字段在 Redmine 自带的问题列表里同样可用作过滤器和列。
管理者:拿得出手给客户看的报表
达标率、响应时间、解决时间和违约,可按时间段、策略、跟踪和优先级筛选。每份报表都能导出为 CSV。


管理员:用大白话写策略
「当问题的优先级为 紧急、立刻 之一时。」条件使用选择器里的真实名称,而不是记录 ID。时长可以写成 30、4h 或 1d 4h。




运维:一个页面确认一切运转正常


服务台真正会争论的,都覆盖了
争议很少在于工单是否超时,而在于哪些小时算数、计时器本该何时停下,以及当时的目标是多少。
工作时间,算得明明白白
支持分段班次的每周排班、每个日历独立的时区、固定和周期性节假日,以及特殊工作日。夏令时切换前后,09:00 始终是 09:00。
等待客户
暂停规则按状态设置,可全局生效,也可按策略生效。只补回工作时间,所以跨周末的暂停不会多占一分钟。
预警、严重、违约
阈值在截止时间之前触发。每条通知只发送一次,通过 Redmine 自带的邮件系统发出,模板可按事件和语言编辑。
每个问题都匹配到合适的策略
可按项目及子项目、跟踪、优先级、状态、类别、作者、指派给、组或任意自定义属性匹配。多个策略同时匹配时,排序位置靠前的优先。
就在问题列表里
SLA 策略、状态、健康度、是否违约、到期时间和剩余时间都是 Redmine 问题列表里的过滤器和列:可排序、可分组、可导出。
修改不会改写历史
每个 SLA 都保留一份它开始时所用策略的快照。下个季度调整目标,上个季度的数字原样不动。重新计算是管理员有意执行的操作。
一个问题的经历
周五下午提交的一个严重缺陷,日历为周一至周五 09:00–18:00,首次响应目标 30 分钟,解决目标四小时。
| 时间 | 事件 | 插件的动作 |
|---|---|---|
| 周五 15:00 | 提交 | 第一个匹配的策略被应用,计时器随之启动。今天还剩三个工作小时,所以有一小时顺延到周一。 |
| 周五 15:20 | 首次回复 | 客服人员的一条公开评论让首次响应计时器停在 20 分钟,在 30 分钟目标之内。 |
| 周五 16:00 | 等待中 | 解决计时暂停。客户在周一回复后,到期时间恰好顺延所损失的工作时间。 |
| 周一 | 75% 预警 | 预警邮件发出时,还来得及采取行动。 |
| 周一 | 已解决 | 已用时间和目标是否达成都被记录下来,此后不再改变。 |
| 已用 | 健康度 |
|---|---|
| 低于 75% | 健康 |
| 75% | 有风险 |
| 90% | 严重 |
| 100% | 已违约 |
| 挂起 | 已暂停 |
| 目标达成 | 已完成 |
每个页面都有 JSON
只读 JSON API 覆盖页面上显示的全部内容。它使用普通的 Redmine API 密钥认证,权限与页面保持一致。
| 方法 | 端点 | 返回 |
|---|---|---|
| GET | /sla/issues/:id.json | 单个问题的 SLA |
| GET | /sla/issues.json | SLA 问题,可筛选 |
| GET | /projects/:id/sla/issues.json | 单个项目的 SLA 问题 |
| GET | /sla/timeline/:id.json | 单个问题的时间线 |
| GET | /sla/dashboard.json | 仪表板计数器和达标率 |
| GET | /sla/reports/:report.json | 四份报表中的任意一份 |
| GET | /sla/policies.json | 策略及其目标 |
| GET | /sla/calendars.json | 日历和工作时间 |
读取单个问题的 SLA
在 X-Redmine-API-Key 请求头中发送你的密钥。响应包含策略、日历、整体健康度,以及每个目标一条记录,带有其状态、到期时间和已用时间。可以用它把 SLA 倒计时放到大屏看板上,或者把达标率数据接入你自己的报表。
六项权限,按角色授予
SLA 是一个标准的 Redmine 项目模块。在需要衡量的项目上启用它,并只给每个角色所需的权限。Redmine 管理员始终拥有两项全局权限。
| 权限 | 范围 | 允许的操作 |
|---|---|---|
| view_sla | 项目 | 查看问题上的 SLA 面板、SLA 问题列表和时间线 |
| view_sla_dashboard | 项目 | 查看 SLA 仪表板 |
| view_sla_reports | 项目 | 查看并导出 SLA 报表 |
| manage_sla | 项目 | 编辑项目的 SLA 设置,并重新计算问题的 SLA |
| manage_sla_policies | 全局 | 创建和编辑策略与暂停规则 |
| manage_sla_calendars | 全局 | 创建和编辑日历与节假日 |
你的 Redmine 跑在哪里,它就跑在哪里
| 环境 | 状态 | 说明 |
|---|---|---|
| Redmine 7.x | 支持 | 已在 Redmine 7.0、Rails 8.1 和 Ruby 3.4.2 上测试。本页截图均来自 7.0。 |
| Redmine 6.x | 支持 | |
| Redmine 5.x | 支持 | 迁移后需要执行插件资源任务 |
| Redmine 4.x | 支持 | 4.0 是插件声明的最低版本 |
| 数据库 | 支持 | PostgreSQL、MySQL、MariaDB 和 SQLite,不含特定数据库的 SQL |
| 额外 gem | 无 | 不需要 Redis,也不需要 Sidekiq。一条 cron 任务或一个 systemd 定时器即可运行后台检查。 |
| Redmine 核心 | 未改动 | 不修改任何核心文件,Redmine 升级不受影响 |
三步完成安装
需要 shell 访问权限并能执行 rake 任务。安装插件前请务必备份。
cd /path/to/redmine # the package arrives by email, or from your download link unzip redmine_sla-1.0.0.zip -d plugins/
RAILS_ENV=production bundle exec rake redmine:plugins:migrate # Redmine 4 and 5 only (Redmine 6+ serves plugin assets directly) RAILS_ENV=production bundle exec rake redmine:plugins:assets touch tmp/restart.txt # or systemctl restart redmine
# every five minutes: evaluate timers that are due, safe to run repeatedly */5 * * * * cd /path/to/redmine && RAILS_ENV=production bundle exec rake redmine_sla:process >> log/sla.log 2>&1
# Administration → SLA → create the default business calendars, then follow the checklist # Administration → SLA → Policies → write one policy: targets, calendar, conditions # Project → Settings → Modules → tick SLA for each project you measure # Administration → Roles and permissions → grant the SLA permissions