您的位置:首页 > 运维架构 > Shell

shell脚本实现Linux日志服务配置Edition 2

2017-07-27 20:36 495 查看
昨天刚才发表了shell脚本实现Linux日志服务配置Edition 1这篇博文

只过了一天第二个版本就已经诞生了!!!

本次改进:

代码量少了,比如像主机类型的选择等操作并入了参数中
流程控制更加清晰
有了一定的错误处理,用户更友好


其实这也很符合写程序的实际情况,首先可能要求是实现功能,然后就得精简代码、严谨逻辑并且提升程序性能。也不是懒得去修改上一篇博客,而是为了留下对比,没有今夕的对比怎么体现成长呢?当然所谓的成长对于程序员来说就是编程或者专业技能的提升这么回事。

不要管前面我说了什么,你是来看代码的吧

那么,上脚本

注:此脚本在redhat7.2上完全运行通过,对于其他类型Linux系统或者redhat其他版本差异请自寻!

此shell脚本实现的功能(包含客户端和服务器端)

Linux日志转储

Linux日志时间同步

Linux日志处理的脚本以及针对性设置

时区设置

日志相关服务的停启

#!/bin/bash
#首先,我将在脚本开始给出一个友好的欢迎界面,此出于用户体验的考虑(我曾经可是一名web偏前端工程师啊)
echo '-------------------------------------------------------------------------'
echo '.                                                                       .'
echo '.                  Welcome  to  rsyslogd service  setting               .'
echo '.                                                                       .'
echo '-------------------------------------------------------------------------'
#因为要对配置文件进行修改,所以先备份一下以防搞坏配置
cp /etc/rsyslog.conf /etc/rsyslog.conf.bak
#下面是对于各选项以及对应的操作的菜单
echo -e "\n"
echo '                **   Options for log service settings **'
echo '.'
echo '.                      0.  Quit the script'
echo '.                      1.  Setting log information dump'
echo '.                      2.  Create a shell script to deal with specific log information'
echo '.                      3.  Record your log to normal file or device'
echo '.                      4.  Set user(s) to receive your log information'
echo '.                      5.  Discard some type or level log information'
echo '.                      6.  Set log collection format'
echo '.                      7.  Set time sync'
echo '.                      8.  Set timezone'
echo '.                      9.  Set utc time(0|1)'
echo '.                      10. Restart rsyslog service'
echo '.                      11. Stop firewalld service'
echo '.                      12. restart chronyd service'
echo '.'
echo '                *********************************************'
#初始化一个条件参数让程序顺利进入循环读取操作
optionNum=100
until [ $optionNum = 0 ]
#进入until流程控制,结束条件是菜单选项为 : 0
do
echo -e "\n"
read -p 'Please input your choice as number(0 to quit): ' optionNum
echo -e "\n"
case $optionNum in
#进入case流程控制,用来对用户的各种非脚本退出选择进行相应的操作
0)
break;;
#退出条件
1)
echo 'Please input your host type with setting items'
echo 'eg(for server):server udp'
echo 'eg(for client):client ip-udp'
read hosttype protocol
if [ $hosttype = 'client' ]
then
echo 'You choose to set your host as Client!!'
ip=`echo ${protocol%%-*}`
proto=`echo ${protocol:0-3}`
promark='@'
if [ $proto = 'udp' ]
then
echo 'You protocol type is udp!'
elif [ $proto = 'tcp' ]
then
promark='@@'
echo 'You protocol type is tcp!'
else
echo 'protocol type not match the option(udp or tcp)!'
continue
#跳过接下来要执行的操作,返回用户菜单选择
fi
sed "/RULES/a *.*  ${promark}${ip}" -i /etc/rsyslog.conf

elif [ $hosttype = 'server' ]
then

echo 'You choose to set your host as Server!!'
if [ $protocol = 'udp' ]
then
sed -e 's/#$ModLoad imudp/$ModLoad imudp/; s/#$UDPServerRun/$UDPServerRun/' -i /etc/rsyslog.conf
elif [ $protocol = 'tcp' ]
then
sed -e 's/#$ModLoad imtcp/$ModLoad imtcp/; s/#$InputTCPServerRun/$InputTCPServerRun/' -i /etc/rsyslog.conf
else
echo 'Wrong protocol type!'
continue
fi

else
echo 'Host type not match the option(server or client)!'
continue
fi
echo '-----'
echo 'TIps: Please restart related service while your rightly configured!'
echo '-----';;

2)
read -p 'please input your log type with level(eg:local3.*) and script location with file name(eg:/var/log/logscript.sh): ' loglevel scriptLocation
sed "/local7/a ${loglevel}  ^${scriptLocation}" -i /etc/rsyslog.conf
touch $scriptLocation
chmod +x $scriptLocation
;;
3)
echo 'eg:*.*     /var/log/file.log      # 普通文件,绝对路径'
echo 'eg:*.*     /dev/pts/0 #设备文件'
read -p  'Please input your log with level and file path: ' loglevel path
sed "/#kern.*/a ${loglevel}  ${path}" -i /etc/rsyslog.conf
;;
4)
echo 'eg:*.*   root'
echo 'eg:*.*   root,kadefor,up01    # 使用,号分隔多个用户'
echo 'eg:*.*   *                # *号表示所有在线用户'
read -p  'Set user(s) to receive your log information: ' loglevel user
sed "/#kern.*/a ${loglevel}  ${user}" -i /etc/rsyslog.conf
;;

5)
echo 'eg:local3.*    # 忽略所有local3类型的所有级别的日志'
read -p  'Discard some type or level log information: ' discard
sed "/#kern.*/a ${discard} ~" -i /etc/rsyslog.conf
;;
6)
echo 'eg:WESTOS %timegenerated% %FROMHOST-IP% %syslogtag% %msg%'
read -p  'Set log collection name and format: ' name format1 format2 format3 format4
sed  "/RULES/a \$template ${name}, '${format1} ${format2} ${format3} ${format4}huanhang'" -i /etc/rsyslog.conf
sed 's/huanhang/\\n/g' -i /etc/rsyslog.conf

echo '*.info;mail.none;authpriv.none;cron.none                /var/log/messages;WESTOS'
read -p  'Set log type with level and apply: ' apply1 apply2
sed "/\$template/a ${apply1} ${apply2}" -i /etc/rsyslog.conf
;;
7)
echo 'Please input your host type with setting items'
echo 'eg(for client):client 8.8.8.8'
echo 'eg(for server):server 172.25.0.0/16'
read hosttype hostip
if [ $hosttype = 'client' ]
then
sed "/www.pool.ntp.org/a server ${hostip} iburst" -i /etc/chrony.conf
elif [ $hosttype = 'server' ]
then

echo '-----'
echo 'Please confirm chrony service installed!'
echo '-----'
sed "/.rhel.pool.ntp.org/d; /Allow NTP/a allow  ${hostip}" -i /etc/chrony.conf
sed '/local stratum/a local stratum 10' -i >/etc/chrony.conf
else
echo 'Host type not match the option(server or client)!'
continue
fi
echo '-----'
echo 'TIps: Please restart related service while your rightly configured!'
echo '-----'
;;
8)
read -p  'Plese input timezone to set(eg:Asia/Shanghai): ' timezone
timedatectl set-timezone $timezone
;;
9)
read -p  'Plese input utc flag(0/1): ' flag
timedatectl set-local-rtc $flag
;;
10)
systemctl restart rsyslog
echo 'rsyslog restarted!'
;;
11)
systemctl stop firewalld
systemctl disable firewalld
echo 'firewalld stopped!'
;;
12)
systemctl restart chronyd
echo 'chronyd restarted!'
;;
*)
echo 'Option not match any(0-12)!!!'
continue
#对于用户的非0非正确输入进行提醒并重新进入菜单选择
;;
esac
done
#用户选择退出选项,脚本退出
echo 'The script exited!'


首先我们来看一下初始界面



然后来看一下此脚本对于用户输入的错误处理



下图为操作11和12的直观感受,可以看到命令执行之后有了相应的结果

chronyd服务重启
firewalld服务关闭




下图为操作9和10的直观感受,可以看到命令执行之后有了相应的结果

rsyslogd服务重启
RTC设置生效




下图为操作7直观感受,可以看到客户端的时间和服务端进行了同步



下图为操作6直观感受,日志同步格式写入了配置文件



下图为操作345直观感受,日志同步格式写入了配置文件



下图为操作1直观感受,作为服务器的主机配置写入成功,开启了udp接收端口



下图为操作8直观感受,前面的操作中时区都是美国,现在我们将时区改成了亚洲/上海(Asia/Shanghai)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐