将shell脚本运行情况写入Rsyslog日志server

时间:2023-03-10 08:18:24
将shell脚本运行情况写入Rsyslog日志server

在运维工作中,免不了编写一些脚本交由计划任务(cron)去定时运行完毕一些日常工作,实现运维工作自己主动化。比方在我的日常工作中备份数据是一项重要的工作,须要定时将数据备份到备份服器和一些其它的备份介质中。

其中大部分的备份工作都是写到脚本其中,并编辑/etc/crontab去定时完毕备份任务。这样节省了不少日常工作的压力。

为了监控脚本的运行情况。在编写脚本的时候将运行情况的情况追加写入到本地指定的日志文件其中,定期去查看这些文件来确保任务被正确的运行。

可是,随着须要备份的server的增多,运行查看日志的工作就变成了一种负担。一般是须要逐个登录每台server去检查日志文件。

为了解决上述问题,我打算将全部的备份日志写入到一台备份server其中,这样就能够实现日志的集中收集管理和查看了。

为些我在前几天搭建了一台日志server用来收集每台server的日志信息(请參见:Centos6.7搭建Rsyslog日志server)。

日志server也搭建完了。问题也出现了,怎样将脚本中的运行情况写入到日志server中呢?事实上。因为日志server已经搭建完毕,仅仅须要将须要记录信息写入到本地日志系统,那么本地rsyslog服务就会将日志信息同一时候写入到远端的日志server数据库中。

将自己定义的信息写入到本地日志系统须要用到:logger 命令

logger 是一个shell 命令接口。能够通过该接口使用Syslog的系统日志模块,还能够从命令行直接向系统日志文件写入一行信息。

用法举例:

logger -it error  -p local5.info "hello world"

-i 在每行都记录进程ID

-t 日志中的每一行都加一个error标签

-p 指定自己定义的日志设备和日志级别。相关内容參见文章附录

最后一个參数中的双引號(“”)中的文本内容就是自己定义日志信息。在脚本中针对命令的运行结果(echo $?

)进行if推断,然后使用logger输出不同的日志信息就可以。如:

umount -l /mnt
if [ `echo $?` -eq 0 ]; then
logger -p local3.info "Umount /dev/sdd1 is OK!"
else
logger -p local3.err "Umount /dev/sdd1 is Failure!"
fi

上面的脚本是卸载U盘或者移动硬盘时用到的角本。

依据 echo $? 的返回值,将 info 或者 err级别的自己定义日志信息写入到系统日志中。

配合Rsyslogserver使用就能够实现shell脚本运行情况的集中收集与管理了。

附:日志类型和日志级别

日志类型

日志类型 说明
auth pam产生的日志
authpriv ssh,ftp等登录信息的验证信息
cron 时间任务相关
kern 内核
lpr 打印
mail 邮件
mark(syslog) rsyslog服务内部的信息,时间标识
news 新闻组
user 用户程序产生的相关信息
uucp unix to unix copy, unix主机之间相关的通讯
local1~7 自己定义的日志设备

日志级别

从上到下。级别从低到高,记录的信息越来越少 具体的能够查看手冊: man 3 syslog

级别 说明 级别值
debug 有调式信息的,日志信息最多 7
info 一般信息的日志,最经常使用
notice 最具有重要性的普通条件的信息
warning 警告级别 4
err 错误级别,阻止某个功能或者模块不能正常工作的信息
crit 严重级别,阻止整个系统或者整个软件不能正常工作的信息
alert 须要立马改动的信息
emerg 内核崩溃等严重信息
none 什么都不记录