【优化篇】shell脚本实现GrayLog配置的定期备份

admin 2026-04-23 05:26:43 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文介绍优化后的GrayLog配置备份脚本,新增对/opt和/etc/graylog/server目录的备份,采用sshpass+rsync实现增量同步以减少带宽占用。脚本包含MongoDB数据库备份、压缩打包、NAS传输及钉钉通知功能,需提前安装sshpass并配置crontab定时任务。 综合评分: 72 文章分类: 安全运营,安全工具,技术标准


cover_image

【优化篇】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
&nbsp; &nbsp; notify_message="【通知】:Graylog服务器<font color=#FF0000> IP:($(hostname -I))</font> 的MongoDB数据库备份文件已上传至NAS <font color=#FF0000>IP:($nas_ip) </font>。\n\n【备份文件上传时间】:<font color=#FF0000>&nbsp;$current_time&nbsp;</font>\n\n【备份文件上传路径及文件名称】:<font color=#FF0000>$nas_target_dir/$backup_file.tar.gz</font>"
&nbsp; &nbsp;&nbsp;echo$notify_message&nbsp; >>&nbsp;${LOCK_FILE}&nbsp;2>&1
&nbsp; &nbsp; curl -s -H&nbsp;"Content-Type: application/json"&nbsp;-d&nbsp;"{\"msgtype\":\"markdown\",\"markdown\":{\"title\":\"通知\",\"text\":\"$notify_message\"}}""$WEBHOOK_URL"&nbsp; >>&nbsp;${LOCK_FILE}&nbsp;2>&1
# 删除临时备份文件和目录
&nbsp; &nbsp; rm -rf&nbsp;"$backup_dir"&nbsp;>>&nbsp;${LOCK_FILE}&nbsp;2>&1
&nbsp; &nbsp; rm /tmp/"$backup_file.tar.gz"&nbsp;>>&nbsp;${LOCK_FILE}&nbsp;2>&1
else
&nbsp; &nbsp;&nbsp;echo&nbsp;`date +"%Y-%m-%d %H:%M:%S"` &nbsp;>>&nbsp;${LOCK_FILE}&nbsp;2>&1
&nbsp; &nbsp;&nbsp;echo"Error occurred while uploading backup files to NAS.">>&nbsp;${LOCK_FILE}&nbsp;2>&1
# 删除临时备份目录
&nbsp; &nbsp; rm -rf&nbsp;"$backup_dir"&nbsp;>>&nbsp;${LOCK_FILE}&nbsp;2>&1
&nbsp; &nbsp;&nbsp;exit&nbsp;1
fi

说明

  • 1、需要提前yum install sshpass组件
  • 2、NAS要开启rsync服务
  • 3、然后再配置crontab定时任务
&nbsp;crontab -l
# 每天 2:00 进行备份
0 3 * * * &nbsp; &nbsp;/opt/graylog_mongodb_backup.sh

4、最终的效果如截图所示


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:Linux运维实践派 yuanfan2012 yuanfan2012《【优化篇】shell脚本实现GrayLog配置的定期备份》

评论:0   参与:  0