第1章 系统基础信息模块详解

按刘天斯原书第1章重建:系统基础信息模块、psutil系统性能与进程管理、IPy地址与网段处理、dnspython域名解析、DNS域名轮循业务监控。

从一次运维变更开始

先预测:脚本在一台测试机成功,是否就能安全用于批量生产?不能。还要说明目标、权限、超时、部分失败、证据和回滚。必须落进可观察的执行链。

核心模型与责任

系统基础信息模块把主机状态转换为结构化数据。采集器要明确采样时刻、单位和权限,返回原始指标而不是直接决定告警;策略层再根据基线和服务目标解释数据。 本章按照原书核心模块建立最小实验,再用现代Python和安全默认重写边界。工具版本可以变化,但目标选择、输入验证、结果聚合和审计证据不能消失。

机制一:采集或控制入口

psutil系统性能与进程管理覆盖CPU、内存、磁盘、网络和进程。cpu_percent第一次调用只是建立基线,进程也会在枚举期间退出,因此代码必须处理NoSuchProcess和AccessDenied。

import psutil
snapshot = {
    'cpu': psutil.cpu_percent(interval=0.2),
    'memory': psutil.virtual_memory().percent,
    'disk': psutil.disk_usage('/').percent,
}
print(snapshot)

运行前固定测试目标与时间窗,运行后保存结构化结果、耗时和异常类型。不要把打印了几行输出当成成功,也不要让示例凭据进入源码。

机制二:状态、网络与批量

IPy地址与网段处理用于计算网络、广播、前缀和包含关系。原书使用IPy,现代Python也可用标准库ipaddress;不要用字符串前缀判断地址归属,IPv4与IPv6必须由地址对象验证。

from ipaddress import ip_network, ip_address
network = ip_network('10.20.0.0/20')
assert ip_address('10.20.3.8') in network
print(network.network_address, network.broadcast_address)

批量任务要先预览匹配目标,再限制并发并逐目标汇总。成功、失败、超时和未返回是不同状态;只展示总成功率会掩盖关键主机失败。

机制三:证据与恢复

dnspython域名解析返回A、AAAA、MX、CNAME等记录及TTL。解析失败要区分NXDOMAIN、无记录、超时和SERVFAIL,缓存时间受TTL约束,不能把一次答案当成永久配置。 DNS域名轮循业务监控要同时验证每个答案是否出现、是否可连接以及服务内容是否正确。只看域名能解析会漏掉后端故障,探针还要记录解析器、时延和本次答案集合。

import dns.resolver
answers = dns.resolver.resolve('example.com', 'A', lifetime=3)
records = [(answer.address, answers.rrset.ttl) for answer in answers]
print(records)

分步验收

实战验证清单

在隔离环境执行三段代码:先只读采集,再模拟一台目标超时,最后验证失败不会改变未授权对象。记录命令或API参数、开始结束时间、目标清单、返回码、标准错误、制品摘要和回滚结果。涉及网络扫描、远程命令或配置发布时,必须使用经过批准的测试资产。

常见误区

本章回顾

官方核心单元核对:系统基础信息模块;psutil系统性能与进程管理;IPy地址与网段处理;dnspython域名解析;DNS域名轮循业务监控。本章把原书模块放进现代运维闭环:先授权与预览,再执行与收集,最后判断、审计和恢复。

术语表

讨论

评论区加载中…