19.2.2 资产生命周期管理流程

资产生命周期管理流程覆盖从需求提出到退役回收的全链路,核心目标是确保资产数据准确、可追溯、可审计,并与资源编排、自动化交付和成本治理形成闭环。流程应以标准状态机驱动,状态变更触发审批、变更、监控与安全策略联动。

原理草图:生命周期状态机与编排联动

文章图片

生命周期阶段与关键动作
1. 规划与需求:业务申请、容量评估、预算核算、合规评估;输出资源规格、部署环境与交付时间。
2. 采购/创建:物理资产采购或云资源创建;生成资产编号与标签;登记供应商、维保、SLA与合同信息。
3. 验收与入库:硬件验收、云资源验收;入库登记、机柜/区域/可用区绑定;同步CMDB与资产台账。
4. 配置与交付:标准镜像/基线配置、网络与安全组策略、账号与权限下发;自动化交付完成后进入“在用”状态。
5. 运行与维护:监控纳管、巡检与补丁策略;配置变更走变更管理;容量与性能指标持续跟踪。
6. 变更与扩缩:资产升级、扩容、迁移、下线替换;保留变更记录、影响评估与回滚方案。
7. 退役与回收:业务下线、资源释放、数据清理与合规销毁;资产标记为“退役/回收”,归档记录。

状态机设计建议
- 草稿 → 待审批 → 已批准 → 采购/创建中 → 待验收 → 在用 → 变更中 → 待退役 → 已退役
每个状态必须记录负责人、时间戳、审批意见与关联工单。


实践示例:用CMDB表+脚本驱动状态变更#

以下示例使用 MySQL 记录资产状态与审计,并通过脚本触发状态变更。

1)安装与初始化(示例)

# 安装 MySQL(以 Ubuntu 为例)
sudo apt update
sudo apt install -y mysql-server

# 创建资产库与表
mysql -uroot <<'SQL'
CREATE DATABASE IF NOT EXISTS cmdb;
USE cmdb;
CREATE TABLE IF NOT EXISTS assets (
  id INT AUTO_INCREMENT PRIMARY KEY,
  asset_code VARCHAR(64) UNIQUE,
  asset_type VARCHAR(32),
  owner VARCHAR(64),
  status VARCHAR(32),
  location VARCHAR(64),
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS asset_audit (
  id INT AUTO_INCREMENT PRIMARY KEY,
  asset_code VARCHAR(64),
  action VARCHAR(64),
  operator VARCHAR(64),
  note VARCHAR(255),
  action_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
SQL

2)资产登记与状态流转

# 资产登记:草稿 -> 待审批
mysql -uroot cmdb <<'SQL'
INSERT INTO assets(asset_code,asset_type,owner,status,location)
VALUES('SVR-20240101','vm','bizA','待审批','cn-bj-az1');
INSERT INTO asset_audit(asset_code,action,operator,note)
VALUES('SVR-20240101','创建草稿','requesterA','提交需求');
SQL

# 审批通过:待审批 -> 已批准
mysql -uroot cmdb <<'SQL'
UPDATE assets SET status='已批准' WHERE asset_code='SVR-20240101';
INSERT INTO asset_audit(asset_code,action,operator,note)
VALUES('SVR-20240101','审批通过','approver1','预算核准');
SQL

# 交付完成:配置交付 -> 在用
mysql -uroot cmdb <<'SQL'
UPDATE assets SET status='在用' WHERE asset_code='SVR-20240101';
INSERT INTO asset_audit(asset_code,action,operator,note)
VALUES('SVR-20240101','交付完成','ops1','基线配置+监控纳管');
SQL

3)命令解释(关键点)
- INSERT INTO assets:创建资产基础记录,必须有唯一 asset_code
- UPDATE assets SET status=...:执行状态变更,必须同步写入审计表。
- asset_audit:确保链路可追溯,满足审计要求。


自动化交付联动示例(触发编排)#

以下示例演示状态变更后触发 Ansible 交付任务:

assets_status_watch.sh

#!/bin/bash
# 监测已批准资产,触发交付
mysql -uroot -N cmdb -e "SELECT asset_code,owner FROM assets WHERE status='已批准'" |
while read code owner; do
  echo "Delivering $code for $owner"
  ansible-playbook -i inventory.ini deliver.yml --extra-vars "asset_code=$code owner=$owner"
  mysql -uroot cmdb -e "UPDATE assets SET status='在用' WHERE asset_code='$code'"
  mysql -uroot cmdb -e "INSERT INTO asset_audit(asset_code,action,operator,note) VALUES('$code','交付完成','ansible','自动化交付')"
done

deliver.yml(示例)

- hosts: new_assets
  become: yes
  tasks:
    - name: Install baseline packages
      apt:
        name: [curl, vim, net-tools]
        state: present
    - name: Configure node exporter
      copy:
        src: node_exporter.service
        dest: /etc/systemd/system/node_exporter.service
    - name: Enable monitoring agent
      systemd:
        name: node_exporter
        enabled: yes
        state: started

常见排错与定位#

1)状态未更新

# 检查资产是否存在
mysql -uroot cmdb -e "SELECT * FROM assets WHERE asset_code='SVR-20240101'\G"

# 检查是否卡在审批或交付
mysql -uroot cmdb -e "SELECT asset_code,status,updated_at FROM assets WHERE asset_code='SVR-20240101'"

排错要点
- asset_code 是否唯一
- 自动化脚本是否有权限更新
- 审计表是否写入失败(字段长度、字符集)

2)交付脚本执行失败

# 查看 Ansible 输出
ansible-playbook -i inventory.ini deliver.yml -vv

# 查看被控端服务
systemctl status node_exporter
journalctl -u node_exporter --no-pager -n 50

练习#

  1. 新建一条资产记录,模拟状态从“待审批”流转到“在用”,并查询审计记录。
  2. 修改 assets_status_watch.sh,只对 asset_type=vm 的资产触发交付。
  3. 将“退役”流程补充为脚本:删除监控、移除权限、写入审计表。

与资源编排的联动
- 资产状态变更触发编排任务(如创建、扩容、下线)。
- 标准化模板确保配置一致性。
- 生命周期事件与监控、告警、成本系统同步,实现运维平台化闭环。