Python学习日志(三):常用模块
自动化运维框架FabricInvoke:任务执行框架Ansible:基础设施即代码(通过容器与云管理dockerkubernetes:K8s 客户端监控与告警:Prometheus 指标暴露statsd:StatsD 指标上报异步处理asyncio:异步I/O框架aiohttp:异步HTTP客户端/服务端。
·
Python常用模块
在运维工作中,Python 因其简洁、高效和丰富的库生态成为自动化运维的首选语言。熟练掌握常用模块能极大提升工作效率。本篇将聚焦运维工程师日常工作中频繁使用的核心模块,并通过具体实例展示其应用场景。
一、核心模块:系统与文件操作
| 模块名 | 主要功能 | 典型运维场景 |
|---|---|---|
os |
操作系统接口 | 文件和目录管理、环境变量读取、执行系统命令 |
sys |
系统相关功能 | 命令行参数解析、系统版本信息、标准输入输出控制 |
shutil |
高级文件操作 | 文件复制、移动、归档、目录树删除 |
glob |
文件路径匹配 | 批量查找符合规则的文件路径 |
pathlib |
面向对象路径 | 路径操作(替代 os.path) |
1. os 模块:基础系统交互
import os
# 检查文件/目录是否存在
if os.path.exists("/var/log/nginx"):
print("Nginx日志目录存在")
# 遍历目录
for root, dirs, files in os.walk("/etc"):
print(f"当前目录: {root}")
print(f"包含子目录: {dirs}")
print(f"包含文件: {files}")
# 执行Shell命令(注意安全风险)
os.system("df -h") # 查看磁盘使用情况
2. shutil 模块:高效文件管理
import shutil
# 复制目录(保留元数据)
shutil.copytree("src_backup", "dst_backup")
# 移动文件
shutil.move("/tmp/old.log", "/archive/")
# 删除整个目录
shutil.rmtree("/tmp/expired_data")
# 磁盘使用统计(需配合 os)
total, used, free = shutil.disk_usage("/")
print(f"磁盘使用率: {used/total:.2%}")
二、进程与命令执行
| 模块名 | 主要功能 | 典型运维场景 |
|---|---|---|
subprocess |
创建子进程 | 安全执行系统命令、获取输出 |
psutil |
系统进程和资源监控 | 资源监控、进程管理 |
signal |
信号处理 | 优雅停止进程 |
1. subprocess:安全的命令执行
import subprocess
# 获取命令输出(推荐方式)
result = subprocess.run(
["ls", "-l", "/var/log"],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True
)
if result.returncode == 0:
print("文件列表:\n", result.stdout)
else:
print("错误:", result.stderr)
# 实时输出(流式处理)
process = subprocess.Popen(
["tail", "-f", "/var/log/syslog"],
stdout=subprocess.PIPE
)
for line in iter(process.stdout.readline, b''):
print(line.decode().strip())
2. psutil:资源监控神器
import psutil
# 获取CPU使用率
cpu_percent = psutil.cpu_percent(interval=1)
print(f"当前CPU使用率: {cpu_percent}%")
# 内存信息
mem = psutil.virtual_memory()
print(f"内存总量: {mem.total / 1024**3:.2f} GB")
print(f"已使用: {mem.used / 1024**3:.2f} GB")
# 遍历进程
for proc in psutil.process_iter(['pid', 'name']):
if proc.info['name'] == 'nginx':
print(f"Nginx进程ID: {proc.info['pid']}")
三、日志与配置管理
| 模块名 | 主要功能 | 典型运维场景 |
|---|---|---|
logging |
日志记录 | 脚本日志管理 |
configparser |
INI配置文件解析 | 读取应用配置 |
json |
JSON数据处理 | API交互、配置文件解析 |
yaml |
YAML数据处理 | 复杂配置文件解析(如K8s) |
1. logging:专业的日志记录
import logging
# 基础配置
logging.basicConfig(
filename='app.log',
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
# 使用示例
logger = logging.getLogger('backup_tool')
logger.info("开始执行数据库备份")
try:
# 备份操作...
logger.info("备份成功")
except Exception as e:
logger.error(f"备份失败: {str(e)}")
2. configparser:管理INI配置
```示例配置文件(app.conf)` [database] host = db.example.com port = 3306 user = admin password = secret
[logging] level = INFO
```python
from configparser import ConfigParser
config = ConfigParser()
config.read('app.conf')
db_host = config.get('database', 'host')
log_level = config.get('logging', 'level')
print(f"数据库地址: {db_host}, 日志级别: {log_level}")
四、网络与通信
| 模块名 | 主要功能 | 典型运维场景 |
|---|---|---|
socket |
底层网络接口 | 自定义协议通信 |
requests |
HTTP客户端 | REST API调用 |
paramiko |
SSH协议客户端 | 远程服务器管理 |
smtplib |
SMTP邮件发送 | 告警通知 |
1. requests:HTTP请求库
import requests
# 查询API状态
response = requests.get("https://api.example.com/health")
if response.status_code == 200:
print("服务状态正常")
else:
print(f"服务异常: {response.text}")
# 提交监控数据
payload = {'host': 'web01', 'cpu': 85, 'memory': 70}
requests.post("http://monitor.example.com/api/data", json=payload)
2. paramiko:SSH远程管理
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
ssh.connect('server01.example.com', username='ops', key_filename='/home/ops/.ssh/id_rsa')
# 执行远程命令
stdin, stdout, stderr = ssh.exec_command('docker ps --format "{{.Names}}"')
containers = stdout.read().decode().splitlines()
print(f"运行中的容器: {containers}")
finally:
ssh.close()
五、数据处理与压缩
| 模块名 | 主要功能 | 典型运维场景 |
|---|---|---|
csv |
CSV文件处理 | 导出/导入报表数据 |
gzip |
GZIP压缩 | 日志压缩存储 |
zipfile |
ZIP归档 | 批量文件打包 |
datetime |
日期时间处理 | 日志时间分析 |
1. gzip:日志压缩
import gzip
import shutil
# 压缩日志文件
with open('/var/log/app.log', 'rb') as f_in:
with gzip.open('/backup/app.log.gz', 'wb') as f_out:
shutil.copyfileobj(f_in, f_out)
2. datetime:时间计算
from datetime import datetime, timedelta
# 计算7天前的日期
week_ago = datetime.now() - timedelta(days=7)
print(f"清理早于: {week_ago.strftime('%Y-%m-%d')} 的日志")
# 时间字符串解析
log_time = datetime.strptime("2023-10-01 12:30:00", "%Y-%m-%d %H:%M:%S")
六、实用工具模块
| 模块名 | 主要功能 | 典型运维场景 |
|---|---|---|
argparse |
命令行参数解析 | 脚本参数规范化 |
re |
正则表达式 | 日志过滤、文本提取 |
time |
时间相关功能 | 延时、计时 |
1. argparse:命令行工具开发
import argparse
parser = argparse.ArgumentParser(description='数据库备份工具')
parser.add_argument('--host', required=True, help='数据库主机')
parser.add_argument('--port', type=int, default=3306, help='数据库端口')
parser.add_argument('-v', '--verbose', action='store_true', help='详细输出')
args = parser.parse_args()
print(f"连接至 {args.host}:{args.port}")
if args.verbose:
print("详细模式已启用")
2. re:日志分析
import re
log_line = "2023-10-01 12:30:00 ERROR [app] Connection timeout (host: db01)"
# 提取错误级别和时间
match = re.search(r'(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) (\w+)', log_line)
if match:
print(f"时间: {match.group(1)}, 级别: {match.group(2)}")
# 查找所有IP地址
text = "访问IP: 192.168.1.1, 转发至 10.0.0.2"
ips = re.findall(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}', text)
print("找到IP:", ips)
七、总结与进阶方向
运维工作中 Python 模块的使用远不止于此,随着场景深入,以下方向值得关注:
-
自动化运维框架:
Fabric/Invoke:任务执行框架Ansible:基础设施即代码(通过ansible-api)
-
容器与云管理:
docker:Docker SDKkubernetes:K8s 客户端
-
监控与告警:
prometheus_client:Prometheus 指标暴露statsd:StatsD 指标上报
-
异步处理:
asyncio:异步I/O框架aiohttp:异步HTTP客户端/服务端
附录:运维常用模块速查表
| 模块 | 用途简述 |
|---|---|
os |
系统目录/文件操作 |
subprocess |
安全执行命令 |
psutil |
系统资源监控 |
paramiko |
SSH远程控制 |
requests |
HTTP API调用 |
logging |
日志记录管理 |
yaml/json |
配置文件解析 |
argparse |
命令行参数解析 |
re |
日志过滤/文本提取 |
注:以上代码示例均为简化版,实际生产环境需增加异常处理、日志记录和安全防护措施。通过灵活组合这些模块,可构建出高效可靠的运维自动化体系。
更多推荐
所有评论(0)