优秀的编程知识分享平台

网站首页 > 技术文章 正文

linux监控与日志配置脚本_linux监控目录执行脚本

nanyue 2025-10-14 02:25:01 技术文章 1 ℃

随着云计算和容器化技术的快速发展,运维环境日益复杂。传统的手动部署方式不仅耗时耗力,还容易出错。一键部署脚本通过自动化工具链,将繁琐的部署流程简化为几个简单的命令,极大地提高了运维效率。本文将详细介绍2个适用于高级运维人员的【监控与日志配置】一键部署脚本

一、实时资源监控与报警脚本

  1. 依赖安装(通用方法)
# 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
  1. 监控脚本 (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
  1. 部署步骤
# 赋予执行权限
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

二、日志集中管理与轮转配置

  1. 依赖安装
# Debian/Ubuntu
sudo apt-get install -y rsyslog auditd logrotate fail2ban

# RHEL/CentOS
sudo yum install -y rsyslog audit fail2ban
  1. 日志轮转配置 (/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
}
  1. 日志收集脚本 (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
  1. 部署步骤
# 配置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

三、验证与调试

  1. 监控脚本验证
# 查看实时日志
journalctl -u resource-monitor -f

# 模拟CPU负载测试
stress-ng --cpu 4 --timeout 60
  1. 日志系统验证
# 检查远程日志接收
ssh $REMOTE_SERVER "grep 'log_collector' /var/log/syslog"

# 查看日志轮转状态
logrotate -d /etc/logrotate.d/custom

四、高级配置建议

  1. 加密传输:在rsyslog配置中添加TLS支持
$DefaultNetstreamDriver gtls
$ActionSendStreamDriverAuthMode x509/name
$ActionSendStreamDriverPermittedPeer log.example.com
  1. 监控看板:部署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
  1. 自动化修复:在监控脚本中添加自动清理逻辑
# 清理旧日志
find /var/log -type f -mtime +30 -exec rm -f {} \;


通过这两个方案,可实现从基础监控到日志全生命周期管理。建议根据实际环境调整阈值和路径,并定期检查日志完整性(使用 logcheck 工具)


以上,既然看到这里了,如果觉得不错,随手点赞、收藏、转发三连吧,如果想第一时间收到推送,也可以给我一个关注~谢谢你看我的文章,我们,下次再见。

Tags:

最近发表
标签列表