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
练习#
- 新建一条资产记录,模拟状态从“待审批”流转到“在用”,并查询审计记录。
- 修改
assets_status_watch.sh,只对asset_type=vm的资产触发交付。 - 将“退役”流程补充为脚本:删除监控、移除权限、写入审计表。
与资源编排的联动
- 资产状态变更触发编排任务(如创建、扩容、下线)。
- 标准化模板确保配置一致性。
- 生命周期事件与监控、告警、成本系统同步,实现运维平台化闭环。