怎么用脚本获取系统关键

wen 实用脚本 1

从入门到精通的完整指南

目录导读

  1. 为什么要用脚本获取系统关键信息?
  2. 核心脚本语言选择与基础准备
  3. 实战:用Python脚本获取CPU、内存、磁盘信息
  4. Windows与Linux系统脚本的差异
  5. 常见问题与解决方案(Q&A)
  6. 进阶:关键数据自动化上报与告警
  7. 总结与最佳实践

为什么要用脚本获取系统关键信息?

在日常运维与开发中,系统关键信息(如CPU使用率、内存占用、磁盘I/O、网络状态)直接影响服务稳定性,手动检查效率低下,且无法实时感知异常,通过脚本自动化采集,你可以:

怎么用脚本获取系统关键

  • 一键获取多台服务器的核心指标
  • 将数据写入监控系统(如Prometheus、Zabbix)
  • 实现阈值触发告警(如CPU超90%自动通知)

问答
Q:难道不能用top或htop命令看吗?
A:当然可以,但如果你有100台服务器呢?脚本能让你批量采集、持久化存储,并与其他系统集成。


核心脚本语言选择与基础准备

目前最流行的三种脚本语言对比:

  • Python:跨平台、生态丰富(psutil库无敌)、适合复杂逻辑
  • Shell:纯原生、执行效率高、适合简单采集
  • PowerShell:Windows专属、与AD/Exchange集成强

建议:通用场景用Python,纯Linux环境用Shell。
基础准备

  • 安装Python 3.8+
  • 安装psutil库:pip install psutil
  • 确保脚本有执行权限:chmod +x script.py

实战:用Python脚本获取CPU、内存、磁盘信息

以下是一个可直接运行的示例脚本,采集Windows/Linux共通的系统关键数据:

import psutil
import time
def get_system_info():
    # CPU关键信息
    cpu_percent = psutil.cpu_percent(interval=1)
    cpu_count = psutil.cpu_count(logical=True)
    # 内存关键信息
    mem = psutil.virtual_memory()
    mem_percent = mem.percent
    mem_available = mem.available / (1024**3)  # 转换为GB
    # 磁盘关键信息
    disk = psutil.disk_usage('/')
    disk_percent = disk.percent
    disk_free = disk.free / (1024**3)
    # 网络关键信息(每秒字节数)
    net_before = psutil.net_io_counters()
    time.sleep(1)
    net_after = psutil.net_io_counters()
    net_sent = (net_after.bytes_sent - net_before.bytes_sent) / 1024
    net_recv = (net_after.bytes_recv - net_before.bytes_recv) / 1024
    return {
        "cpu_percent": cpu_percent,
        "cpu_cores": cpu_count,
        "mem_percent": mem_percent,
        "mem_available_gb": round(mem_available, 2),
        "disk_percent": disk_percent,
        "disk_free_gb": round(disk_free, 2),
        "net_sent_kbps": round(net_sent, 2),
        "net_recv_kbps": round(net_recv, 2)
    }
if __name__ == "__main__":
    info = get_system_info()
    for key, value in info.items():
        print(f"{key}: {value}")

输出示例

cpu_percent: 45.3
cpu_cores: 8
mem_percent: 62.1
mem_available_gb: 6.25
disk_percent: 78.4
disk_free_gb: 42.1
net_sent_kbps: 156.2
net_recv_kbps: 234.8

这个脚本已经覆盖了数据库监控、Web服务器负载评估、可用资源分析的核心维度,你可以直接用于Zabbix agent自定义项,或配合crontab每5分钟执行一次。


Windows与Linux系统脚本的差异

虽然psutil屏蔽了大部分差异,但以下三点需要特别注意:

维度 Windows Linux
磁盘路径 盘符如C:、D: 挂载点如/、/home
进程权限 需管理员权限访问部分关键进程 普通用户可读/proc
网络接口名 可能含空格和特殊字符 通常为eth0、ens33

脚本适配技巧

import platform
system = platform.system()
if system == "Windows":
    disk_partitions = psutil.disk_partitions()  # 会自动识别盘符
else:
    disk_usage = psutil.disk_usage('/')  # Linux根分区

问答
Q:我的服务器是CentOS 7,脚本需要额外安装什么?
A:只需要pip install psutil,如果遇到gcc编译错误,先安装yum install python3-devel,建议用阿里云pip源加速:pip install -i https://mirrors.aliyun.com/pypi/simple/ psutil


常见问题与解决方案(Q&A)

Q1:脚本报错No module named 'psutil'
A:确认你安装了正确的Python版本:python3 -m pip install psutil,如果同时有python2和3,请用python3显式调用。

Q2:CPU使用率一直是0%
A:这是因为你用的是psutil.cpu_percent(interval=0),必须设置大于0的interval时间(如1秒),否则返回0,VM虚拟机可能因CPU节流导致不准确。

Q3:磁盘空间提示与实际不符
A:检查是否使用了statvfsdf -h命令,脚本中的disk_usage('/')仅统计根分区,如果想统计所有分区,用循环遍历psutil.disk_partitions()

Q4:网络采集数据波动太大
A:网络速率是瞬时值,建议取1秒内总量差(如脚本所示),或者采样3次取平均值,也可以用net_sent / interval公式规范化。

Q5:如何将结果输出为JSON用于API传输?
A:在脚本末尾添加import json; print(json.dumps(info, indent=2)),这样可以直接被REST接口或日志收集器解析。


进阶:关键数据自动化上报与告警

当获取到系统关键信息后,实际价值在于自动化响应,以下两个场景值得实践:

场景1:日志文件持久化

# crontab每5分钟执行一次
*/5 * * * * /usr/bin/python3 /opt/scripts/sysinfo.py >> /var/log/sysinfo.json 2>&1

场景2:结合第三方监控平台(以Prometheus为例)
在脚本中追加HTTP服务模块,暴露/metrics端点:

from prometheus_client import start_http_server, Gauge
# 然后定义指标:cpu_gauge = Gauge('cpu_percent', 'Current CPU usage')
# 最后在采集循环中设置值

这样Prometheus server就能定期拉取,配合Grafana绘制实时仪表盘,大厂的生产环境通常采用这种agent + 拉取模式。

问答
Q:我只有两台服务器,监控商业化方案太贵,能用脚本自己搭吗?
A:完全可以,用Python + Flask + Prometheus + Grafana(全部开源)就能搭建一套生产级监控,你的脚本需要做三件事:采集数据、生成Prometheus格式、启动HTTP服务,详细的搭建教程可以参考官方文档,关键词搜索“py process exporter”。


总结与最佳实践

通过本文,你已经掌握了用脚本获取系统关键信息的完整方法,总结要点:

  • 优先使用Python的psutil库,它抽象了90%的跨平台差异
  • 关键指标:CPU、内存、磁盘、网络是核心四大件
  • 自动化思维:不要只手动跑,要结合cron、systemd、Docker等实现无人值守
  • 安全第一:脚本不要明文写密码,用环境变量或加密配置文件

最佳实践清单

  1. 所有脚本开头添加#!/usr/bin/env python3和编码声明
  2. 使用argparse模块支持命令行参数(如指定告警阈值)
  3. 异常处理:用try-except捕获采集失败,避免脚本崩溃
  4. 日志记录:用logging库而非print,便于调试
  5. 持续优化:每季度检查一次脚本性能,避免内存泄漏

就动手在你的服务器上运行这个脚本吧,十分钟之后,你就能看到系统关键数据的实时快照,如果遇到问题,回到本文的Q&A部分查找,或者用pip安装rich库让输出彩色的表格,效果更酷。

抱歉,评论功能暂时关闭!