一、Bash Shell 实战:高效自动化与监控
1. 动态日志监控与告警
bash
复制
#!/bin/bash
# 实时监控Nginx错误日志,触发阈值告警
LOG_FILE="/var/log/nginx/error.log"
THRESHOLD=5 # 错误数阈值
tail -Fn0 $LOG_FILE | whileread line; do
ifecho"$line" | grep -q "ERROR"; then
COUNT=$((COUNT + 1))
if [ $COUNT -ge $THRESHOLD ]; then
echo"ALERT: Nginx Error Count Exceeded Threshold ($COUNT)" | mail -s "Nginx Error Alert" admin@example.com
COUNT=0 # 重置计数器
fi
fi
done
价值点:
替代手动 tail -f
监控,自动触发告警,减少响应延迟。可扩展为多日志源聚合(如用 multitail
或lnav
增强功能)。
2. 批量服务器配置标准化
bash
复制
#!/bin/bash
# 通过Ansible批量部署基础安全配置
ANSIBLE_PLAYBOOK="security_hardening.yml"
# 检查Ansible是否安装
if ! command -v ansible &> dev/null; then
echo"Ansible not installed. Installing..."
sudo apt-get install -y ansible
fi
# 执行Playbook
ansible all -i inventory.ini -m ping # 测试连接
ansible-playbook $ANSIBLE_PLAYBOOK --tags "firewall,ssh"
价值点:
用Ansible(通过Bash调用)替代手动SSH登录配置,确保环境一致性。 结合 shellcheck
检查脚本安全性,避免低级错误。
二、Python3 实战:智能化与数据分析
1. 智能磁盘空间预测与清理
python
复制
# disk_predict.py
import os
import pandas as pd
from sklearn.ensemble import IsolationForest
import shutil
defget_disk_usage():
df = pd.DataFrame(os.popen('df -h').readlines()[1:], columns=df.columns)
return df
defpredict_and_clean():
df = get_disk_usage()
# 使用孤立森林预测异常增长分区
model = IsolationForest(contamination=0.1)
df['anomaly'] = model.fit_predict(df[['Used%']])
critical_partitions = df[df['anomaly'] == -1]['Filesystem']
for partition in critical_partitions:
# 清理旧日志文件(示例)
log_dir = f"/var/log/{partition}"
if os.path.exists(log_dir):
shutil.rmtree(log_dir + "/old_logs", ignore_errors=True)
print(f"Cleaned {log_dir}")
if __name__ == "__main__":
predict_and_clean()
价值点:
用机器学习预测磁盘异常,替代传统阈值告警(如 cron
+du
)。自动清理历史日志,释放空间,减少人工干预。
2. AI驱动的服务健康检查
python
复制
# service_health.py
import requests
from transformers import pipeline
# 加载预训练NLP模型,分析服务日志语义
summarizer = pipeline("summarization")
defcheck_service_health(api_url):
# 1. 调用服务健康检查API
response = requests.get(api_url)
status_code = response.status_code
# 2. 分析错误日志(假设返回日志文本)
logs = response.json().get("logs", [])
summary = summarizer("\n".join(logs), max_length=100)[0]['summary_text']
# 3. 根据语义判断风险等级
if"timeout"in summary.lower() or status_code != 200:
send_alert(f"Service Degradation Detected: {summary}")
else:
print("Service Healthy")
defsend_alert(message):
# 集成企业告警系统(如Slack/钉钉)
requests.post("https://slack.com/api/chat.postMessage", json={"text": message})
if __name__ == "__main__":
check_service_health("http://api.example.com/health")
价值点:
结合NLP模型(Hugging Face Transformers)语义分析日志,超越简单状态码检测。 自动化根因推断,减少人工排查时间。
三、Bash+Python协同:复杂场景优化
1. 智能化备份与版本回滚
bash
复制
#!/bin/bash
# 备份数据库并调用Python进行增量分析
DATE=$(date +%Y%m%d)
BACKUP_DIR="/backups/mysql"
mysqldump -u root -p密码 dbname > $BACKUP_DIR/db_$DATE.sql
# 调用Python分析备份增长趋势
python3 - <<END
import os
from datetime import datetime, timedelta
backup_dir = "/backups/mysql"
backups = sorted([f for f in os.listdir(backup_dir) if f.endswith('.sql')])
# 计算近7天备份大小变化率
sizes = [os.path.getsize(os.path.join(backup_dir, f)) for f in backups[-7:]]
growth_rate = (sizes[-1] - sizes[0]) sizes[0] * 100
if growth_rate > 50:
print("WARNING: Backup size increased by 50%+ in 7 days. Possible data leak!")
END
价值点:
Bash负责基础操作,Python实现高级分析(时间序列预测)。 结合两者优势,实现“简单任务自动化+复杂逻辑智能化”。
2. 动态资源调度(Kubernetes场景)
python
复制
# k8s_autoscale.py
from kubernetes import client, config
import subprocess
defscale_deployment(replicas):
# 调用kubectl命令更新副本数
subprocess.run([
"kubectl", "scale", "deployment", "webapp",
"--replicas=" + str(replicas)
])
defget_cpu_metrics():
# 查询Prometheus API获取CPU使用率
cmd = "curl -s http://prometheus:9090/api/v1/query?query=rate(container_cpu_usage_seconds_total[5m])"
result = subprocess.run(cmd, shell=True, capture_output=True).stdout.decode()
# 解析JSON返回结果(示例简化)
returnfloat(result.split('"value":')[1].split(',')[0])
if __name__ == "__main__":
cpu_usage = get_cpu_metrics()
if cpu_usage > 80:
scale_deployment(3) # 扩容到3副本
elif cpu_usage < 20:
scale_deployment(1) # 缩容到1副本
价值点:
用Python调用Kubernetes和Prometheus API,替代手动 kubectl scale
。结合监控数据动态调整资源,提升集群利用率。
四、进阶方向:从脚本到AI集成
Bash + Python + 大模型
用Python调用LLM生成运维文档(如自动编写故障处理手册): python
复制
from langchain.llms import HuggingFacePipeline
llm = HuggingFacePipeline.from_model_id(model_id="gpt2", task="text-generation")
docs = llm("Generate MySQL主从复制故障排查步骤:", max_length=500)
withopen("mysql_failover_doc.md", "w") as f:
f.write(docs)AIOps 实践
将日志数据通过Python发送到AI分析平台(如Elastic APM + ML模块),自动检测异常模式。
关键总结
- Bash
:适合快速实现IaC(基础设施即代码)、轻量级自动化,但复杂逻辑需交Python。 - Python
:在数据分析、模型集成、API调用等场景中不可替代,可调用Bash能力(如 subprocess
)。 - AI融合
:用Python调用LLM生成代码/文档,或训练定制化模型(如时序预测),显著提升决策速度。
最终目标:
用脚本处理重复性操作(如备份、监控),释放时间用于设计AI驱动的预测性运维系统。 从“写脚本的运维”升级为“用AI优化系统的SRE(站点可靠性工程师)”。
文章转载自韩公子的Linux大集市,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




