编写脚本一键安装rsyslog

2024-03-02 10:12

本文主要是介绍编写脚本一键安装rsyslog,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

脚本分解

环境检测部分

检查操作系统

#!/bin/bash# 检查是否为 Debian 类型
if [ -f /etc/debian_version ]; thenecho "当前操作系统是 Debian 类型"SYSLOG_SERVICE="rsyslog"INSTALL_COMMAND="apt-get install -y"CONFIG_FILE="/etc/rsyslog.conf"RESTART_COMMAND="systemctl restart rsyslog"ID="debian"
elif [ -f /etc/redhat-release ]; then
# 检查是否为 Red Hat 类型echo "当前操作系统是 Red Hat 类型或其衍生版本"SYSLOG_SERVICE="rsyslog"CONFIG_FILE="/etc/rsyslog.conf"INSTALL_COMMAND="yum install -y"RESTART_COMMAND="systemctl restart rsyslog"ID="redhat"
elseecho "不支持的 Linux 发行版。"exit 1
fi

检查是否存在rsyslog

# 步骤 2:检查 syslog 是否安装
if ! command -v $SYSLOG_SERVICE &> /dev/null && ! systemctl status rsyslog.service &> /dev/null; thenecho "$SYSLOG_SERVICE 未安装。正在安装..."# 交互式询问是否有互联网连接read -p "是否有互联网连接?(y/n): " INTERNET_CONNECTIONif [[ $INTERNET_CONNECTION == "y" ]]; then# 从互联网仓库安装$INSTALL_COMMAND $SYSLOG_SERVICEelif [[ $INTERNET_CONNECTION == "n" ]]; then# 从本地软件包安装if [[ $ID == "debian" || $ID == "ubuntu" ]]; thenecho "正在使用本地 rsyslog 软件包安装..."dpkg -i /path/to/local/rsyslog/package.debapt-get install -f   # 修复任何依赖elif [[ $ID == "centos" || $ID == "rhel" ]]; thenecho "正在使用本地 rsyslog 软件包安装..."rpm -ivh /path/to/local/rsyslog/package.rpmyum install -f   # 修复任何依赖fielseecho "无效的输入。请输入 'y' 或 'n'。"exit 1fi# 检查安装是否成功if [ $? -ne 0 ]; thenecho "$SYSLOG_SERVICE 安装失败。正在退出。"exit 1fi
fi

用户输入部分

#!/bin/bash# 获取本机IP地址
LOCAL_IP=$(hostname -I | awk '{print $1}')# 提示用户输入要转发 syslog 到的 IP 地址
read -p "请输入要转发 syslog 到的 IP 地址 [$LOCAL_IP]: " IP_ADDRESS
IP_ADDRESS=${IP_ADDRESS:-$LOCAL_IP}# 提示用户输入 syslog 转发的协议
read -p "请输入 syslog 转发的协议 (tcp/udp): " PROTOCOL
PROTOCOL=${PROTOCOL:-udp}# 提示用户输入 syslog 转发协议的端口
read -p "请输入 syslog 转发协议的端口 [514]: " PORT
PORT=${PORT:-514}# 提示用户输入要记录的本机IP地址
read -p "请输入要记录的本机 IP 地址 [$LOCAL_IP]: " MY_IP
MY_IP=${MY_IP:-$LOCAL_IP}# 提示用户输入是否开启web日志转发(y/n)
read -p "是否开启web错误日志收集?(y/n): " ENABLE_WEB_LOG_FORWARDING
ENABLE_WEB_LOG_FORWARDING=${ENABLE_WEB_LOG_FORWARDING:-n}# 提示用户开启哪些类型的日志转发(类型.级别),循环实现,以横线-结束
# 创建一个数组来存储用户选择的日志类型和级别
DEFAULT_LOG_TYPES=("auth.*" "authpriv.*")
LOG_TYPES=("${DEFAULT_LOG_TYPES[@]}")# 提示用户输入要开启的日志类型和级别,直到输入横线为止
while true; doread -p "请输入要开启的日志类型和级别 (类型.级别),或输入 - 结束: " LOG_TYPEif [[ $LOG_TYPE == "-" ]]; thenbreakelif [[ " ${LOG_TYPES[@]} " =~ " $LOG_TYPE " ]]; thenecho "$LOG_TYPE 已经包含在默认值中,不需手动添加。"elseLOG_TYPES+=("$LOG_TYPE")fi
done# 打印用户选择的日志类型和级别
echo "您选择了以下日志类型和级别:"
for log_type in "${LOG_TYPES[@]}"; doecho "$log_type"
doneecho "将 syslog 转发到 IP 地址: $IP_ADDRESS,协议: $PROTOCOL,端口: $PORT,本机ip为:$MY_IP,是否开启web日志转发:$ENABLE_WEB_LOG_FORWARDING"

web错误日志写入配置文件部分

如果ENABLE_WEB_LOG_FORWARDING为y,则将下面的内容写入

module(load="imfile")
# 监控文件变化
input(type="imfile"File="/var/log/nginx/error.log"Tag="NGINXERROR")
template(name="MyTemplate" type="string" string="%$MY_IP%: %timestamp% %hostname% %syslogtag% %msg%\n")
:syslogtag, isequal, "NGINXERROR" $IP_ADDRESS:$PORT/$PROTOCOL;MyTemplate

写入到/etc/rsyslog.d/nginx-error.conf

脚本实现:


# 提示用户输入是否开启web日志转发
read -p "是否开启web错误日志收集?(y/n): " ENABLE_WEB_LOG_FORWARDING
ENABLE_WEB_LOG_FORWARDING=${ENABLE_WEB_LOG_FORWARDING:-n}if [[ $ENABLE_WEB_LOG_FORWARDING == "y" ]]; then# 将配置写入文件echo "module(load=\"imfile\")" > /etc/rsyslog.d/nginx-error.confecho "# 监控文件变化" >> /etc/rsyslog.d/nginx-error.confecho "input(type=\"imfile\"" >> /etc/rsyslog.d/nginx-error.confecho "    File=\"/var/log/nginx/error.log\"" >> /etc/rsyslog.d/nginx-error.confecho "    Tag=\"NGINXERROR\")" >> /etc/rsyslog.d/nginx-error.confecho "template(name=\"MyTemplate\" type=\"string\" string=\"%$LOCAL_IP%: %timestamp% %hostname% %syslogtag% %msg%\\n\")" >> /etc/rsyslog.d/nginx-error.confecho ":syslogtag, isequal, \"NGINXERROR\" @$IP_ADDRESS:$PORT/$PROTOCOL;MyTemplate" >> /etc/rsyslog.d/nginx-error.confecho "已将 web错误日志转发 配置写入 /etc/rsyslog.d/nginx-error.conf 文件"
elseecho "未开启 web 日志转发,不写入web错误日志"
fi

日志类型进行转发的模式

对于用户输入的每一种日志类型,LOG_TYPES中的

template(name="MyTemplate" type="string" string="%$MY_IP%: %timestamp% %hostname% %syslogtag% %msg%\n")
LOG_TYPE @远程服务器IP:端口号/协议;MyTemplate

写入到/etc/rsyslog.d/wasb-remote.conf 中,按行隔开

# 将配置写入文件
CONF_FILE="/etc/rsyslog.d/wasb-remote.conf"
echo "" > $CONF_FILE  # 清空文件内容
echo "template(name=\"MyTemplate\" type=\"string\" string=\"%$MY_IP%: %timestamp% %hostname% %syslogtag% %msg%\\n\")" >> $CONF_FILE
for log_type in "${LOG_TYPES[@]}"; doecho "$log_type @$IP_ADDRESS:$PORT/$PROTOCOL;MyTemplate" >> $CONF_FILEecho "" >> $CONF_FILE  # 添加空行分隔
doneecho "已将配置写入 $CONF_FILE 文件"

重启服务

重启rsyslog服务,并且打印出rsyslog服务的status命令的结果

#!/bin/bash# 重启 rsyslog 服务
echo "正在重启 rsyslog 服务..."
systemctl restart rsyslog# 打印 rsyslog 服务状态
echo "rsyslog 服务状态:"
systemctl status rsyslog

不包含环境检查的一键脚本

#!/bin/bash# 获取本机IP地址
LOCAL_IP=$(hostname -I | awk '{print $1}')# 提示用户输入要转发 syslog 到的 IP 地址
read -p "请输入要转发 syslog 到的 IP 地址 [$LOCAL_IP]: " IP_ADDRESS
IP_ADDRESS=${IP_ADDRESS:-$LOCAL_IP}# 提示用户输入 syslog 转发的协议
read -p "请输入 syslog 转发的协议 (tcp/udp): " PROTOCOL
PROTOCOL=${PROTOCOL:-udp}# 提示用户输入 syslog 转发协议的端口
read -p "请输入 syslog 转发协议的端口 [514]: " PORT
PORT=${PORT:-514}# 提示用户输入要记录的本机IP地址
read -p "请输入要记录的本机 IP 地址 [$LOCAL_IP]: " MY_IP
MY_IP=${MY_IP:-$LOCAL_IP}# 提示用户输入是否开启web日志转发(y/n)
read -p "是否开启web错误日志收集?(y/n): " ENABLE_WEB_LOG_FORWARDING
ENABLE_WEB_LOG_FORWARDING=${ENABLE_WEB_LOG_FORWARDING:-n}# 提示用户开启哪些类型的日志转发(类型.级别),循环实现,以横线-结束
# 创建一个数组来存储用户选择的日志类型和级别
DEFAULT_LOG_TYPES=("auth.*" "authpriv.*")
LOG_TYPES=("${DEFAULT_LOG_TYPES[@]}")# 提示用户输入要开启的日志类型和级别,直到输入横线为止
while true; doread -p "请输入要开启的日志类型和级别 (类型.级别),或输入 - 结束: " LOG_TYPEif [[ $LOG_TYPE == "-" ]]; thenbreakelif [[ " ${LOG_TYPES[@]} " =~ " $LOG_TYPE " ]]; thenecho "$LOG_TYPE 已经包含在默认值中,不需手动添加。"elseLOG_TYPES+=("$LOG_TYPE")fi
done# 打印用户选择的日志类型和级别
echo "您选择了以下日志类型和级别:"
for log_type in "${LOG_TYPES[@]}"; doecho "$log_type"
doneecho "将 syslog 转发到 IP 地址: $IP_ADDRESS,协议: $PROTOCOL,端口: $PORT,本机ip为:$MY_IP,是否开启web日志转发:$ENABLE_WEB_LOG_FORWARDING"if [[ $ENABLE_WEB_LOG_FORWARDING == "y" ]]; then# 将配置写入文件echo "module(load=\"imfile\")" > /etc/rsyslog.d/nginx-error.confecho "# 监控文件变化" >> /etc/rsyslog.d/nginx-error.confecho "input(type=\"imfile\"" >> /etc/rsyslog.d/nginx-error.confecho "    File=\"/var/log/nginx/error.log\"" >> /etc/rsyslog.d/nginx-error.confecho "    Tag=\"NGINXERROR\")" >> /etc/rsyslog.d/nginx-error.confecho "template(name=\"MyTemplate\" type=\"string\" string=\"%$LOCAL_IP%: %timestamp% %hostname% %syslogtag% %msg%\\n\")" >> /etc/rsyslog.d/nginx-error.confecho ":syslogtag, isequal, \"NGINXERROR\" @$IP_ADDRESS:$PORT/$PROTOCOL;MyTemplate" >> /etc/rsyslog.d/nginx-error.confecho "已将 web错误日志转发 配置写入 /etc/rsyslog.d/nginx-error.conf 文件"
elseecho "未开启 web 日志转发,不写入web错误日志"
fitemplate(name="MyTemplate" type="string" string="%$MY_IP%: %timestamp% %hostname% %syslogtag% %msg%\n")
LOG_TYPE @远程服务器IP:端口号/协议;MyTemplate

写入到/etc/rsyslog.d/wasb-remote.conf 中,按行隔开

# 将配置写入文件
CONF_FILE="/etc/rsyslog.d/wasb-remote.conf"
echo "" > $CONF_FILE  # 清空文件内容
echo "template(name=\"MyTemplate\" type=\"string\" string=\"%$MY_IP%: %timestamp% %hostname% %syslogtag% %msg%\\n\")" >> $CONF_FILE
for log_type in "${LOG_TYPES[@]}"; doecho "$log_type @$IP_ADDRESS:$PORT/$PROTOCOL;MyTemplate" >> $CONF_FILEecho "" >> $CONF_FILE  # 添加空行分隔
doneecho "已将 日志类型.日志级别 配置写入 $CONF_FILE 文件"

包含环境检查的一键脚本

#!/bin/bash
# 检查是否为 Debian 类型
if [ -f /etc/debian_version ]; thenecho "当前操作系统是 Debian 类型"SYSLOG_SERVICE="rsyslog"INSTALL_COMMAND="apt-get install -y"CONFIG_FILE="/etc/rsyslog.conf"RESTART_COMMAND="systemctl restart rsyslog"ID="debian"
elif [ -f /etc/redhat-release ]; then
# 检查是否为 Red Hat 类型echo "当前操作系统是 Red Hat 类型或其衍生版本"SYSLOG_SERVICE="rsyslog"CONFIG_FILE="/etc/rsyslog.conf"INSTALL_COMMAND="yum install -y"RESTART_COMMAND="systemctl restart rsyslog"ID="redhat"
elseecho "不支持的 Linux 发行版。"exit 1
fi# 步骤 2:检查 syslog 是否安装
if ! command -v $SYSLOG_SERVICE &> /dev/null && ! systemctl status rsyslog.service &> /dev/null; thenecho "$SYSLOG_SERVICE 未安装。正在安装..."# 交互式询问是否有互联网连接read -p "是否有互联网连接?(y/n): " INTERNET_CONNECTION#防止找不到pathexport PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binif [[ $INTERNET_CONNECTION == "y" ]]; then# 从互联网仓库安装$INSTALL_COMMAND $SYSLOG_SERVICEelif [[ $INTERNET_CONNECTION == "n" ]]; then# 从本地软件包安装if [ -f /etc/debian_version ]; thenecho "正在使用debian类型 本地 rsyslog 软件包安装..."# todo 待补充echo "正在使用本地 rsyslog 软件包安装..."# 若path中找不到这个 修改path export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin#根据实际的上传路径文件包名修改#  dpkg -i /path/to/local/rsyslog/package.debdpkg -i /path/to/local/rsyslog/rsyslog_8.2302.0-1_amd64.debapt-get install -f   # 修复任何依赖elif [ -f /etc/redhat-release ]; thenecho "正在使用本地 rsyslog 软件包安装..."# todo 待补充#根据实际的上传路径文件包名修改rpm -ivh /path/to/local/rsyslog/rsyslog-8.24.0-57.el7_9.3.x86_64.rpm#yum install -f   # 修复任何依赖 这个命令有问题注释掉fielseecho "无效的输入。请输入 'y' 或 'n'。"exit 1fi# 检查安装是否成功if [ $? -ne 0 ]; thenecho "$SYSLOG_SERVICE 安装失败。正在退出。"exit 1fi
fi# 获取本机IP地址
LOCAL_IP=$(hostname -I | awk '{print $1}')# 提示用户输入要转发 syslog 到的 IP 地址
read -p "请输入要转发 syslog 到的 IP 地址 [$LOCAL_IP]: " IP_ADDRESS
IP_ADDRESS=${IP_ADDRESS:-$LOCAL_IP}# 提示用户输入 syslog 转发的协议
read -p "请输入 syslog 转发的协议 (tcp/udp): " PROTOCOL
PROTOCOL=${PROTOCOL:-udp}# 提示用户输入 syslog 转发协议的端口
read -p "请输入 syslog 转发协议的端口 [514]: " PORT
PORT=${PORT:-514}# 提示用户输入要记录的本机IP地址
read -p "请输入要记录的本机 IP 地址 [$LOCAL_IP]: " MY_IP
MY_IP=${MY_IP:-$LOCAL_IP}# 提示用户输入是否开启web日志转发(y/n)
read -p "是否开启web错误日志收集?(y/n): " ENABLE_WEB_LOG_FORWARDING
ENABLE_WEB_LOG_FORWARDING=${ENABLE_WEB_LOG_FORWARDING:-n}# 提示用户开启哪些类型的日志转发(类型.级别),循环实现,以横线-结束
# 创建一个数组来存储用户选择的日志类型和级别
DEFAULT_LOG_TYPES=("auth.*" "authpriv.*")
LOG_TYPES=("${DEFAULT_LOG_TYPES[@]}")# 提示用户输入要开启的日志类型和级别,直到输入横线为止
while true; doread -p "请输入要开启的日志类型和级别 (类型.级别),或输入 - 结束: " LOG_TYPEif [[ $LOG_TYPE == "-" ]]; thenbreakelif [[ " ${LOG_TYPES[@]} " =~ " $LOG_TYPE " ]]; thenecho "$LOG_TYPE 已经包含在默认值中,不需手动添加。"elseLOG_TYPES+=("$LOG_TYPE")fi
done# 打印用户选择的日志类型和级别
echo "您选择了以下日志类型和级别:"
for log_type in "${LOG_TYPES[@]}"; doecho "$log_type"
doneecho "将 syslog 转发到 IP 地址: $IP_ADDRESS,协议: $PROTOCOL,端口: $PORT,本机ip为:$MY_IP,是否开启web日志转发:$ENABLE_WEB_LOG_FORWARDING"if [[ $ENABLE_WEB_LOG_FORWARDING == "y" ]]; then# 将配置写入文件 写入的文件可能不存在 需要新建或者切换地址echo "module(load=\"imfile\")" > /etc/rsyslog.d/nginx-error.confecho "# 监控文件变化" >> /etc/rsyslog.d/nginx-error.confecho "input(type=\"imfile\"" >> /etc/rsyslog.d/nginx-error.confecho "    File=\"/var/log/nginx/error.log\"" >> /etc/rsyslog.d/nginx-error.confecho "    Tag=\"NGINXERROR\")" >> /etc/rsyslog.d/nginx-error.confecho "template(name=\"MyTemplate\" type=\"string\" string=\"$MY_IP: %timestamp% %hostname% %syslogtag% %msg%\\n\")" >> /etc/rsyslog.d/nginx-error.confecho ":syslogtag, isequal, \"NGINXERROR\" @$IP_ADDRESS:$PORT/$PROTOCOL;MyTemplate" >> /etc/rsyslog.d/nginx-error.confecho "已将 web错误日志转发 配置写入 /etc/rsyslog.d/nginx-error.conf 文件"
elseecho "未开启 web 日志转发,不写入web错误日志"rm -f /etc/rsyslog.d/nginx-error.confecho "已清除/etc/rsyslog.d/nginx-error.conf"
fi# 将配置写入文件
CONF_FILE="/etc/rsyslog.d/wasb-remote.conf"
echo "" > $CONF_FILE  # 清空文件内容
echo "template(name=\"MyTemplate\" type=\"string\" string=\"$MY_IP: %timestamp% %hostname% %syslogtag% %msg%\\n\")" >> $CONF_FILE
for log_type in "${LOG_TYPES[@]}"; doecho "$log_type @$IP_ADDRESS:$PORT/$PROTOCOL;MyTemplate" >> $CONF_FILEecho "" >> $CONF_FILE  # 添加空行分隔
doneecho "已将 日志类型.日志级别 配置写入 $CONF_FILE 文件"# 重启 rsyslog 服务
echo "正在重启 rsyslog 服务..."
systemctl restart rsyslog# 打印 rsyslog 服务状态
echo "rsyslog 服务状态:"
systemctl status rsyslog

这篇关于编写脚本一键安装rsyslog的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/765766

相关文章

Zookeeper安装和配置说明

一、Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。 ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境; ■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例; ■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble) Zookeeper通过复制来实现

CentOS7安装配置mysql5.7 tar免安装版

一、CentOS7.4系统自带mariadb # 查看系统自带的Mariadb[root@localhost~]# rpm -qa|grep mariadbmariadb-libs-5.5.44-2.el7.centos.x86_64# 卸载系统自带的Mariadb[root@localhost ~]# rpm -e --nodeps mariadb-libs-5.5.44-2.el7

Centos7安装Mongodb4

1、下载源码包 curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.1.tgz 2、解压 放到 /usr/local/ 目录下 tar -zxvf mongodb-linux-x86_64-rhel70-4.2.1.tgzmv mongodb-linux-x86_64-rhel70-4.2.1/

AI一键生成 PPT

AI一键生成 PPT 操作步骤 作为一名打工人,是不是经常需要制作各种PPT来分享我的生活和想法。但是,你们知道,有时候灵感来了,时间却不够用了!😩直到我发现了Kimi AI——一个能够自动生成PPT的神奇助手!🌟 什么是Kimi? 一款月之暗面科技有限公司开发的AI办公工具,帮助用户快速生成高质量的演示文稿。 无论你是职场人士、学生还是教师,Kimi都能够为你的办公文

Centos7安装JDK1.8保姆版

工欲善其事,必先利其器。这句话同样适用于学习Java编程。在开始Java的学习旅程之前,我们必须首先配置好适合的开发环境。 通过事先准备好这些工具和配置,我们可以避免在学习过程中遇到因环境问题导致的代码异常或错误。一个稳定、高效的开发环境能够让我们更加专注于代码的学习和编写,提升学习效率,减少不必要的困扰和挫折感。因此,在学习Java之初,投入一些时间和精力来配置好开发环境是非常值得的。这将为我

安装nodejs环境

本文介绍了如何通过nvm(NodeVersionManager)安装和管理Node.js及npm的不同版本,包括下载安装脚本、检查版本并安装特定版本的方法。 1、安装nvm curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash 2、查看nvm版本 nvm --version 3、安装

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

Linux服务器Java启动脚本

Linux服务器Java启动脚本 1、初版2、优化版本3、常用脚本仓库 本文章介绍了如何在Linux服务器上执行Java并启动jar包, 通常我们会使用nohup直接启动,但是还是需要手动停止然后再次启动, 那如何更优雅的在服务器上启动jar包呢,让我们一起探讨一下吧。 1、初版 第一个版本是常用的做法,直接使用nohup后台启动jar包, 并将日志输出到当前文件夹n