1.syslogd作客户端
BusyBox v1.20.2 (2022-04-06 16:19:14 CST) multi-call binary.
Usage: syslogd [OPTIONS]
System logging utility
-n Run in foreground
-O FILE Log to FILE (default:/var/log/messages)
-l N Log only messages more urgent than prio N (1-8)
-S Smaller output
-s SIZE Max size (KB) before rotation (default:200KB, 0=off)
-b N N rotated logs to keep (default:1, max=99, 0=purge)
-R HOST[:PORT] Log to IP or hostname on PORT (default PORT=514/UDP)
-L Log locally and via network (default is network only if -R)
-D Drop duplicates
-C[size_kb] Log to shared mem buffer (use logread to read it)
-f FILE Use FILE as config (default:/etc/syslog.conf)
大概翻译下:
BusyBox v1.20.2 (2022-04-06 16:19:14 CST) multi-call binary.
Usage: syslogd [OPTIONS]
System logging utility
-n 运行在前台。
-O FILE log输出到指定文件中 (默认:/var/log/messages)。
-l N 设置记录的优先级,如果设置-l 7,是不会记录等级7,即LOG_DEBUG的,只会记录LOG_INFO及更高优先级。
-S 是否显示hostname,以及user.info之类的详细信息。
-s SIZE 在log达到SIZE后,循环log到messgas.0中,后续依次变动。
-b N 保持的messages个数,messages最新,带的数字越大越老。依次覆盖。
-R HOST[:PORT] log输出到指定远程服务器。(默认 PORT=514/UDP)
-L log本地保存和网络传输 (如果设置-R的话,默认是网络传输)
-D Drop duplicates
-C[size_kb] log输出到共享内存,通过logread读取。
-f FILE 指定conf文件。(default:/etc/syslog.conf)
从帮助信息,我们首先可以看到busybox,也就是我所查看的设备的syslogd并不是单独的应用,是busybox里面配置的,另外,关于配置文件,有时候在/etc下看不到配置文件,手动创建也不管用,这是因为busybox配置的时候,没有勾选syslogd配置文件选项,如下:
不支持配置文件也没事,可以在运行的时候指定参数,下面是一个脚本,S01logging:
#!/bin/sh
#
# Start logging
#
SYSLOGD_ARGS="-n -s 10240 -O /userdata/messages -b 10 -R 192.168.0.161 -L"
KLOGD_ARGS=-n
[ -r /etc/default/logging ] && . /etc/default/logging
start() {
printf "Starting logging: "
start-stop-daemon -b -S -q -m -p /var/run/syslogd.pid --exec /sbin/syslogd -- $SYSLOGD_ARGS
start-stop-daemon -b -S -q -m -p /var/run/klogd.pid --exec /sbin/klogd -- $KLOGD_ARGS
echo "OK"
}
stop() {
printf "Stopping logging: "
start-stop-daemon -K -q -p /var/run/syslogd.pid
start-stop-daemon -K -q -p /var/run/klogd.pid
echo "OK"
}
case "$1" in
start)
cat /etc/os-release
start
;;
stop)
stop
;;
restart|reload)
stop
start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
exit $?
注意:上面的 -R 192.168.0.161,没有设置端口,默认是udp 514端口,将log信息上传到这个ip的服务器,所以这个ip的设备也需要配置一个服务端,然后就可以接收设备的log信息了。
2.rsyslog作服务端
现在默认的linux pc系统都已经安装了rsyslog的,我用的是Ubuntu18.04默认就安装了这个服务,只是没启动而已,修改配置,来作为log的服务端,打开修改配置文件:
sudo vim /etc/rsyslog.conf
将下面屏蔽的地方打开:
#################
#### MODULES ####
#################
module(load="imuxsock") # provides support for local system logging
#module(load="immark") # provides --MARK-- message capability
# provides UDP syslog reception
#module(load="imudp")
#input(type="imudp" port="514")
修改为:
#################
#### MODULES ####
#################
module(load="imuxsock") # provides support for local system logging
#module(load="immark") # provides --MARK-- message capability
# provides UDP syslog reception
module(load="imudp")
input(type="imudp" port="514")
这样修改之后,启动服务,因为默认是没有启动的,启动命令:
sudo service rsyslog start
查看是否监听udp 514端口:
zl@zl-Lenovo:~$ sudo netstat -aulntp | grep rsyslog
[sudo] password for zl:
udp 0 0 0.0.0.0:514 0.0.0.0:* 936/rsyslogd
udp6 0 0 :::514 :::* 936/rsyslogd
客户端上传的日志会自动保存到/var/log/syslog文件里面,而且是无法区分设备的,比如一个ip是192.168.0.34的设备,还有一个是192.168.0.165的设备,他们的日志会混到一个文件,如果要分开,甚至要按照应用来区分,也是可以的,需要设置一个模板,再次打开配置文件,在 GLOBAL DIRECTIVES 下添加如下内容:
###########################
#### GLOBAL DIRECTIVES ####
###########################
#$template RemoteLogs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log" *
$template RemoteLogs,"/var/log/%HOSTNAME%/messages.log" *
*.* ?RemoteLogs
& ~
" $template RemoteLogs," /var/log/%HOSTNAME%/messages.log" *"保存的文件如下:
root@zl-Lenovo:/var/log# tree .
.
├── 192.168.0.165
│ └── messages.log
├── 192.168.0.34
│ └── messages.log
" $template RemoteLogs," /var/log/%HOSTNAME%/%PROGRAMNAME%.log" *"保存的文件如下:
root@zl-Lenovo:/var/log# tree .
.
├── 192.168.0.165
│ ├── mediaserver.log
│ └── nvrserver.log
├── 192.168.0.34
│ └── nvrserver.log
可以根据需求来设置服务端,保存不同形式的log文件。
注意:
root@zl-Lenovo:/var/log# tree .
.
├── 192.168.0.165
│ ├── mediaserver.log
│ └── nvrserver.log
├── 192.168.0.34
│ └── nvrserver.log
可以根据需求来设置服务端,保存不同形式的log文件。
注意:
如果删掉了/var/log目录下保存的日志文件,必须重启下rsyslog服务,否则不会再保存文件。