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服务,否则不会再保存文件。



















