【笔记】openwrt

您所在的位置:网站首页 如何查看系统启动信息 【笔记】openwrt

【笔记】openwrt

2024-07-10 14:06| 来源: 网络整理| 查看: 265

man在线网站:https://man.cx/?page=%sopenwrt官方文档 log.essentials:https://openwrt.org/docs/guide-user/base-system/log.essentials

东拼西凑整理出来的东西,很多东西这个系统能找到,那个系统用了其他代替,但理子应该是这个理子。将就看,只求自己回看能看明白。

文章目录 硬件信息内核日志:dmesg# 列出加载到内核中的所有驱动信息# 列出所有被检测到的硬件# 清空dmesg缓冲区日志# 实时监控dmesg日志输出 系统日志:syslog、syslogd、klog# syslog架构 日志管理系统:rsyslog# 协议格式# 架构阐述# 概念属性替代模板RulesetFilter模块队列 # 启动参数# 配置文件例子:把系统中所有日志采集到一个文件中 # 日志远程同步例子:特定的Rsyslog日志文件发送到远程主机的配置 # 日志格式# 时间同步 Openwrt默认的日志系统# 日志读写:logger、logread# 配置:/etc/config/system. Openwrt使用rsyslog

在这里插入图片描述

硬件信息 位置信息cat /proc/versioncat /proc/meminfo有关 RAM 使用情况的更多详细信息cat /proc/cpuinfo有关您的 CPU 的信息cat /proc/mtdcat /proc/partitionscat /proc/net/nf_conntrackcat /proc/cmdlinecat /proc/modules/etc/profile.d用户自定义文件位置 内核日志:dmesg

dmesg(display message)命令用于打印Linux系统开机启动信息,kernel会将开机信息存储在ring buffer中。您若是开机时来不及查看信息,可利用dmesg来查看(print or control the kernel ring buffer)。开机信息亦保存在/var/log/dmesg的文件里。某些硬件设备(比如七号信令卡、语音卡之类)在安装的时候,通常会安装驱动程序(内核模块),会打印一些信息,就可以通过dmesg命令来查看。

dmesg:打印或控制内核环形缓冲区

root@OpenWrt_D2550:~# dmesg -h dmesg: unrecognized option: h BusyBox v1.35.0 (2022-02-20 04:00:11 UTC) multi-call binary. Usage: dmesg [-cr] [-n LEVEL] [-s SIZE] Print or control the kernel ring buffer -c Clear ring buffer after printing 显示信息后,清除 ring buffer 中的内容。 -n LEVEL Set console logging level 设置记录信息的层级。 -s SIZE Buffer size 预设置为 8196,刚好等于 ring buffer 的大小 -r Print raw message buffer

在这里插入图片描述

# 列出加载到内核中的所有驱动信息

我们可以使用如‘more’。 ‘tail’, ‘less ’或者‘grep’文字处理工具来处理‘dmesg’命令的输出。由于dmesg日志的输出不适合在一页中完全显示,因此我们使用管道(pipe)将其输出送到more或者less命令单页显示。

[[email protected] ~]# dmesg | more [[email protected] ~]# dmesg | less

只输出dmesg命令的前20行日志

在‘dmesg’命令后跟随‘head’命令来显示开始几行,‘dmesg | head -20′命令将显示开始的前20行。

[[email protected] ~]# dmesg | head -20

只输出dmesg命令最后20行日志

在‘dmesg’命令后跟随‘tail’命令(‘ dmesg | tail -20’)来输出‘dmesg’命令的最后20行日志,当你插入可移动设备时它是非常有用的。

[[email protected] ~]# dmesg | tail -20

搜索包含特定字符串的被检测到的硬件

由于‘dmesg’命令的输出实在太长了,在其中搜索某个特定的字符串是非常困难的。因此,有必要过滤出一些包含‘usb’ ‘dma’ ‘tty’ ‘memory’等字符串的日志行。grep 命令 的‘-i’选项表示忽略大小写。

[[email protected] log]# dmesg | grep -i usb [[email protected] log]# dmesg | grep -i dma [[email protected] log]# dmesg | grep -i tty [[email protected] log]# dmesg | grep -i memory # 列出所有被检测到的硬件

要显示所有被内核检测到的硬盘设备,你可以使用‘grep’命令搜索‘sda’关键词,如下:

[[email protected] ~]# dmesg | grep sda # 清空dmesg缓冲区日志

我们可以使用如下命令来清空dmesg的日志。该命令会清空dmesg环形缓冲区中的日志。但是你依然可以查看存储在‘/var/log/dmesg’文件中的日志。你连接任何的设备都会产生dmesg日志输出。

[[email protected] log]# dmesg -c # 实时监控dmesg日志输出

在某些发行版中可以使用命令‘tail -f /var/log/dmesg’来实时监控dmesg的日志输出。

[[email protected] log]# watch "dmesg | tail -20" tail -Fn 300 | dmesg

请添加图片描述请添加图片描述请添加图片描述

系统日志:syslog、syslogd、klog

系统日志(Syslog)协议是在一个IP网络中转发系统日志信息的标准,它是在美国加州大学伯克利软件分布研究中心(BSD)的TCP/IP系统实施中开发的,目前已成为工业标准协议,可用它记录设备的日志。Syslog记录着系统中的任何事件,管理者可以通过查看系统记录随时掌握系统状况。系统日志通过Syslog进程记录系统的有关事件,也可以记录应用程序运作事件。通过适当配置,还可以实现运行Syslog协议的机器之间的通信。通过分析这些网络行为日志,可追踪和掌握与设备和网络有关的情况。

在Unix类操作系统上,syslog广泛应用于系统日志。syslog日志消息既可以记录在本地文件中,也可以通过网络发送到接收syslog的服务器。接收syslog的服务器可以对多个设备的syslog消息进行统一的存储,或者解析其中的内容做相应的处理。常见的应用场景是网络管理工具、安全管理系统、日志审计系统。

完整的syslog日志中包含产生日志的程序模块(Facility)、严重性(Severity或 Level)、时间、主机名或IP、进程名、进程ID和正文。在Unix类操作系统上,能够按Facility和Severity的组合来决定什么样的日志消息是否需要记录,记录到什么地方,是否需要发送到一个接收syslog的服务器等。由于syslog简单而灵活的特性,syslog不再仅限于Unix类主机的日志记录,任何需要记录和发送日志的场景,都可能会使用syslog。

# syslog架构

了解,具体:https://blog.csdn.net/lidonghat/article/details/55004280

syslog系统是linux操作系统的日志收集机制,内核模块和用户进程都可以用syslog机制保存各自的日志信息。

三个组要模块的简介:

syslog是 Unix 系统的一个常见组件,用于执行系统日志记录活动。syslog提供编程接口,syslog库API在syslog.h文件中定义。syslogd(syslog daemon)是它的守护进程,syslogd 从一组日志源(如 /dev/log 和 /dev/klog )中读取数据,并按照 /etc/syslog.conf 中的说明处理这些日志消息。通过调用syslog(),可将应用程序日志消息记录到 syslog 中。 syslog 消息采用一种包含可选优先级和设备的标准格式。优先级指示消息的紧急程度,设备指示发布消息的子系统。/usr/include/syslog.h中定义了它的优先级和设备资源。klog(kernel log)是一个从Unix内核接受消息的设备,klogd 守护进程获得并记录 Linux 内核信息。通常,syslogd 会记录 klogd 传来的所有内核信息。

syslog系统架构如下:

在这里插入图片描述

内核模块保存日志信息的过程:

内核用printk函数将日志信息保存到_log_buf环形缓冲区中。klogd后台进程通过sys_syslog系统调用从_log_buf环形缓冲区中获取日志信息。klogd后台进程利用syslog库函数将获取的日志信息发送给syslogd后台进程。syslogd进程将日志信息输出到控制台或者指定的log文件。

用户进程保存日志信息的过程:

用户进程利用利用syslog库函数将日志信息发送给syslogd后台进程。syslogd进程将日志信息输出到控制台或者指定的log文件。

请添加图片描述请添加图片描述请添加图片描述

日志管理系统:rsyslog

官网:https://www.rsyslog.com/ github:https://github.com/rsyslog/rsyslog/ rsyslog Configuration Builder:https://www.rsyslog.com/rsyslog-configuration-builder/

关于Syslog的内容我并不想多说,大家如果有不清楚的地方,可以参考 的Linux私房菜。虽然Syslog中规中矩,但是随着时间的推移,无论是功能还是性能,它都显得捉襟见肘,于是出现了:Rsyslog和Syslog-ng,它们都涵盖SysLog的常用功能,不过在功能和性能上更为出色,至于孰优孰劣是个仁者见仁智者见智的问题,鉴于多数Linux发行版均选择了Rsyslog,下面就说说Rsyslog。

在这里插入图片描述

rsyslog是一个开源工具,被广泛用于Linux系统以通过TCP/UDP协议转发或接收日志消息。

它所做的事就是统一记录系统的各个子系统产生的日志。但是像FTP、HTTP它们都有自己日志记录格式不是系统的Rsyslog。在Rsyslog系统有两个进程分别是klogd,syslogd。而为什么需要两个守护进程呢?是因为内核跟其他信息需要记录的详细程度及格式的不同。

klogd 记录内核信息,系统启动中在登录之前使用的都是物理终端/dev/console,这个时候虚拟终端还没有启动而内核启动日志都存放在/var/log/dmesg文件中,使用dmesg命令可以查看。syslogd 记录非内核系统产生的信息,当系统启动/sbin/init程序时产生的日志都存放在以下各个日志文件中。 /var/log/message #标准系统错误信息; /var/log/maillog #邮件系统产生的日志信息; /var/log/secure #记录系统的登录情况; /var/log/dmesg #记录linux系统在引导过程中的各种记录信息; /var/log/cron #记录crond计划任务产生的时间信息; /var/log/lastlog #记录每个用户最近的登录事件; /var/log/wtmp #记录每个用户登录、注销及系统启动和停机事件; /var/run/btmp #记录失败的、错误的登录尝试及验证事件;

rsyslog服务的主配置文件为 /etc/rsyslog.conf 指定日志保存位置修改配置文件,修改后重启rsyslog服务生效

rsyslog并不生成日志,只是对日志进行采集和对采集后的日志进行管理

# 协议格式

详情看:man 3 syslog

facility.priority action

facility(设施):标识系统需要记录日志的子系统,大概有以下子系统。

auth #PAM认证相关日志; authpriv #SSH、FTP登录相关日志; cron #任务计划相关日志; daemon #守护进程相关日志; kern #内核相关日志; lpr #打印相关日志; mail #邮件相关日志; mark #标记相关日志; news #新闻相关日志; security #安全相关日志与auth类似; syslog #Rsyslog自己的日志; user #用户相关日志; uucp #UNIX to UNIX cp相关日志; local0 to local7 #用户自定义使用设置日志; * #表示所有的facility;

priority(级别):用来标识日志级别,级别越低信息越详细,有以下日志级别,从上到下,级别从低到高,记录的信息越来越少,详细的可以查看手册: man 3 syslog。

debug #程序或系统调试信息; info #一般信息; notice #不影响正常功能需要注意的信息; warning #可能影响系统功能提醒用户的重要事件; error #错误信息; crit #比较严重的信息; alert #必须马上处理的警告信息; emerg/panic #会导致系统不可用的严重信息; * #表示所有日志级别; none #跟*相反表示什么都没有;

action(动作):设置日志记录的位置,有以下几种。

1)记录到普通文件或设备文件 *.* /var/log/file.log #绝对路径 *.* /dev/pts/0 #设备文件 2)”|”,表示将日志送给其他命令处理 3)”@HOST”,表示将日志发送到特定的主机 *.emerg @192.168.10.1 4)”用户”,表示将日志发送到特定的用户 5)”*”,表示将日志发送所有登录到系统上的用户

连接符号

. #表示大于等于xxx级别的信息; .= #表示等于xxx级别的信息; .! #表示在xxx之外的等级的信息; # 架构阐述

官方文档:https://www.rsyslog.com/doc/v8-stable/configuration/modules/index.html 插件列表:https://www.rsyslog.com/plugins/

Rsyslog 采用模块化设计。这使得功能可以从模块中动态加载,也可以由任何第三方编写。

请注意,每个模块都提供(不区分大小写)配置参数,模块配置参数(和功能)只有在加载后才可用。 在这里插入图片描述 简单的rsyslog的架构:rsyslog的消息流是从输入模块-(Input Module)>预处理模块->主队列->过滤模块->执行队列->输出模块(Output Module)

输入模块 有imklg、imsock、imfile、imtcp等,是消息来源

输出模块 有omudp、omtcp、omfile、omprog、ommysql、omruleset等,是消息的目的地。

过滤模块 处理消息的分析和过滤,rsyslog可以根据消息的任何部分进行过滤,有mmnormalize

预处理模块 主要解决各种syslog协议实现间的差异,举例说明如果日志系统client端使用rsyslog、server端使用syslog-ng,如果自己不做特殊处理syslog-ng是无法识别的。但是反过来,rsyslog的server端就可以识别syslog-ng发过来的消息。

Queue模块 负责消息的存储,从Input传入的未经过滤的消息放在主队列中,过滤后的消息放入到不同action queue中,再由action queue送到各个输出模块。

# 概念 属性替代

Rsyslog预定义了一些属性,来代表消息中的信息,我们可以在定义输出格式、动态文件名的时候使用到这些属性。这里面比较重要的属性比如:msg(消息体)、hostname、pri(消息等级和类别)、time(时间有关),属性的名称中以$开头的是从本地系统获得的变量、不带$是从消息中获得变量。

属性替代的语法格式:

%propname:fromChar:toChar:options:fieldname%

属性替换的功能很强大,你可以使用起始字符获取自己所需的字段,也可以使用正则表达式,也可以使用分隔符。举几个例子:为了兼容一个rfc协议,rsyslog规定如果用户输入的msg不是以空格开头,rsyslog会自动补充一个空格,因此如果你希望输出的时候去掉这个空格,就可以使用

%msg:2:$% #选取msg变量中,起始位置为2,终止位置为结尾

我们经常需要根据空格来分析字符串,F表示使用字符分割,32是空格的ascii码,例:

%msg:F,32:3% #按照空格分隔,取第三个子串,

正则匹配可以匹配特定的文字和格式,我的正则比较差, 避免了使用这部分的内容,所以这部分没有例子了。

属性替代中还用到了一类特殊的以$!开头的变量,这是使用mmnormalize模块时特有的,可以实现类似于syslog-ng中parser模块的功能。后面再讲。

模板

模板的功能是定义输出格式,或者定义omfile模块的动态路径、动态文件。需要使用上面提到的属性替换。

模板定义的形式有四种,适用于不同的输出模块,一般简单的格式,可以使用string的形式,复杂的格式,建议使用list的形式,使用list的形式,可以使用一些额外的属性字段(property statement),例如:position.from、position.end。

如果不指定输出模板,rsyslog会默认使用RSYSLOG_DEFAULT。

如果你只想输出msg,可以定义模板:

$template t_msg, "%msg\n%"

如果想按日期保存输出,需要使用动态路径。可以定义模板

$template f_debug, "/data0/logs/%$year%-%$month%-%$day%/debug.log" Ruleset

Ruleset实现的是多实例的功能,可以针对syslog的来源使用不同的过滤规则。需要注意的是,在配置文件中需要先定义ruleset,才可以使用。比较典型的一个例子,针对不同的端口使用不同的过滤规则。

$Ruleset tcp1999 $RulesetCreateMainQueue on Local3.* @@10.0.0.44:1999 $Ruleset tcp2000 $RulesetCreateMainQueue on Local4.* @@10.0.0.44:2000

在定义好ruleset后,各个输出模块就可以指定自己使用的ruleset了,具体如何指定,可以查看输出模块的手册,一般会有一个ruleset的参数,用来实现这个功能。

Filter模块

Rsyslog可以使用syslog标准的过滤规则,同时自己添加了一些扩展。比如可以在输出中指定rsyslog自己的处理方式,可以指定输出template,方法是在规则后面添加template的名字,用分号隔开。

例如我们可以编写一个规则:

Local3.* -/data0/logs/local3.log;t_msg #在这个输出中使用t_msg的模板 Local4.* -?f_local3_test;t_msg #问号表示要使用模板定义的动态路径

除了syslog标准的规则,rsyslog的作者还自己开发了一个叫做rainerscript的脚本语言,来定义更复杂的过滤过则,rainerscript可以对属性进行startwith、contains、%(取余)等过滤规则,例如:

If $pri-txt == local3.* and $msg contains “abc” then{ #pri为local3,且在消息中包含子串‘abc’ *.* -/data0/logs/local3.log;t_msg }

还有第三种方式是使用属性的表示方式,例如:

:msg, regex, "^ [g-z]" /root/rsyslog_worker_dir/2000.log #以字母g到z开头的消息,注意msg开头有个空格 队列

队列是rsyslog中比较重要的一个部分,作为使用者,我们需要了解的是队列的种类:主队列和工作队列。从输入模块接收的消息会进入主队列,主队列中的消息,经过过滤模块,会进入到相应的工作队列;队列的四种工作模式:direct mode、disk mode、FixedArray mode和LinkedList mode,前两种是磁盘队列,更可靠,但是性能也较差,后两种是内存队列,区别是前者是预分配队列长度,后者是动态分配,如果你的系统日志流量比较平稳,可以使用预分配队列,如果日志属于突发型,可以使用动态队列。此外,内存队列还可以通过指定一个queuename来添加DA模式,DA模式主要是为了防止意外情况(进程关闭、server端宕机)下,内存队列可以不丢失。

通过查看rsyslog的系统命令,可以知道rsyslog对队列进行大量的可配参数,来定义队列的行为。可以根据需要来进行优化。

# 启动参数

正常启动:指定-f和-i就可以了,新版本不需要-c 5 这样的参数。

rsyslogd -f /root/rsyslog_worker_dir/rsyslog.conf -i /root/rsyslog_worker_dir/rsyslog.pid

debug版本:debug消息会输出到标注输出,如果出现未预期的结果,可以尝试使用debug方式,查看处理流程。

rsyslogd -f /root/rsyslog_worker_dir/rsyslog.conf -i /root/rsyslog_worker_dir/rsyslog.pid -dn >debuglog

测试配置文件是否正确:

rsyslogd -N1 -f file # 配置文件

默认Rsyslog主配置文件/etc/rsyslog.conf

#### 加载模块 #### $ModLoad imuxsock # provides support for local system logging (e.g. via logger command) $ModLoad imklog # provides kernel logging support (previously done by rklogd) #### 定义日志格式默认模板 #### $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat #### 包含其他配置文件 #### $IncludeConfig /etc/rsyslog.d/*.conf #### 规则 #### # 关于内核的所有日志都放到/dev/console(控制台) #kern.* /dev/console # 记录所有日志类型的info级别以及大于info级别的信息到/var/log/messages,但是mail邮件信息,authpriv验证方面的信息和cron时间任务相关的信息除外 *.info;mail.none;authpriv.none;cron.none /var/log/messages # authpriv验证相关的所有信息存放在/var/log/secure authpriv.* /var/log/secure # 邮件的所有信息存放在/var/log/maillog; 这里有一个-符号, 表示是使用异步的方式记录, 因为日志一般会比较大 mail.* -/var/log/maillog # 计划任务有关的信息存放在/var/log/cron cron.* /var/log/cron # 记录所有的大于等于emerg级别信息, 以wall方式发送给每个登录到系统的人 *.emerg * # 记录uucp,news.crit等存放在/var/log/spooler uucp,news.crit /var/log/spooler # 记录启动的相关信息 local7.* /var/log/boot.log ###日志转发规则### #$WorkDirectory /var/spppl/rsyslog # where to place spool files #$ActionQueueFileName fwdRule1 #unique name prefix for spool files #$ActionQueueMaxDiskSpace 1g # 1gb space limit (use as much as possible) #$ActionQueueSaveOnShutdown on #save messages to disk on shutdown #$ActionQueueType LinkedList #run asynchronously #$ActionResumeRetryCount -1 #infinite retries if host is down # remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional #*.* @@remote-host:514 #@@表示通过tcp协议发送 @表示通过udp进行转发 #local3.info @@localhost :514 #local7.* #@@192.168.56.7:514 例子:把系统中所有日志采集到一个文件中

把系统中所有日志采集到/var/log/westos文件中

操作:

vim /etc/rsyslog.conf *.* /var/log/westos systemctl restart rsyslog

测试:

logger aa # 产生日志 cat /var/log/westos # 查看日志 # 日志远程同步

客户端

# 查看写法 man 5 rsyslog.conf # 搜索远程写法 /Remote Remote machine There are three ways to forward message: the traditional UDP transport, which is extremely lossy but stan‐ dard, the plain TCP based transport which loses messages only during certain situations but is widely avail‐ able and the RELP transport which does not lose messages but is currently available only as part of rsyslogd 3.15.0 and above. To forward messages to another host via UDP, prepend the hostname with the at sign ("@"). To forward it via plain tcp, prepend two at signs ("@@"). To forward via RELP, prepend the string ":omrelp:" in front of the hostname. Example: *.* @192.168.0.1 一般用UDP,因为是一般自己管理的机器,比较稳定,且一般在固定大小的网络内通信,网络稳定``` 服务端 ```bash # 查看主配置文件 vim /etc/rsyslog.conf # 发现两行注释的 # provides UDP syslog reception #module(load="imudp") #input(type="imudp" port="514") # provides TCP syslog reception #module(load="imtcp") #input(type="imtcp" port="514") 要开启udp,因此放开注释 module(load="imudp") input(type="imudp" port="514") # 重启 systemctl restart rsyslog.service # 可以看到 开放了514端口接收ipv4和ipv6的请求 root@lawsssscat-virtual-machine:/var/log# netstat -ntlup | grep rsyslog udp 0 0 0.0.0.0:514 0.0.0.0:* 27367/rsyslogd udp6 0 0 :::514 :::* 27367/rsyslogd root@lawsssscat-virtual-machine:/var/log#

如果测试服务端没有收到日志,可以检察下服务端防火墙的日志

例子:特定的Rsyslog日志文件发送到远程主机的配置 # 定义从默认的设备文件中读取日志,/dev/log是默认的日志读取设备文件; $AddUnixListenSocket /dev/log # 定义从指定的设备文件中读取日志,如PHP程序使用Rsyslog输出日志,同时PHP使用了chroot,那么需要定义chroot后的路径才可以读取日志; #$AddUnixListenSocket /data/app/dev/log # 定义一个模板,可选; $template logstash,"%msg%\n" # Rsyslog默认日志首都有空格,可以使用下面的模板删除空格,可选; $template logstash,"%msg:2:$%\n" # 使用一个已定义的模板; $ActionFileDefaultTemplate logstash # 摘取$msg(消息)变量内容,判断如果有keyboard关键字就进行远程传送,没有此关键字的就不传送; if $msg contains "keyboard" then action(type="omfwd" Target="172.18.20.60"\ Port="8594"\ Protocol="udp"\ queue.type="LinkedList"\ queue.spoolDirectory="/var/spool/rsyslog"\ queue.filename="test2"\ queue.size="100000"\ queue.maxdiskspace="2g"\ queue.highwatermark="60000"\ queue.lowwatermark="2000"\ queue.discardmark="80000"\ queue.timeoutenqueue="3000"\ queue.maxfilesize="200m"\ queue.dequeuebatchsize="1000"\ ) # 日志格式

默认的日志格式

vim /etc/rsyslog.conf ########################### #### GLOBAL DIRECTIVES #### ########################### # # Use traditional timestamp format. # To enable high precision timestamps, comment out the following line. # $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

自定义日志格式

$template LOGFMT, "%timegenerated% %FROMHOST-IP% %syslogtag% %msg%\n" %timegenerated% 日志时间 %FROMHOST-IP% 主机ip %syslogtag% 日志记录目标 %msg% 日志内容

使用自定义日志格式

*.*;auth,authpriv.none -/var/log/syslog;LOGFMT

详细格式配置,参考man rsyslog.conf 关键字“REPLACER” 在这里插入图片描述

# 时间同步

https://www.cnblogs.com/duanxz/archive/2012/12/05/2802900.html

Openwrt默认的日志系统

openwrt默认标准日志模块是由 logd(the ubox log daemon)实现的。它被实现为固定大小的环形缓冲区,在RAM中存储。环形缓冲区区记录可以在路由器上读取,流式传输到文件或通过TCP / UDP套接字 logread发送到远程系统。

# 日志读写:logger、logread

下面介绍两个软件: logread(读日志)、logger(写日志)

# List syslog logread # MESSAGE 日志 # -t TAG 在日志前加上TAG(方便logread查找) # Write a message with a tag to syslog logger -t TAG MESSAGE # -e 正则匹配 # List syslog filtered by tag logread -e TAG

例子

# -s 当前记录的日志在控制打出 root@OpenWrt_D2550:~# logger -s haha root: haha root@OpenWrt_D2550:~# logread -l 1 Sun Mar 20 17:24:59 2022 user.notice root: haha root@OpenWrt_D2550:~# logread -e bilibi Sun Mar 20 17:26:05 2022 user.notice bilibili: lawsssscat ooo root@OpenWrt_D2550:~# logger -s lawsssscat -t bilibili ooo bilibili: lawsssscat ooo

在 openwrt luci 中,这些日志可以如下图找到 在这里插入图片描述

具体使用

root@OpenWrt_D2550:~# logread -h logread: option requires an argument: h Usage: logread [options] Options: -l 指定列出日志条数 -e 正则表达 -t 显示时间戳 time stamp -f Follow log messages -r Stream message to a server -F Log file -S Log size -p PID file -h Add hostname to the message -P Prefix custom text to streamed messages -z handle only messages with given facility (0-23), repeatable -Z ignore messages with given facility (0-23), repeatable -u Use UDP as the protocol -0 Use \0 instead of \n as trailer when using TCP root@OpenWrt_D2550:~# logger -h logger: unrecognized option: h BusyBox v1.35.0 (2022-02-20 04:00:11 UTC) multi-call binary. Usage: logger [-s] [-t TAG] [-p PRIO] [MESSAGE] Write MESSAGE (or stdin) to syslog -s 在控制台显示命令记录的日志 -t TAG Log using the specified tag (defaults to user name) -p PRIO Priority (number or FACILITY.LEVEL pair) e.g. logger "example" logger -p notice -t example_tag "example notice" logger -p err -t example_tag "example error" # Fri May 8 00:23:26 2020 user.notice root: example # Fri May 8 00:23:31 2020 user.notice example_tag: example notice # Fri May 8 00:23:40 2020 user.err example_tag: example error # 配置:/etc/config/system.

logd配置在/etc/config/system.

查看

root@OpenWrt_D2550:~# uci -N show system system.@system[0].hostname='OpenWrt_D2550' system.@system[0]=system system.@system[0].ttylogin='0' system.@system[0].log_size='64' system.@system[0].urandom_seed='0' system.@system[0].timezone='CST-8' system.@system[0].zonename='Asia/Shanghai' system.@system[0].log_proto='udp' system.@system[0].cronloglevel='9' system.@system[0].conloglevel='6' system.@system[0].log_file='/tmp/log/system.log' system.ntp=timeserver system.ntp.enabled='1' system.ntp.server='ntp.aliyun.com' 'time1.cloud.tencent.com' 'time.ustc.edu.cn' 'cn.pool.ntp.org'

在这里插入图片描述

更改文件后,运行

/etc/init.d/log restart /etc/init.d/system restart

读取新配置并重新启动服务。

日志消息有三个基本目标:RAM 环形缓冲区(默认)、本地持久文件、在TCP或UDP端口上侦听消息的远程目标。

详细的System Configuration参考: (英文版)https://openwrt.org/docs/guide-user/base-system/system_configuration (中文版)https://openwrt.org/zh/docs/guide-user/base-system/system_configuration(翻译有点奇怪)

NameTypeRequiredDefaultDescriptionhostnamestringnoOpenWrt系统的主机名buffersizeintegernokernel specific内核消息缓冲区的大小。conloglevel (con、console、控制台)integerno7(越大,记录越多)被记录到控制台(console)最大的日志级别,对于内核信息(kernel message)。只有低于此级别的消息将被打印到控制台。(记录到控制台的信息会被syslog收录,通过logread查看)1是alert,2是crit,3是err,4是warn,5是notice,6是info,7是debug,8是emerg较高级别的消息具有较低的日志级别编号。最高级别的消息是日志级别为 0 的消息。如果您想在控制台中获得更详细的消息,请将 conloglevel 设置为 8,如果您想要更少的消息,请将 conloglevel 降低到 4 甚至更少。Number between 1-8. The maximum log level for kernel messages to be logged to the console. Only messages with a level lower than this will be printed to the console. Higher level messages have lower log level number. Highest level messages are ones with log level 0. If you want more verbose messages in console put conloglevel to 8 if you want less messages lower conloglevel to 4 or even less. This option and similar parameters may not be effective since 17.x and later.cronloglevel (cron、crontab、定时任务)integerno5(越小,记录越多)被记录到syslog的最小日志级别,对于定时任务的信息(cron message)。 0 将会输出所有debug信息, 8 将会记录命令执行, 而 9 或更高只会记录错误信息。The minimum level for cron messages to be logged to syslog. 0 will print all debug messages, 8 will log command executions, and 9 or higher will only log error messages.klogconloglevel (klog、kernel log、内核日志)integerno7(越大,记录越多)被记录到控制台(console)最大的日志级别,对于内核信息(kernel message)。只有低于此级别的消息才会被打印到控制台。 与conloglevel相同并将覆盖它。log_buffer_sizeintegerno(none)基于 procd 的系统日志的日志缓冲区大小,可通过logread命令访问。默认为log_sizeif 未设置的值。log_filestringnono log file将日志消息写入的文件(类型file)。默认是不在文件中写入日志。系统日志文件最常用的位置是/var/log/messages.log_ipIP addressno(none)系统日志服务器的IP地址,除本地目的地之外,日志消息应该发送到该系统日志服务器。log_portintegerno514log_ip的远程日志服务器指定端口号。log_prefixstringno(none)将前缀添加到通过网络发送的所有日志消息中。log_protostringnoudp设置用于连接的协议,tcp 或 udp 。log_trailer_nullboo lno0在使用TCP时,使用\0 代替\n 作为trailer。log_remoteboolno1允许远程日志记录。log_sizeintegerno64文件或循环内存缓冲区的KiB大小。log_buffer_size如果未指定后者,则此值用作后备值。log_typestringnocircular不是 circular 就是 file.circular 选项是内存中固定大小的circular队列,而file是动态大小的文件,这个文件可以在内存中,也可以写入磁盘。注意:如果log_type设置为file,那么当日志填满时,设备可能会遇到空间不足的情况。对于板载存储有限的设备来说,这尤其是一个问题:内存或闪存。ttyloginboolno0需要对本地用户进行身份验证才能登录系统。默认禁用。适用于监听/etc/inittab的连接方法,如:键盘、串口等访问方式。urandom_seedstringno0种子的路径。允许在每次启动时保存一个新种子。 Path of the seed. Enables saving a new seed on each boot.timezonestringnoUTC日期和时间应在默认情况下呈现的时区。参考:https://github.com/openwrt/luci/blob/master/modules/luci-base/luasrc/sys/zoneinfo/tzdata.luazonenamestringnoUTC只有当使用glibc和zoneinfo时有用! (LIBC_USE_EGLIBC, PACKAGE_zoneinfo-*) 日期和时间的时区应默认呈现。 假设您要使用布鲁塞尔的时区,请将此值设为欧洲/布鲁塞尔。 值可以通过运行(cd /usr/share/zoneinfo; find *)找到

请添加图片描述请添加图片描述请添加图片描述

Openwrt使用rsyslog

See rsyslog - to e.g. rout all or specific logs to a (central) rsyslog receiver

opkg install rsyslog

With the config file: /etc/rsyslog.conf

*.info;mail.none;authpriv.none;cron.none;kern.none /var/log/messages .. kern.* @192.168.1.119:514

默认配置

root@OpenWrt_D2550:/tmp# cat /etc/rsyslog.conf module(load="imuxsock") module(load="imklog") module(load="imudp") input(type="imudp" port="514") #module(load="imtcp") #input(type="imtcp" port="514") $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat *.info;mail.none;authpriv.none;cron.none /var/log/messages authpriv.* /var/log/secure mail.* /var/log/maillog cron.* /var/log/cron local7.* /var/log/boot.log root@OpenWrt_D2550:/tmp#


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3