OpenWRT 日志保存

1. 原因

偶然发现OpenWRT竟然重启了,还不知道原因,而且OpenWRT重启之后日志会丢失,因此需要保存日志来查看OpenWRT的运行状况。


2. 实现过程

系统日志保存

OpenWRT能使用logread命令读取日志,将logread的日志输出保存到移动磁盘。因此在开机脚本中添加如下

1
2
logread >> /mnt/download/Logs/sys.log
logread -f >> /mnt/download/Logs/sys.log &

将日志保存到移动磁盘,而不是路由器本机的存储空间。

用户日志保存

用户相关的日志,例如上线时间以及所有进程展示

1
2
3
4
5
6
7
8
#!/bin/sh
# atuo Generate Log

LOG_PATH=/mnt/download/Logs/
LOG_USER_FILE=user.log

cd $LOG_PATH
echo -e "==== date: `date` \n==== uptime: `uptime`\n==== top -bn1: \n`top -bn1`\n" >> $LOG_USER_FILE

日志整理

日志需要进行定期整理,当单个日志超过10MB的时候,对当前日志进行复制备份,然后清空当前日志文件。

同时,由于运行了dnsmasqtransmission-daemon服务,有大量相关的日志条目,因此创建一个sum.log,为过滤掉这些内容的日志。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/bin/sh

LOG_PATH=/mnt/sda1/Logs/
LOG_USER_FILE=user.log
LOG_SYS_FILE=sys.log
LOG_SUM_FILE=sum.log
MAX_FILE_SIZE=10485760 # 10M

cd $LOG_PATH
echo -e "==== date: `date` \n==== uptime: `uptime`\n==== top -bn1: \n`top -bn1`\n" >> $LOG_USER_FILE
grep -v -E "127.0.0.1#5353|transmission-daemon" $LOG_SYS_FILE > $LOG_SUM_FILE

time=$(date +%Y%m%d)
user_file_size=$(ls -l $LOG_USER_FILE | awk '{print $5}')
if [ $user_file_size -ge $MAX_FILE_SIZE ];then
cp $LOG_USER_FILE $LOG_USER_FILE.$time.log
echo "" > $LOG_USER_FILE
fi

sys_file_size=$(ls -l $LOG_SYS_FILE | awk '{print $5}')
if [ $sys_file_size -ge $MAX_FILE_SIZE ];then
cp $LOG_SYS_FILE $LOG_SYS_FILE.$time.log
cp $LOG_SUM_FILE $LOG_SUM_FILE.$time.log
echo "" > $LOG_SYS_FILE
echo "" > $LOG_SUM_FILE
fi

定时任务

定时执行上述脚本,每小时整点执行一次,log.sh为上述脚本保存的文件名,脚本文件注意添加可执行权限

1
2
crontab -e
0 */1 * * * sh /root/Scripts/log.sh

3. rsyslog服务配置

向已经配置好的rsyslog服务器发送日志,可以在网页管理页面配置,也可以直接修改配置文件/etc/config/system,如下所示

OpenWRT默认实用UDP进行传输

1
2
3
4
5
6
7
8
9
config system
option hostname 'OpenWrt'
option zonename 'Asia/Shanghai'
option timezone 'CST-8'
option conloglevel '8'
option cronloglevel '8'
option log_size '256'
option log_ip '192.168.1.151'
option log_port '514'

修订版本信息

修订版本 时间 备注
文档创建 2017/4/18 创建
文档修改1 2018/1/11 rsyslog配置

参考