上传文件至 'MD'

main
diandian 4 weeks ago
parent 40e1d40627
commit 824ee47149

@ -0,0 +1,409 @@
<h1><center>Python 自动化运维案例</center></h1>
**作者:行癫(盗版必究)**
------
## 一:获取监控系统信息
#### 1.运行环境
python 3
pip 3
#### 2.脚本文件
```python
#!/usr/bin/env python3
import psutil
import socket
import datetime
def get_cpu_info():
return {
"cpu_percent": psutil.cpu_percent(interval=1),
"cpu_cores": psutil.cpu_count(logical=False),
"cpu_threads": psutil.cpu_count(logical=True)
}
def get_memory_info():
mem = psutil.virtual_memory()
return {
"total": mem.total,
"available": mem.available,
"used": mem.used,
"percent": mem.percent
}
def get_disk_info():
partitions = psutil.disk_partitions()
disk_info = {}
for p in partitions:
usage = psutil.disk_usage(p.mountpoint)
disk_info[p.mountpoint] = {
"total": usage.total,
"used": usage.used,
"free": usage.free,
"percent": usage.percent
}
return disk_info
def get_network_info():
net_io = psutil.net_io_counters()
return {
"bytes_sent": net_io.bytes_sent,
"bytes_recv": net_io.bytes_recv
}
def get_uptime():
boot_time = datetime.datetime.fromtimestamp(psutil.boot_time())
now = datetime.datetime.now()
return str(now - boot_time).split('.')[0]
def get_hostname():
return socket.gethostname()
def main():
print(f"主机名: {get_hostname()}")
print(f"系统运行时间: {get_uptime()}")
print("\n=== CPU 信息 ===")
for k, v in get_cpu_info().items():
print(f"{k}: {v}")
print("\n=== 内存 信息 ===")
for k, v in get_memory_info().items():
print(f"{k}: {v // (1024 * 1024)} MB")
print("\n=== 磁盘 信息 ===")
disk_info = get_disk_info()
for mount, info in disk_info.items():
print(f"\n挂载点: {mount}")
for k, v in info.items():
if isinstance(v, (int, float)):
print(f" {k}: {v // (1024 * 1024)} MB" if 'percent' not in k else f" {k}: {v}%")
else:
print(f" {k}: {v}")
print("\n=== 网络 信息 ===")
net_info = get_network_info()
print(f"已发送: {net_info['bytes_sent'] // (1024 * 1024)} MB")
print(f"已接收: {net_info['bytes_recv'] // (1024 * 1024)} MB")
if __name__ == "__main__":
main()
```
#### 3.参数解释
- `psutil`: Python 的系统和进程工具库,用于获取 CPU、内存、磁盘、网络等信息。
- `socket`: 标准库模块,用于获取网络信息,如主机名。
- `datetime`: 标准库模块,用于处理日期和时间,例如计算开机时长。
------
## 🧠 获取 CPU 信息
```python
def get_cpu_info():
```
定义一个函数 `get_cpu_info`,用来收集 CPU 的使用信息。
```python
return {
"cpu_percent": psutil.cpu_percent(interval=1),
```
- `psutil.cpu_percent(interval=1)`:统计 1 秒钟内 CPU 的总体使用率(百分比)。
```python
"cpu_cores": psutil.cpu_count(logical=False),
```
- `psutil.cpu_count(logical=False)`:获取物理核心数,不包含超线程。
```python
"cpu_threads": psutil.cpu_count(logical=True)
```
- `psutil.cpu_count(logical=True)`:获取逻辑核心数(包括超线程)。
返回一个包含三个键值的字典。
------
## 💾 获取内存信息
```python
def get_memory_info():
```
定义函数 `get_memory_info`,收集内存使用情况。
```python
mem = psutil.virtual_memory()
```
- 调用 `virtual_memory()` 获取当前系统的内存使用信息,返回一个包含多个字段的对象。
```python
return {
"total": mem.total,
"available": mem.available,
"used": mem.used,
"percent": mem.percent
}
```
- 提取并返回 `total`(总内存)、`available`(可用)、`used`(已用)和 `percent`(使用率)这几个重要指标,作为字典返回。
------
## 📁 获取磁盘使用情况
```python
def get_disk_info():
```
定义函数 `get_disk_info`,用来收集磁盘每个分区的使用状态。
```python
partitions = psutil.disk_partitions()
```
- 获取所有磁盘分区(如 `/`, `/boot`)。
```python
disk_info = {}
```
- 初始化一个空字典,用来存储每个挂载点的使用信息。
```python
for p in partitions:
```
- 遍历所有磁盘分区。
```python
usage = psutil.disk_usage(p.mountpoint)
```
- 获取该分区的使用情况(总空间、已用、可用、百分比)。
```python
disk_info[p.mountpoint] = {
"total": usage.total,
"used": usage.used,
"free": usage.free,
"percent": usage.percent
}
```
- 把该挂载点的使用数据以字典形式存入 `disk_info` 中,以挂载点路径为键。
```python
return disk_info
```
- 返回整个磁盘信息的字典。
------
## 🌐 获取网络信息
```python
def get_network_info():
```
定义函数 `get_network_info`,收集网络数据使用情况。
```python
net_io = psutil.net_io_counters()
```
- 获取网络接口的总体读写统计(从开机到现在)。
```python
return {
"bytes_sent": net_io.bytes_sent,
"bytes_recv": net_io.bytes_recv
}
```
- 返回已发送和接收的总字节数。
------
## ⏱️ 获取系统运行时间
```python
def get_uptime():
```
定义函数 `get_uptime`,计算系统运行了多久。
```python
boot_time = datetime.datetime.fromtimestamp(psutil.boot_time())
```
- `psutil.boot_time()` 返回系统开机时间Unix 时间戳)。
- `fromtimestamp()` 将其转换为 `datetime` 对象。
```python
now = datetime.datetime.now()
```
- 获取当前时间。
```python
return str(now - boot_time).split('.')[0]
```
- 计算时间差(即运行时长),去掉微秒部分并转为字符串返回。
------
## 🖥️ 获取主机名
```python
def get_hostname():
return socket.gethostname()
```
使用 `socket.gethostname()` 返回本机的主机名。
------
## 🔁 主程序入口
```python
def main():
```
定义主函数,控制整个程序流程。
```python
print(f"主机名: {get_hostname()}")
```
打印主机名。
```python
print(f"系统运行时间: {get_uptime()}")
```
打印系统开机至今的运行时间。
------
### ▶️ 打印 CPU 信息
```python
print("\n=== CPU 信息 ===")
```
打印 CPU 信息的标题。
```python
for k, v in get_cpu_info().items():
print(f"{k}: {v}")
```
- 遍历 CPU 信息字典并打印每项的键和值。
------
### 🧠 打印内存信息
```python
print("\n=== 内存 信息 ===")
```
标题。
```python
for k, v in get_memory_info().items():
print(f"{k}: {v // (1024 * 1024)} MB")
```
- 遍历内存数据,将字节转换为 MB 后打印。
------
### 💽 打印磁盘信息
```python
print("\n=== 磁盘 信息 ===")
```
标题。
```python
disk_info = get_disk_info()
```
获取磁盘信息。
```python
for mount, info in disk_info.items():
```
遍历每个挂载点及其信息。
```python
print(f"\n挂载点: {mount}")
```
打印当前磁盘分区的挂载点。
```python
for k, v in info.items():
```
遍历该挂载点的信息。
```python
if isinstance(v, (int, float)):
print(f" {k}: {v // (1024 * 1024)} MB" if 'percent' not in k else f" {k}: {v}%")
else:
print(f" {k}: {v}")
```
- 如果值是数字,就转成 MB 打印(除了百分比)。
- 否则直接打印。
------
### 🌐 打印网络信息
```python
print("\n=== 网络 信息 ===")
net_info = get_network_info()
```
获取网络流量。
```python
print(f"已发送: {net_info['bytes_sent'] // (1024 * 1024)} MB")
print(f"已接收: {net_info['bytes_recv'] // (1024 * 1024)} MB")
```
将字节转换为 MB 并打印发送和接收量。
------
## 🚀 执行入口
```python
if __name__ == "__main__":
main()
```
- Python 程序的标准入口。
- 如果是直接运行脚本,就执行 `main()`
Loading…
Cancel
Save