嵌入式开发之syslog和rsyslog构建日志记录

news2024/10/7 2:27:54

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/956982.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QT DAY 2

window.cpp #include "window.h" #include<QDebug> #include<QIcon> Window::Window(QWidget *parent) //构造函数的定义: QWidget(parent) //显性调用父类的构造函数 {//this->resize(430,330);this->resize(QSize(800,600));// this…

音视频入门基础理论知识

文章目录 前言一、视频1、视频的概念2、常见的视频格式3、视频帧4、帧率5、色彩空间6、采用 YUV 的优势7、RGB 和 YUV 的换算 二、音频1、音频的概念2、采样率和采样位数①、采样率②、采样位数 3、音频编码4、声道数5、码率6、音频格式 三、编码1、为什么要编码2、视频编码①、…

无涯教程-Android - CheckBox函数

CheckBox是可以由用户切换的on/off开关。为用户提供一组互不排斥的可选选项时,应使用复选框。 CheckBox 复选框属性 以下是与CheckBox控件相关的重要属性。您可以查看Android官方文档以获取属性的完整列表以及可以在运行时更改这些属性的相关方法。 继承自 android.widget.T…

探索IPv6:未来互联的新时代

文章目录 一、IPv4的问题二、IPv6的优势三、地址格式与地址书写压缩四、网段划分五、地址分类六、IPv6邻居发现协议七、常用命令 首先可以看下思维导图&#xff0c;以便更好的理解接下来的内容。 一、IPv4的问题 地址资源枯竭&#xff1a; 由于IPv4地址长度有限&#xff0c;可用…

导致事物失效的场景有哪些 ?

目录 1. 导致事物失效的场景有哪些 &#xff1f; 1.1 为什么 Transaction 修饰非 public 方法会导致事物失效 &#xff1f; 1.2 代码中使用 try/catch 处理了异常为什么会导致事物失效 &#xff1f; 1.3 为什么在类内部调用 Transaction 修饰的方法会导致事务失效 ? 1.4 …

一图胜千言!数据可视化多维讲解(Python)

数据聚合、汇总和可视化是支撑数据分析领域的三大支柱。长久以来&#xff0c;数据可视化都是一个强有力的工具&#xff0c;被业界广泛使用&#xff0c;却受限于 2 维。在本文中&#xff0c;作者将探索一些有效的多维数据可视化策略&#xff08;范围从 1 维到 6 维&#xff09;。…

批处理启动程序

&#x1f495;批处理启动程序 新建一个txt&#xff0c;把后缀改成bat&#xff0c;编辑脚本&#xff1a;start exe路径即可&#xff1a;

$nextTick使用

在Vue中&#xff0c;$nextTick是一个实例方法&#xff0c;用于在DOM更新之后执行回调函数。它可以用于在更新视图后执行一些操作&#xff0c;例如访问更新后的DOM元素或执行其他异步任务。 以下是$nextTick的使用方法&#xff1a; this.$nextTick(() > {// 在DOM更新后执行…

【若依框架RuoYi-Vue-Plus 图片回显不显示问题,OSS文件上传或者本地上传】

一、问题 1.设计表 product&#xff08;商品表&#xff09; 有 id &#xff08;id&#xff09; name&#xff08;商品名&#xff09;icon&#xff08;图标&#xff09; 2.使用若依代码生成功能&#xff0c;导入product表&#xff0c;代码生成。 3.将生成的代码导入到项目中得到…

Vue-Router 一篇搞定 Vue3

前言 在 Web 前端开发中&#xff0c;路由是非常重要的一环&#xff0c;但是路由到底是什么呢&#xff1f; 从路由的用途上讲 路由是指随着浏览器地址栏的变化&#xff0c;展示给用户不同的页面。 从路由的实现原理上讲 路由是URL到函数的映射。它将 URL 和应用程序的不同部分…

PXE 装机(五十)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、PXE是什么 二、PXE的组件 三、配置vsftpd 四、配置tftp 五、准备pxelinx.0文件、引导文件、内核文件 ​六、配置dhcp 七、创建default文件 八、配置pxe无人值守…

C语言圣经KR笔记 1.10外部变量和作用域

1.10外部变量和作用域 上一节main中的变量&#xff0c;如line、longest等等&#xff0c;对main来说是私有的或者说是局部的。因为它们是在main中定义的&#xff0c;其他函数不能直接访问它们。其他函数中的变量也是如此&#xff0c;例如&#xff0c;getline中的变量 i 与copy中…

C语言:static关键字的使用

1.static修饰局部变量 这是static关键字使用最多的情况。我们知道局部变量是在程序运行阶段在栈上创建的&#xff0c;但是static修饰的局部变量是在程序编译阶段在代码段&#xff08;静态区&#xff09;创建的。所以在static修饰的变量所在函数执行结束后该变量依然存在。 //…

C++(17):标准库特殊设施

tuple 类型 tuple是类似pair的模板。 每个pair的成员类型都不相同&#xff0c;但每个 pair都恰好有两个成员。不同tuple类型的成员类型也不相同&#xff0c;但一个tuple可以有任意数量的成员。 每个确定的tuple类型的成员数目是固定的&#xff0c;但一个tuple类型的成员数目可…

OS 死锁处理

如果P先申请mutex 则mutex从1置零&#xff0c;假设申请到的empty 0则empty变成-1阻塞态 同理C中mutex从0变为-1&#xff0c;那么如果想离开阻塞态&#xff0c;那么就需要执行V&#xff08;empty&#xff09;但是如果执行V&#xff08;empty&#xff09;就需要P&#xff08;mu…

postgresql-窗口函数

postgresql-窗口函数 简介窗口函数的定义分区选项&#xff08;PARTITION BY&#xff09;排序选项&#xff08;ORDER BY&#xff09;窗口选项&#xff08;frame_clause&#xff09; 聚合窗口函数排名窗口函数演示了 CUME_DIST 和 NTILE 函数 取值窗口函数 简介 常见的聚合函数&…

飞致云开源社区月度动态报告(2023年8月)

自2023年6月起&#xff0c;中国领先的开源软件公司FIT2CLOUD飞致云以月度为单位发布《飞致云开源社区月度动态报告》&#xff0c;旨在向广大社区用户同步飞致云旗下系列开源软件的发展情况&#xff0c;以及当月主要的产品新版本发布、社区运营成果等相关信息。 飞致云开源大屏…

开讲啦!0基础也能玩转飞桨开源社区

作为cs/ai学生&#xff0c;你是否经历过这些至暗时刻&#xff1a; 希望快速入门深度学习&#xff0c;无奈网上到处都是看不懂“黑话”一遍遍计算综测小数点后四位&#xff0c;不断在保研边缘反复横跳看着“洁白如新”的履历叹气&#xff0c;一听到“考研复试”就头皮发麻“0实习…

【ES6】Promise.allSettled的用法

Promise.allSettled() 是一个Promise方法&#xff0c;用于处理一个Promise数组&#xff0c;返回一个新的Promise数组&#xff0c;每个元素对应原始Promise的状态。这个方法可以用于处理多个异步操作&#xff0c;并且能够获取每个操作的结果和状态。 下面是Promise.allSettled(…

基于蛇优化算法优化的BP神经网络(预测应用) - 附代码

基于蛇优化算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码 文章目录 基于蛇优化算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码1.数据介绍2.蛇优化优化BP神经网络2.1 BP神经网络参数设置2.2 蛇优化算法应用 4.测试结果&#xff1a;5.Matlab代…