预期目标:

将自定义日志文件通过syslog发送到日志解析平台,这里采用输出监控syslog进程的日志文件作为例子

实验环境:

syslog日志发送端:192.168.0.5
syslog日志接收端:192.168.0.8

实验配置:

编写脚本

Tip:可先执行ps -aux | grep "rsyslogd"|wc -l命令查看正常和不正常进程数是多少,然后将正常进程数代替脚本中实验的进程数字【2】

vim check_rsyslog_status.sh

#!/bin/bash
num=`ps -aux | grep "rsyslogd"|wc -l`
#判断日志文件是否存在
if [ ! -f "/var/log/rs_status.log" ]
then
  touch "/var/log/rs_status.log"
fi
#判断syslog进程
if [ "$num" -lt 2 ]
then
  #先尝试重启服务(重启命令根据centos版本决定,centos6要将其替代为/etc/init.d/rsyslog restart)
  systemctl restart rsyslog
  #重新检查rsyslog进程
  num=`ps -aux | grep "rsyslogd"|wc -l`
  if [ "$num" -lt 2 ]
  then
   echo "`date +%Y-%m-%d" "%H:%M:%S` rsyslog server is restart.Current status is down." >> "/var/log/rs_status.log"  
  else
   echo "`date +%Y-%m-%d" "%H:%M:%S` rsyslog server is restart.Current status is up." >> "/var/log/rs_status.log"
  fi
else
  echo "`date +%Y-%m-%d" "%H:%M:%S` rsyslog server status is up." >> "/var/log/rs_status.log"
fi

配置定时任务【根据环境需求自定义】

crontab -e

 * * * * * 脚本绝对路径 

配置rsyslog

vim /etc/rsyslog.d/rsyslog_status.conf

$ModLoad imfile
$InputFileName /var/log/rs_status.log
$InputFileTag rsyslog-status-check
$InputFileStateFile stat-rsyslog-check
$InputFileSeverity info
$InputFileFacility local3
$InputRunFileMonitor
local3.* @192.168.0.8:514

禁止自定义日志传输到/var/log/message,修改配置

vim /etc/rsyslog.conf

*.info;mail.none;authpriv.none;cron.none;local3.none                /var/log/messages

重启rsyslog服务

systemctl restart rsyslog

查看效果【由于接收端已经安装splunk,并且打开514/udp进行了监听,可直接web端查看】