运维平台的建设是一个很大的工程,分为很多部分如cmdb、发布系统、监控系统、成本管理、工单系统、任务调度、配置管理、堡垒机、日志平台等等。在进行运维平台体系化建设时,建议的做法是将涉及到的不同系统的前端整合起来一体化呈现,而平台的后端调用各个系统接口来完成相应的底层功能,研发人员只需要登录一个平台就能够完成所有的需求。下图是一个运维平台的发体系架构

image.png

        工单系统作为提供标准服务支持的工具,可以出现在各种场景中,如服务器的申请、发布权限申请、告警处理、运维服务申请(环境部署、问题解答等等)。当然我们比较常见的请假申请、报销申请也属于工单。本文将介绍如何建设一套完善的工单系统,用以支持各个系统中的工单服务。

      首先介绍一些工单相关的一些术语

        工单:具体的待处理事项,用户新建的是工单,工单按照工作流的设计来实现不同状态不同处理人之间的流转

        工作流:即工作流的设计,定义了工单的审批链、各状态的处理人、各状态可以执行的操作(提交、保存,处理完成,退回,关闭等等)、每个状态下显示哪些字段、哪些字段可以在哪些编辑

        子工单:主要用于工单流转存在子集的情况,如在项目开发周期中存在项目周期和应用周期两个层级, 当项目处于开发中时,项目的多个涉及应用在项目开发中可能正处于不同的阶段(代码编写、静态扫描、单元测试、完成开发等状态)。当应用状态都完成开发时将触发项目的状态到提测中。在这个场景中应用的工单即为项目工单的子工单。 应用工单的父状态即为项目的“开发中”

        子工作流:工作流的父子层级不体现在工作流记录中,而体现在状态记录中。在配置工作流时,可以给某个工作流的某个状态设置一个子工作流。可以在工作流的不同状态设置不同的子工作流。

        流程图:为了方便用户了解工作流的流转规则,可以通过流程图的方式展示给用户,如下图是一个服务器登录权限申请的流程图,用户新建工单时填写服务器ip地址,点击“提交”按钮完成工单的申请,或者点击“保存”进入编辑中状态(可以理解为草稿),编辑中的工单可以继续修改然后再提交。途中圆角方框代表的是不同的状态,线条表明了每个状态可以执行的操作。在工作流配置时将“赋权脚本-自动执行中”状态的参与人类型设置为脚本,参与人设置为脚本的名称。当leader审批后,工单状态变为“赋权脚本-自动执行中”。后台自动开始执行赋权的一系列操作。赋权完成后工单状态变为“发起人-验证中”,发起人在工单处理界面中通过点击“关闭”或者“验证不通过”来确认工单的处理结果。

image.png

        转交:正常情况下工单的流转都是按照其对应工作流设定的规则来流转(状态、处理人类型、处理人等).在实际操作中,比如A提交了个工单,到达运维处理中状态,B接单处理,B在处理过程中发现自己其实处理不了,需要C才能处理。于是将工单转交给C。

        加签:加签与转交不同。正常情况下工单的流转都是按照其对应工作流设定的规则来流转(状态、处理人类型、处理人等).在实际操作中,比如A提交了个工单,到达运维处理中状态,B接单处理,B在处理过程中发现需要C做些操作或者提供些信息,才能处理,于是将工单加签给C.C处理完成后工单处理人会回到B.于是B可以继续处理。

        工单自定义字段与工作流自定义字段的区别: workflow里面自定义字段规定工作流有哪些自定义的字段。比如配置一个请假的工作流。 需要有请假天数这个字段。工单里面的自定义字段 存的是自定义字段具体的值。 比如现在用于新建了一个请假工单,填写了请假天数。那么工单的自定义字段表中会保存这个值。

        工作流处理过程可以理解为工单状态的变化,如一个工作流处理过程中可以有:发起人新建中、发起人编辑中、部门经理审核中、技术人员处理中、发起人验证中、结束等状态,每个状态对应相应的处理人(如部门经理审核中这个状态下只有部门经理才可以处理该工单)。如用户在新建工单的时候处于“发起人新建中”,(用户)提交后工单处于“部门经理审核中”, 部门经理(即“部门经理审核中”状态的处理人)审批通过后,工单的状态变更为“技术人员处理中”。 注意:"转交"和"加签"使用场景不同,使用时前端需要做必要的说明,避免用户使用错误。

        笔者近期开源了一个工作流的引擎loonflow,用于提供统一的工单服务下面来介绍下如何使用loonflow实现不同场景的工单服务。

        LOONFLOW 分为两部分:

  • 使用django自带的admin来管理工作流的配置信息

  • 提供http api供各个系统(如果oa、cmdb、运维系统、客服系统)的后端调用以完成各自系统定制化的工单需求

    下图是api的调用逻辑:

    新建工单

admin_homapage

处理工单

admin_homapage


    

运维工作中经常会遇到磁盘空间不足的情况,这时候就需要清理一些文件。通过du和df命令可以快速定位到系统中大文件或文件夹。

df:可以查看一级文件夹的大小,使用率,档案系统和挂载点。但是无法查看单个文件的信息

du:可以查看文件及文件夹的大小

[blackholll@localhost~]$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             4.5G  500M  4.0G   11% /
/dev/sda2             10G  200M   9.8G   2% /data0

通过参数-h,以GB,MB等容读的单位来显示

[root@localhost]# du -h --max-depth=1 work/testing/*
8.0M    work/testing/func.php
22M     work/testing/logs
4.1M    work/testing/nohup.out
5.0K    work/testing/testing_c.php
20K     work/testing/testing_func_reg.php

注意:du统计文件大小的相加 df统计数据块的使用情况

当一个进程打开一个大文件的时候,这个文件被rm或者mv掉,du会更新统计值,df则不会,直到这个打开这个文件的进程被kill掉。

[root@localhost home]# du -sm * |sort -n
13      monitor
13      monitor_install.zip
14      monitor_install
396     Toolsvr2
453     Lobby
1734    game2.0
7139    SocketRouteSvr
9224    game
15015   Toolsvr