shell脚本实现GrayLog配置的定期备份

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
文件存储 NAS,50GB 3个月
简介: shell脚本实现GrayLog配置的定期备份

shell脚本实现GrayLog配置的定期备份

一、需求

需要定期备份GrayLog5.1版本的配置

二、实现步骤或者思路

众所周知GrayLog的配置都保存在MongoDB数据库,这时我们只需备份GrayLog的MongoDB即可

  • 1、使用 mongodump命令进行数据库备份导出

需要确认GrayLog的数据库是否有加账号密码认证 ,可以参考之前的文章

业务服务器免装插件,使用rsync+nxlog同步+采集应用日志并接入到GrayLog5.1

  • 2、备份完成后进行压缩然后上传到NAS上进行备份文件的存储

这里要实现SCP免密上传,可以参考之前的文章和群晖官方的文章

利用群晖NAS+shell脚本实现运维命令执行结果文件自动上传

https://kb.synology.cn/zh-cn/DSM/tutorial/How_to_log_in_to_DSM_with_key_pairs_as_admin_or_root_permission_via_SSH_on_computers
  • 3、备份完成后可以钉钉发送通知
  • 4、结合crontab进行定期备份
0 1 * * * /opt/graylog_mongodb_backup.sh
  • 5、最后测试利用数据库备份文件进行恢复
mongorestore --drop -h 127.0.0.1 -d graylog  /root/restore_mongodb/graylog/ -u graylog

三、实现效果

1、最终实现的备份脚本如下

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=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
# 获取当前日期作为变量
current_datetime=$(date +"%Y-%m-%d_%H_%M_%S")
# 定义备份目录和文件名
backup_dir="/home/graylog_mongodb_backup"
backup_file="graylog_mongodb_backup$current_datetime"
# MongoDB 连接参数
mongodb_host="localhost"
mongodb_user="graylog"
mongodb_password="Password请自己修改为实现的账号密码"
mongodb_database="graylog"
# NAS 目标路径
nas_ip="192.168.31.200"
nas_username="yuanfan"
nas_target_dir="/volume1/ShareFolder"
nas_ssh_port="8122"
nas_ssh_keyfile="/opt/nas_id_rsa.pem"
# 创建备份目录
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 命令是否执行成功
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")
scp -i $nas_ssh_keyfile -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

2、执行脚本

(图片点击放大查看)

3、钉钉通知效果及确认NAS上的文件

(图片点击放大查看)

(图片点击放大查看)

4、还原测试

先删除一些配置

(图片点击放大查看)

(图片点击放大查看)

(图片点击放大查看)

下载NAS的备份并上传到GrayLog上

graylog_mongodb_backup2023-08-19_22_10_50.tar.gz
mkdir restore_mongodb
tar -zxf graylog_mongodb_backup2023-08-19_22_10_50.tar.gz -C restore_mongodb/
还原命令
mongorestore --drop -h 127.0.0.1 -d graylog  /root/restore_mongodb/graylog/ -u graylog

输入MongoDB数据库账号graylog的密码

(图片点击放大查看)

还原完成,无报错说明还原成功

(图片点击放大查看)

刷新GrayLog的界面上,看到之前删除的配置已经还原回来了

(图片点击放大查看)

Tips

结合crontab进行每天定时备份

0 1 * * * /opt/graylog_mongodb_backup.sh

相关文章
|
8天前
|
存储 安全 Unix
七、Linux Shell 与脚本基础
别再一遍遍地敲重复的命令了,把它们写进Shell脚本,就能一键搞定。脚本本质上就是个存着一堆命令的文本文件,但要让它“活”起来,有几个关键点:文件开头最好用#!/usr/bin/env bash来指定解释器,并用chmod +x给它执行权限。执行时也有讲究:./script.sh是在一个新“房间”(子Shell)里跑,不影响你;而source script.sh是在当前“房间”里跑,适合用来加载环境变量和配置文件。
149 10
|
7天前
|
存储 Shell Linux
八、Linux Shell 脚本:变量与字符串
Shell脚本里的变量就像一个个贴着标签的“箱子”。装东西(赋值)时,=两边千万不能有空格。用单引号''装进去的东西会原封不动,用双引号""则会让里面的$变量先“变身”再装箱。默认箱子只能在当前“房间”(Shell进程)用,想让隔壁房间(子进程)也能看到,就得给箱子盖个export的“出口”戳。此外,Shell还自带了$?(上条命令的成绩单)和$1(别人递进来的第一个包裹)等许多特殊箱子,非常有用。
62 2
|
27天前
|
数据采集 监控 Shell
无需Python:Shell脚本如何成为你的自动化爬虫引擎?
Shell脚本利用curl/wget发起请求,结合文本处理工具构建轻量级爬虫,支持并行加速、定时任务、增量抓取及分布式部署。通过随机UA、异常重试等优化提升稳定性,适用于日志监控、价格追踪等场景。相比Python,具备启动快、资源占用低的优势,适合嵌入式或老旧服务器环境,复杂任务可结合Python实现混合编程。
|
4月前
|
Shell
Shell脚本循环控制:shift、continue、break、exit指令
使用这些命令可以让你的Shell脚本像有生命一样动起来。正确使用它们,你的脚本就能像一场精心编排的舞蹈剧目,既有旋律的起伏,也有节奏的跳跃,最终以一场惊艳的表演结束。每一个动作、每一个转折点,都准确、优雅地完成所需要表达的逻辑。如此,你的脚本不只是冰冷的代码,它透过终端的界面,跳着有节奏的舞蹈,走进观众——使用者的心中。
203 60
|
3月前
|
Web App开发 缓存 安全
Linux一键清理系统垃圾:释放30GB空间的Shell脚本实战​
这篇博客介绍了一个实用的Linux系统盘清理脚本,主要功能包括: 安全权限检查和旧内核清理,保留当前使用内核 7天以上日志文件清理和系统日志压缩 浏览器缓存(Chrome/Firefox)、APT缓存、临时文件清理 智能清理Snap旧版本和Docker无用数据 提供磁盘空间使用前后对比和大文件查找功能 脚本采用交互式设计确保安全性,适合定期维护开发环境、服务器和个人电脑。文章详细解析了脚本的关键功能代码,并给出了使用建议。完整脚本已开源,用户可根据需求自定义调整清理策略。
213 1
|
5月前
|
存储 Unix Shell
确定Shell脚本在操作系统中的具体位置方法。
这对于掌握Linux的文件系统组织结构和路径方面的理解很有帮助,是我们日常工作和学习中都可能使用到的知识。以上讲解详细清晰,应用简便,是每一个想要精通操作系统的计算机爱好者必备的实用技能。
108 17
|
5月前
|
Linux Shell 数据安全/隐私保护
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
271 3
|
应用服务中间件 Shell 网络安全
shell 自动配置nginx 证书
自动配置ssl
229 0
|
7月前
|
关系型数据库 MySQL Shell
MySQL 备份 Shell 脚本:支持远程同步与阿里云 OSS 备份
一款自动化 MySQL 备份 Shell 脚本,支持本地存储、远程服务器同步(SSH+rsync)、阿里云 OSS 备份,并自动清理过期备份。适用于数据库管理员和开发者,帮助确保数据安全。
|
5月前
|
Linux Shell
Centos或Linux编写一键式Shell脚本删除用户、组指导手册
Centos或Linux编写一键式Shell脚本删除用户、组指导手册
128 4