19.12.5 服务台与工单体系设计
服务台与工单体系是运维流程的统一入口与执行载体,目标是实现“统一受理、标准流转、可视进度、闭环评估”。设计需兼顾用户体验与运维效率,通过规范化的分类、SLA、知识沉淀与自动化能力,形成稳定可扩展的交付模式。以下给出架构草图、部署示例、流程状态机、接口示例、排错与练习。
工单类型建议按服务请求、事件、问题、变更、访问权限、资产申请等维度分类,并为每类定义必填字段、审批路径与处理时限。状态机建议:已提交、待受理、处理中、待用户确认、已解决、已关闭、已撤销;结合角色设置受理人、处理人、协作人、审批人、升级责任人,并在SLA超时或卡点时自动升级与通知。
下面以开源工单系统 Zammad 为例(可替换为 osTicket、GLPI 等)给出可执行安装与入口对接示例,便于快速验证流程与自动化能力。
安装示例(Docker 方式)
# 1) 准备目录
mkdir -p /opt/zammad && cd /opt/zammad
# 2) 创建 docker-compose.yml
cat > /opt/zammad/docker-compose.yml <<'EOF'
version: '3'
services:
zammad:
image: zammad/zammad:latest
container_name: zammad
ports:
- "8080:8080"
environment:
- TZ=Asia/Shanghai
- ZAMMAD_SESSION_STORE=filesystem
volumes:
- zammad-data:/opt/zammad
- zammad-postgresql:/var/lib/postgresql
- zammad-redis:/var/lib/redis
volumes:
zammad-data:
zammad-postgresql:
zammad-redis:
EOF
# 3) 启动并查看状态
docker compose -f /opt/zammad/docker-compose.yml up -d
docker ps | grep zammad
# 预期:容器运行中,访问 http://<server_ip>:8080 完成初始化向导
入口对接示例(API 创建工单)
# 1) 创建 API Token(在系统后台创建后替换)
TOKEN="replace_with_api_token"
BASE="http://127.0.0.1:8080/api/v1"
# 2) 创建用户(若不存在)
curl -s -X POST "$BASE/users" \
-H "Authorization: Token token=$TOKEN" \
-H "Content-Type: application/json" \
-d '{
"firstname": "Ops",
"lastname": "User",
"email": "ops.user@example.com",
"active": true
}'
# 3) 创建工单(事件类:服务不可用)
curl -s -X POST "$BASE/tickets" \
-H "Authorization: Token token=$TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "生产Nginx 502",
"group": "运维一线",
"customer_id": "ops.user@example.com",
"article": {
"subject": "页面502",
"body": "xx系统访问出现502,开始时间 10:05,影响区域:华北",
"type": "note"
},
"priority": "2 high",
"state": "new"
}'
# 预期:返回 ticket_id,可用于后续状态更新与关联变更
SLA 与状态流转示例(概念配置)
# /opt/itsm/sla.yaml
priorities:
- name: P1
response: 10m
resolve: 2h
- name: P2
response: 30m
resolve: 4h
- name: P3
response: 2h
resolve: 24h
states:
- new
- open
- pending_customer
- pending_internal
- solved
- closed
escalation:
- if: "response_overdue"
action: "notify_oncall"
- if: "resolve_overdue"
action: "auto_escalate_to_manager"
自动化与标准化示例(脚本回填工单)
# /opt/itsm/auto_fix_nginx_502.sh
#!/usr/bin/env bash
# 目的:检测Nginx状态并重启,结果回填工单
TICKET_ID="$1"
TOKEN="replace_with_api_token"
BASE="http://127.0.0.1:8080/api/v1"
systemctl is-active nginx
if [ $? -ne 0 ]; then
systemctl restart nginx
RESULT="nginx已重启"
else
RESULT="nginx运行正常,无需重启"
fi
curl -s -X POST "$BASE/ticket_articles" \
-H "Authorization: Token token=$TOKEN" \
-H "Content-Type: application/json" \
-d "{
\"ticket_id\": $TICKET_ID,
\"subject\": \"自动化处理结果\",
\"body\": \"$RESULT\",
\"type\": \"note\"
}"
# 用法:/opt/itsm/auto_fix_nginx_502.sh 123
排错与诊断(示例命令与说明)
# 1) 端口未监听
ss -lntp | grep 8080
# 预期:zammad 监听 8080
# 2) 容器健康检查
docker logs -f zammad | tail -n 50
# 预期:无连续错误,初始化完成
# 3) API 401/403
# 检查 Token 是否有效,确认 API 权限
curl -I -H "Authorization: Token token=$TOKEN" "$BASE/users"
# 预期:HTTP/1.1 200 OK
# 4) 邮件入口不收信
# 检查邮件拉取配置与端口连通
nc -vz imap.example.com 993
# 预期:succeeded
度量与报表示例(从工单导出到度量)
# 导出工单列表(示意),再用脚本计算平均响应/解决时间
curl -s -H "Authorization: Token token=$TOKEN" \
"$BASE/tickets?per_page=50" > /tmp/tickets.json
# 使用 jq 统计(需要 jq)
jq '[.[] | .created_at] | length' /tmp/tickets.json
# 预期:返回工单数量
练习
- 使用上述 Docker 安装一套工单系统,并创建“服务请求/事件/变更”三类模板,分别设置必填字段与审批人。
- 通过 API 创建一张“事件类”工单,并模拟状态流转(new → open → solved → closed),记录每一步的回填内容。
- 编写一个自动化脚本:检测磁盘使用率超过 80% 时自动创建工单并回填清理结果。
- 配置一条 SLA:P1 响应 10 分钟、解决 2 小时,并触发超时升级通知,验证通知是否生效。
通过以上设计与实践,服务台与工单体系可与监控、CMDB、发布系统、权限系统形成闭环:告警自动建单、变更自动关联影响、资产信息辅助处理、自动化回填结果,最终形成可度量、可审计、可持续改进的运维交付体系。