
监控指标选择
工具与库选择
psutil
(系统资源)、requests
(HTTP状态)、docker
(容器监控)。smtplib
(邮件)、requests
(Webhook)、twilio
(短信)。配置说明:
使用psutil
采集数据,通过SMTP协议发送邮件告警。
定时任务:通过crontab
每5分钟执行一次脚本:
*/5 * * * * /usr/bin/python3 /path/to/monitor.py
import requests import sys def check_http_status(url, expected_code=200): try: response = requests.get(url, timeout=10) if response.status_code != expected_code: send_alert(f"HTTP状态异常:{url} 返回 {response.status_code}") except Exception as e: send_alert(f"服务不可达:{url},错误:{str(e)}") def send_alert(message): # 集成Webhook(如钉钉、企业微信) webhook_url = "https://oapi.dingtalk.com/robot/send?access_token=xxx" headers = {'Content-Type': 'application/json'} data = {"msgtype": "text", "text": {"content": message}} requests.post(webhook_url, json=data, headers=headers) # 调用示例 check_http_status("http://example.com/api/health")
扩展配置:
prometheus-client
库暴露指标,供Prometheus拉取。import re from collections import defaultdict def analyze_logs(log_path, pattern=r'ERROR: (.*)'): error_counts = defaultdict(int) with open(log_path, 'r') as f: for line in f: match = re.search(pattern, line) if match: error_type = match.group(1) error_counts[error_type] += 1 # 触发阈值告警 for error, count in error_counts.items(): if count > 10: send_alert(f"错误类型 {error} 在日志中出现 {count} 次") # 示例:监控Nginx错误日志 analyze_logs('/var/log/nginx/error.log')
优化方案:
loguru
或ELK
栈(Elasticsearch+Logstash+Kibana)实现日志聚合。1.容器化监控
使用docker
库获取容器状态:
import docker client = docker.from_env() for container in client.containers.list(): stats = container.stats(stream=False) print(f"容器 {container.name} CPU使用率:{stats['cpu_percent']}%")
集成Kubernetes:通过kubernetes
库监控Pod资源。
2.自动化修复
检测到磁盘空间不足时,自动清理旧日志:
if disk.percent > 90: os.system("find /var/log -name '*.log' -mtime +7 -exec rm {} \;")
3.可视化仪表盘
Grafana配置:将数据存储至InfluxDB,配置仪表盘展示实时指标。
工具/库 | 用途 |
---|---|
psutil | 系统资源采集 |
prometheus-client | 暴露监控指标 |
Fabric | 批量远程命令执行 |
AlertManager | 告警路由与去重 |
通过Python实现自动化运维监控,需结合具体场景选择工具链:
psutil
+SMTP告警满足单机需求。注意事项:
到此这篇关于Python自动化运维中服务器性能监控与告警详解的文章就介绍到这了,更多相关Python服务器性能监控与告警内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!