一、基础监控架构设计
监控指标选择
- 核心资源:cpu利用率、内存使用率、磁盘空间与i/o、网络流量、进程状态等。
- 业务指标:http服务状态码、数据库连接数、应用响应时间等。
- 容器化场景:docker/kubernetes容器资源使用、pod健康状态。
工具与库选择
- 数据采集:
psutil(系统资源)、requests(http状态)、docker(容器监控)。 - 告警通知:
smtplib(邮件)、requests(webhook)、twilio(短信)。 - 数据存储与可视化:prometheus(时序数据库)、grafana(仪表盘)、influxdb(轻量级存储)。
二、核心代码实现与配置
场景1:基础资源监控与告警
配置说明:
使用psutil采集数据,通过smtp协议发送邮件告警。
定时任务:通过crontab每5分钟执行一次脚本:
*/5 * * * * /usr/bin/python3 /path/to/monitor.py
场景2:http服务状态监控
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")
扩展配置:
- 集成zabbix:将脚本输出作为自定义监控项,配置trigger触发告警。
- prometheus监控:使用
prometheus-client库暴露指标,供prometheus拉取。
场景3:日志分析与异常检测
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告警满足单机需求。 - 分布式系统:prometheus+grafana实现集群监控。
- 日志与业务监控:正则分析+elk栈提升排查效率。
- 自动化修复:检测到问题后触发预定义脚本(如清理文件、重启服务)。
注意事项:
- 安全性:敏感信息(如密码)应使用环境变量或加密存储。
- 性能开销:监控脚本需优化资源占用,避免影响业务。
- 告警收敛:通过alertmanager等工具避免告警风暴。
到此这篇关于python自动化运维中服务器性能监控与告警详解的文章就介绍到这了,更多相关python服务器性能监控与告警内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论