网站首页 > 技术文章 正文
随着云计算和容器化技术的快速发展,运维环境日益复杂。传统的手动部署方式不仅耗时耗力,还容易出错。一键部署脚本通过自动化工具链,将繁琐的部署流程简化为几个简单的命令,极大地提高了运维效率。本文将详细介绍2个适用于高级运维人员的【监控与日志配置】一键部署脚本
一、实时资源监控与报警脚本
- 依赖安装(通用方法)
# Debian/Ubuntu
sudo apt-get update
sudo apt-get install -y mailutils postfix cron logrotate
# RHEL/CentOS
sudo yum install -y mailx postfix cronie logrotate
- 监控脚本 (resource_monitor.sh)
#!/bin/bash
# 系统资源监控 v2.0 - 含依赖自检
# 配置参数
THRESHOLDS=(80 80 90) # CPU/MEM/DISK 百分比阈值
ALERT_EMAIL="admin@example.com"
LOG_DIR="/var/log/monitor"
PID_FILE="/var/run/resource_monitor.pid"
# 自检函数
check_deps() {
for cmd in top free df; do
if ! command -v $cmd &> /dev/null; then
echo "错误: 缺少依赖工具 $cmd" | mail -s "监控脚本安装失败" $ALERT_EMAIL
exit 1
fi
done
}
# 日志初始化
init_log() {
mkdir -p $LOG_DIR
echo "=== $(date) 监控启动 ===" > $LOG_DIR/monitor.log
}
# 资源检查
check_resources() {
# CPU 使用率
cpu_usage=$(top -bn1 | grep "%Cpu" | awk '{print 100 - $8}')
# 内存使用率
mem_usage=$(free | awk '/Mem/ {printf "%.1f", $3/$2 * 100}')
# 磁盘使用率
disk_usage=$(df -h | awk '/\/$/ {print $5}' | sed 's/%//')
# 阈值判断
for i in 0 1 2; do
metric=${THRESHOLDS[i]}
value=${!i}
if (( $(echo "$value > $metric" | bc -l) )); then
alert="【紧急】${metric==0?"CPU":(metric==1?"内存":"磁盘")} 使用率超标: ${value}% (阈值 ${metric}%)"
echo "$(date) - $alert" >> $LOG_DIR/alert.log
echo -e "Subject: 系统警报\n\n$alert" | mail -s "资源警报" $ALERT_EMAIL
fi
done
}
# 主函数
main() {
check_deps
init_log
echo "监控服务已启动 (PID $)" >> $LOG_DIR/monitor.log
while true; do
check_resources
sleep 300 # 每5分钟检查
done
}
main
- 部署步骤
# 赋予执行权限
chmod +x resource_monitor.sh
# 创建systemd服务
cat <<EOF | sudo tee /etc/systemd/system/resource-monitor.service
[Unit]
Description=Resource Monitor Service
After=network.target
[Service]
ExecStart=/opt/resource_monitor.sh
Restart=always
User=root
[Install]
WantedBy=multi-user.target
EOF
# 启动服务
sudo systemctl daemon-reload
sudo systemctl start resource-monitor
sudo systemctl enable resource-monitor
# 验证状态
sudo systemctl status resource-monitor
二、日志集中管理与轮转配置
- 依赖安装
# Debian/Ubuntu
sudo apt-get install -y rsyslog auditd logrotate fail2ban
# RHEL/CentOS
sudo yum install -y rsyslog audit fail2ban
- 日志轮转配置 (/etc/logrotate.d/custom)
# 应用日志轮转规则
/var/log/app/*.log {
daily
missingok
rotate 14
compress
delaycompress
postrotate
systemctl restart rsyslog > /dev/null 2>&1 || true
endscript
}
# 安全日志配置
/var/log/secure {
weekly
rotate 4
nocompress
missingok
}
- 日志收集脚本 (log_collector.sh)
#!/bin/bash
# 日志集中管理 v1.1
# 配置参数
REMOTE_SERVER="log.example.com"
REMOTE_PORT="514"
LOG_FILES=(
"/var/log/syslog"
"/var/log/auth.log"
"/var/log/secure"
)
# 检查rsyslog配置
configure_rsyslog() {
if ! grep -q "\$ActionQueueType LinkedList" /etc/rsyslog.conf; then
echo "\$ActionQueueType LinkedList" >> /etc/rsyslog.conf
echo "\$ActionQueueFileName fwdRule1" >> /etc/rsyslog.conf
systemctl restart rsyslog
fi
}
# 同步日志
sync_logs() {
for log in "${LOG_FILES[@]}"; do
logger -t log_collector "转发日志: $(basename $log)"
logger -n $REMOTE_SERVER -P $REMOTE_PORT -p user.notice < $log
done
}
# 主函数
main() {
configure_rsyslog
while true; do
sync_logs
sleep 3600 # 每小时同步
done
}
main
- 部署步骤
# 配置rsyslog远程接收
sudo sed -i 's/^#$.*$514/\1514/' /etc/rsyslog.conf
sudo systemctl restart rsyslog
# 部署日志收集服务
cat <<EOF | sudo tee /etc/systemd/system/log-collector.service
[Unit]
Description=Log Collector Service
After=network.target
[Service]
ExecStart=/opt/log_collector.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl start log-collector
sudo systemctl enable log-collector
# 配置fail2ban防暴力破解
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo systemctl restart fail2ban
三、验证与调试
- 监控脚本验证
# 查看实时日志
journalctl -u resource-monitor -f
# 模拟CPU负载测试
stress-ng --cpu 4 --timeout 60
- 日志系统验证
# 检查远程日志接收
ssh $REMOTE_SERVER "grep 'log_collector' /var/log/syslog"
# 查看日志轮转状态
logrotate -d /etc/logrotate.d/custom
四、高级配置建议
- 加密传输:在rsyslog配置中添加TLS支持
$DefaultNetstreamDriver gtls
$ActionSendStreamDriverAuthMode x509/name
$ActionSendStreamDriverPermittedPeer log.example.com
- 监控看板:部署Prometheus+Node Exporter
wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz
tar xvfz node_exporter-*.*-amd64.tar.gz
mv node_exporter-*.*-amd64 /opt/node_exporter
- 自动化修复:在监控脚本中添加自动清理逻辑
# 清理旧日志
find /var/log -type f -mtime +30 -exec rm -f {} \;
通过这两个方案,可实现从基础监控到日志全生命周期管理。建议根据实际环境调整阈值和路径,并定期检查日志完整性(使用 logcheck 工具)
以上,既然看到这里了,如果觉得不错,随手点赞、收藏、转发三连吧,如果想第一时间收到推送,也可以给我一个关注~谢谢你看我的文章,我们,下次再见。
猜你喜欢
- 2025-10-14 ELK运维之路(Elasticsearch7集群组建-7.1
- 2025-10-14 Node-RED教程200例_nodered视频教程
- 2025-10-14 Trino:一个开源分布式大数据SQL查询引擎
- 2025-10-14 低代码工具Node-Red入门指南_低代码软件开发平台
- 2025-10-14 js中进程和线程的了解?Node中进程之间是如何进行通信的?
- 2025-10-14 第三章、TS 的编译调试_tsc命令编译参数
- 2025-10-14 node.js 调用 shelljs 接收 stdin 输入
- 2025-10-14 Redis集群更换节点IP后如何恢复集群并保留完整集群数据
- 2025-10-14 Prometheus部署+node_exporter采集数据
- 2025-10-14 如何利用Agent构建自动化数据采集模型
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (76)
- js判断是否是json字符串 (75)
- c语言min函数头文件 (77)
- asynccallback (87)
- localstorage.removeitem (77)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 无效的列索引 (74)