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

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
2月前
|
Shell
一个用于添加/删除定时任务的shell脚本
一个用于添加/删除定时任务的shell脚本
113 1
|
1月前
|
Shell Linux 测试技术
6种方法打造出色的Shell脚本
6种方法打造出色的Shell脚本
65 2
6种方法打造出色的Shell脚本
|
1月前
|
缓存 监控 Shell
如何使用 HBase Shell 进行数据的实时监控和备份?
如何使用 HBase Shell 进行数据的实时监控和备份?
|
1月前
|
XML JSON 监控
Shell脚本要点和难点以及具体应用和优缺点介绍
Shell脚本在系统管理和自动化任务中扮演着重要角色。尽管存在调试困难、可读性差等问题,但其简洁高效、易于学习和强大的功能使其在许多场景中不可或缺。通过掌握Shell脚本的基本语法、常用命令和函数,并了解其优缺点,开发者可以编写出高效的脚本来完成各种任务,提高工作效率。希望本文能为您在Shell脚本编写和应用中提供有价值的参考和指导。
61 1
|
1月前
|
Ubuntu Shell 开发工具
ubuntu/debian shell 脚本自动配置 gitea git 仓库
这是一个自动配置 Gitea Git 仓库的 Shell 脚本,支持 Ubuntu 20+ 和 Debian 12+ 系统。脚本会创建必要的目录、下载并安装 Gitea,创建 Gitea 用户和服务,确保 Gitea 在系统启动时自动运行。用户可以选择从官方或小绿叶技术博客下载安装包。
49 2
|
2月前
|
监控 网络协议 Shell
ip和ip网段攻击拦截系统-绿叶结界防火墙系统shell脚本
这是一个名为“小绿叶技术博客扫段攻击拦截系统”的Bash脚本,用于监控和拦截TCP攻击。通过抓取网络数据包监控可疑IP,并利用iptables和firewalld防火墙规则对这些IP进行拦截。同时,该系统能够查询数据库中的白名单,确保合法IP不受影响。此外,它还具备日志记录功能,以便于后续分析和审计。
57 6
|
1月前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
2月前
|
监控 Unix Shell
shell脚本编程学习
【10月更文挑战第1天】shell脚本编程
82 12
|
2月前
|
存储 运维 监控
自动化运维:使用Shell脚本简化日常任务
【9月更文挑战第35天】在IT运维的日常工作中,重复性的任务往往消耗大量的时间。本文将介绍如何通过编写简单的Shell脚本来自动化这些日常任务,从而提升效率。我们将一起探索Shell脚本的基础语法,并通过实际案例展示如何应用这些知识来创建有用的自动化工具。无论你是新手还是有一定经验的运维人员,这篇文章都会为你提供新的视角和技巧,让你的工作更加轻松。
72 2