文章总结: 本文介绍优化后的GrayLog配置备份脚本,新增对/opt和/etc/graylog/server目录的备份,采用sshpass+rsync实现增量同步以减少带宽占用。脚本包含MongoDB数据库备份、压缩打包、NAS传输及钉钉通知功能,需提前安装sshpass并配置crontab定时任务。 综合评分: 72 文章分类: 安全运营,安全工具,技术标准
【优化篇】shell脚本实现GrayLog配置的定期备份
原创
yuanfan2012 yuanfan2012
Linux运维实践派
2026年4月18日 17:47 浙江
在小说阅读器读本章
去阅读
1、优化解决的问题点
shell脚本实现GrayLog配置的定期备份
在上面这个之前的文章所使用的脚本基础上,进行了优化,为了解决几个问题
- 1、需要备份/opt目录
PrometheusAlert 以及webhook服务、和一些常用联动的脚本均在此目录下
- 2、备份一下/etc/graylog/server/目录
- 3、由于Graylog可能在其他局点,与本地的NAS服务器之间的带宽有限,为了不占用专线的带宽,使用
sshpass+rsync命令的方式对/opt目录备份时只需要进行增量差异同步即可,不必每次都重新传输备份一次/opt目录
2、优化后的具体脚本
/opt/graylog_mongodb_backup.sh
#!/bin/bash
# LOCK_FILE文件路径
LOCK_FILE=/var/log/mongodb_backup_record.log
# 钉钉机器人 Webhook URL
WEBHOOK_URL="https://oapi.dingtalk.com/robot/send?access_token=XXXXXXXXXX"
# 获取当前日期作为变量
current_datetime=$(date +"%Y-%m-%d_%H_%M_%S")
#current_date=$(date +"%Y-%m-%d")
# 定义备份目录和文件名
backup_dir="/home/graylog_mongodb_backup"
backup_file="graylog_mongodb_backup$current_datetime"
# MongoDB 连接参数
#mongodb_host="localhost"
#mongodb_user="graylog"
#mongodb_password=""
mongodb_database="graylog"
# NAS_IP及 目标路径
nas_ip="192.168.31.100"
nas_username="nasadmin"
nas_target_dir="/volume1/FileServer/GraylogBackup/192.168.31.74"
nas_ssh_port="22"
nas_ssh_Password="XXXXXXXXX"
# 创建备份目录
mkdir -p "$backup_dir"
# 备份 MongoDB 数据库
#mongodump -h "$mongodb_host" -u "$mongodb_user" -p "$mongodb_password" -d "$mongodb_database" -o "$backup_dir" >> ${LOCK_FILE} 2>&1
mongodump -d "$mongodb_database" -o "$backup_dir" >> ${LOCK_FILE} 2>&1
# 检查mongodump 命令是否执行成功
if [ $? -eq 0 ]; then
echo `date +"%Y-%m-%d %H:%M:%S"` >> ${LOCK_FILE} 2>&1
echo"MongoDB backup completed successfully." >> ${LOCK_FILE} 2>&1
else
echo `date +"%Y-%m-%d %H:%M:%S"` >> ${LOCK_FILE} 2>&1
echo"Error occurred while performing MongoDB backup." >> ${LOCK_FILE} 2>&1
exit 1
fi
# 打包备份文件为 tar.gz 格式
cd$backup_dir
tar -zcvf /tmp/"$backup_file.tar.gz" graylog >> ${LOCK_FILE} 2>&1
# 检查打包命令是否执行成功
if [ $? -eq 0 ]; then
echo `date +"%Y-%m-%d %H:%M:%S"` >> ${LOCK_FILE} 2>&1
echo"Backup files compressed successfully." >> ${LOCK_FILE} 2>&1
else
echo `date +"%Y-%m-%d %H:%M:%S"` >> ${LOCK_FILE} 2>&1
echo"Error occurred while compressing backup files." >> ${LOCK_FILE} 2>&1
exit 1
fi
# 上传备份文件到 NAS
current_time=$(date +"%Y-%m-%d %H:%M:%S")
sshpass -p $nas_ssh_Password rsync -avzP scp -r -P "$nas_ssh_port" /opt "$nas_username@$nas_ip:$nas_target_dir" >> ${LOCK_FILE} 2>&1
sshpass -p $nas_ssh_Password rsync -avzP scp -r -P "$nas_ssh_port" /etc/graylog/server "$nas_username@$nas_ip:$nas_target_dir" >> ${LOCK_FILE} 2>&1
sshpass -p $nas_ssh_Password scp -P "$nas_ssh_port" /tmp/"$backup_file.tar.gz""$nas_username@$nas_ip:$nas_target_dir" >> ${LOCK_FILE} 2>&1
# 检查上传命令是否执行成功
if [ $? -eq 0 ]; then
echo `date +"%Y-%m-%d %H:%M:%S"` >> ${LOCK_FILE} 2>&1
echo"Backup files uploaded to NAS successfully." >> ${LOCK_FILE} 2>&1
echo"备份文件上传成功,发送dingding通知" >> ${LOCK_FILE} 2>&1
notify_message="【通知】:Graylog服务器<font color=#FF0000> IP:($(hostname -I))</font> 的MongoDB数据库备份文件已上传至NAS <font color=#FF0000>IP:($nas_ip) </font>。\n\n【备份文件上传时间】:<font color=#FF0000> $current_time </font>\n\n【备份文件上传路径及文件名称】:<font color=#FF0000>$nas_target_dir/$backup_file.tar.gz</font>"
echo$notify_message >> ${LOCK_FILE} 2>&1
curl -s -H "Content-Type: application/json" -d "{\"msgtype\":\"markdown\",\"markdown\":{\"title\":\"通知\",\"text\":\"$notify_message\"}}""$WEBHOOK_URL" >> ${LOCK_FILE} 2>&1
# 删除临时备份文件和目录
rm -rf "$backup_dir" >> ${LOCK_FILE} 2>&1
rm /tmp/"$backup_file.tar.gz" >> ${LOCK_FILE} 2>&1
else
echo `date +"%Y-%m-%d %H:%M:%S"` >> ${LOCK_FILE} 2>&1
echo"Error occurred while uploading backup files to NAS.">> ${LOCK_FILE} 2>&1
# 删除临时备份目录
rm -rf "$backup_dir" >> ${LOCK_FILE} 2>&1
exit 1
fi
说明
- 1、需要提前yum install sshpass组件
- 2、NAS要开启rsync服务
- 3、然后再配置crontab定时任务
crontab -l
# 每天 2:00 进行备份
0 3 * * * /opt/graylog_mongodb_backup.sh
4、最终的效果如截图所示
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:Linux运维实践派 yuanfan2012 yuanfan2012《【优化篇】shell脚本实现GrayLog配置的定期备份》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论