Linux syslog 运行机制

Busybox的syslogd认识与使用

syslogd 的基本工作原理:

  • syslogd 是一个系统日志守护进程,它接收来自各种进程和系统服务的日志消息,并根据配置将这些消息存储到不同的日志文件中。

syslogd日志记录器由两个守护进程(klogd,syslogd)和一个配置文件(syslog.conf)组成。

syslogd和klogd是很有意思的守护进程,syslogd是一个分发器,它将接收到的所有日志按照/etc/syslog.conf的配置策略发送到这些日志应该去的地方,当然也包括从klogd接收到的日志。

klogd首先接收内核的日志,然后将之发送给syslogd。

klogd不使用配置文件,它负责截获内核消息,它既可以独立使用也可以作为syslogd的客户端运行。

syslogd默认使用/etc/syslog.conf作为配置文件,负责截获应用程序消息,还可以截获klogd向其转发的内核消息。支持internet/unix domain sockets的特性使得这两个工具可以用于记录本地和远程的日志。

启动syslog之后,可以看出/var/log/messages在不停增加

  1. 重新启动syslogd /etc/init.d/syslogd restart

  2. 使用syslogd

2.syslogd配置syslog.conf

syslog.conf包括对syslogd的配置,每个配置包括两个域:selector和action。

2.1 syslog.conf的selector

selector有两部分组成:facility和level,两者之间用"."分隔;多个facility或者level之间用","分隔;多个selector之间用";"分隔

同时selector中可以使用通配符:

Name

Facility

Level

err/warn/...

任何一个facility

显示大于等于此级别的log

*

任何一个facility

任何一个级别

=

无效

只有该级别log才生效

!

无效

除了该级别,其他log生效

None

无效

不存储该facility任何log

2.2 syslog.conf的action

action主要是当信息满足selector时,该日志消息的输出方向。

一般分为三种:(1)存储到普通文件中;(2)写入到管道中;(3)远程转发到其它主机上。

常规文件

管道文件

远程转发

普通的文件名:/xx/bb

|文件名

@hostname

2.3 Facility和Level

提到syslog.con中的facility和level,需要看一下他在代码中对应关系。

相关facility和level都在syslog.h中定义,两这个共同组成一个32位数值;低3bit(0-3)表示level,其余部分(3-24)表示facility。

facilitynames[]中的名称对应syslog.conf中的facility,后面的值对应syslog()中的facility代码。

 

#ifdef SYSLOG_NAMES CODE facilitynames[] = { { "auth", LOG_AUTH }, { "authpriv", LOG_AUTHPRIV }, { "cron", LOG_CRON }, { "daemon", LOG_DAEMON }, { "ftp", LOG_FTP }, { "kern", LOG_KERN }, { "lpr", LOG_LPR }, { "mail", LOG_MAIL }, { "mark", INTERNAL_MARK }, /* INTERNAL */ { "news", LOG_NEWS }, { "security", LOG_AUTH }, /* DEPRECATED */ { "syslog", LOG_SYSLOG }, { "user", LOG_USER }, { "uucp", LOG_UUCP }, { "local0", LOG_LOCAL0 }, { "local1", LOG_LOCAL1 }, { "local2", LOG_LOCAL2 }, { "local3", LOG_LOCAL3 }, { "local4", LOG_LOCAL4 }, { "local5", LOG_LOCAL5 }, { "local6", LOG_LOCAL6 }, { "local7", LOG_LOCAL7 }, { NULL, -1 }

2.4 syslog.conf实例
 

#syslog.conf kern,user.* /var/log/messages #all messages of kern and user facilities kern.!err /var/log/critical #all messages of kern facility with priorities lower than err (warn, notice ...) .;auth,authpriv.none /var/log/noauth #all messages except ones with auth and authpriv facilities kern,user.*;kern.!=notice;*.err;syslog.none /var/log/OMG #some whicked rule just as an example =) . /dev/null #this prevents from logging to default log file (-O FILE or /var/log/messages)

Linux系统 coredump文件

Core dump 指的是进程由于异常或错误而终止时,系统将进程的内存映像(包括进程堆栈、寄存器状态等)保存到磁盘上的文件。这个文件可以用于分析进程崩溃的原因和状态。在 Linux 系统中,可以通过以下步骤

启用和使用 core dump:

1.使用ulimit命令:可以通过 ulimit-c unlimited命令使能Coredump文件的生成

2.修改系统配置文件:可以修改/proc/sys/kernel/core_pattern文件来指定coredump

3.gdb 分析your_program core.<pid>

ulimit -c unlimited

这个命令会将 core dump 文件的大小限制设置为无限制,这样就可以保存任何大小的 core dump 文件了。如果想要在每次启动系统时自动设置这个限制,可以将 ulimit -c unlimited 添加到系统启动脚本中,如 /etc/profile。

运行程序并生成 core dump 文件:在程序崩溃时,可以通过以下命令生成 core dump 文件:

ulimit -c unlimited # 先启用 core dump 支持 ./your_program # 运行程序

运行程序时,如果发生崩溃,系统会将进程的内存映像保存到一个 core dump 文件中。文件的名称通常是 core.<pid>,其中 <pid> 是进程的 ID。

分析 core dump 文件:可以使用 GDB 或其他调试工具来分析 core dump 文件,找出程序崩溃的原因和状态。例如,使用 GDB 可以通过以下命令来加载 core dump 文件:

gdb your_program core.<pid>

加载 core dump 文件后,可以使用 GDB 的各种命令来查看进程的状态、调用栈、寄存器状态等信息,以帮助分析崩溃原因。

原文链接:https://blog.csdn.net/weixin_42759508/article/details/138092162

文件的保存路径和命名规则

使用 sysctl 命令查看当前的 kernel.core_pattern 参数,它决定了核心转储文件的存储位置和格式

 

root@x9sp_armor_ap2:/var/log# sysctl kernel.core_pattern kernel.core_pattern = /data/coredump/current/core-%e-%p-%t-%s camshare coredump lost+found root@x9sp_armor_ap2:/data# cd coredump/ root@x9sp_armor_ap2:/data/coredump# ls -lh drwxr-xr-x 2 root root 1.0K Jan 1 05:00 backup -rw-r--r-- 1 root root 500.0M Jan 1 05:00 backup.img drwxr-xr-x 2 root root 1.0K Dec 31 2024 current -rw-r--r-- 1 root root 500.0M Jan 1 05:34 current.img root@x9sp_armor_ap2:/var/log# ls atop boot dmesg lastlog sa wtmp

armor_x9sp/yocto/meta-semidrive/recipes-core/coredump/coredump-data$ ls

coredump-data.sh coredump-profile.sh coredump.sh LICENSE

脚本的意思,在userdata分区划分2个500M,做成ext4软磁盘,然后分别存current和backup的数据,通过目录/data/coredump/backup 和/data/coredump/current 查看存储的内容

 

#!/bin/sh mkdir -p /data/coredump/backup mkdir -p /data/coredump/current if [ -e /data/coredump/backup.img ] && [ -e /data/coredump/current.img ] then tmp=/data/coredump/tmp.img mv /data/coredump/backup.img $tmp mv /data/coredump/current.img /data/coredump/backup.img mv $tmp /data/coredump/current.img fi if [ -e /data/coredump/current.img ] then echo "exist /data/coredump/current.img" else flimit=`ulimit -f` ulimit -f 1024000 dd if=/dev/zero of=/data/coredump/current.img bs=1M count=500 losetup /dev/loop7 /data/coredump/current.img mkfs.ext4 /dev/loop7 -N 8 ulimit -f $flimit fi losetup /dev/loop7 /data/coredump/current.img mount -t ext4 /dev/loop7 /data/coredump/current rm -rf /data/coredump/current/* if [ -e /data/coredump/backup.img ] then echo "exist /data/coredump/backup.img" else flimit=`ulimit -f` ulimit -f 1024000 dd if=/dev/zero of=/data/coredump/backup.img bs=1M count=500 losetup /dev/loop6 /data/coredump/backup.img mkfs.ext4 /dev/loop6 -N 8 ulimit -f $flimit fi losetup /dev/loop6 /data/coredump/backup.img mount -t ext4 /dev/loop6 /data/coredump/backup echo "/data/coredump/current/core-%e-%p-%t-%s" > /proc/sys/kernel/core_pattern

这里 /var/crash/core-%e-%p-%t 表示将核心转储文件存储在 /var/crash 目录下,文件名为 core-<程序名>-<进程PID>-<时间戳>

Config 配置

 

root@_ap2:/var/log# cat /etc/syslog.conf # /etc/syslog.conf Configuration file for busybox's syslogd utility root@x9sp_armor_ap2:/var/log# cat /etc/syslog-startup.conf # This configuration file is used by the busybox syslog init script, # /etc/init.d/syslog[.busybox] to set syslog configuration at start time. ## /mnt/nfs/mnt/share 这个在代码 sdrvnfsmnt ln -s /var/run/nfs ${D}/mnt/nfs DESTINATION=file # log destinations (buffer file remote) LOGFILE=/mnt/nfs/mnt/share/syslog_ap2/messages # where to log (file) REMOTE=loghost:514 # where to log (syslog remote) REDUCE=no # reduce-size logging DROPDUPLICATES=no # whether to drop duplicate log entries ROTATESIZE=4096 # rotate log if grown beyond X [kByte] ROTATEGENS=90 # keep X generations of rotated logs BUFFERSIZE=512 # size of circular buffer [kByte] FOREGROUND=no # run in foreground (don't use!) #LOGLEVEL=5 # local log level (between 1 and 8)

 

root@ap2:/data/coredump/current# ls -lhu -rw------- 1 root root 216.0K Jan 1 05:07 core-crash_program-1401-1704085667-11

 

root@_ap2:/etc# grep -rn "var/log" . ./sysconfig/sysstat:16:SA_DIR=/var/log/sa ./rc4.d/S99stop-bootlogd:67: [ -f /var/log/boot ] && [ -f /var/log/boot~ ] ./rc4.d/S99stop-bootlogd:69: cd /var/log ./rc2.d/S99stop-bootlogd:67: [ -f /var/log/boot ] && [ -f /var/log/boot~ ] ./rc2.d/S99stop-bootlogd:69: cd /var/log ./atop/atop.daily:4:LOGPATH=/var/log/atop ./rc5.d/S99stop-bootlogd:67: [ -f /var/log/boot ] && [ -f /var/log/boot~ ] ./rc5.d/S99stop-bootlogd:69: cd /var/log ./init.d/umountnfs.sh:14:# Write a reboot record to /var/log/wtmp before unmounting ./init.d/bootlogd:67: [ -f /var/log/boot ] && [ -f /var/log/boot~ ] ./init.d/bootlogd:69: cd /var/log ./init.d/dmesg.sh:10:if [ -f /var/log/dmesg ]; then ./init.d/dmesg.sh:14: mv -f /var/log/dmesg /var/log/dmesg.old ./init.d/dmesg.sh:17:dmesg -s 131072 > /var/log/dmesg ./init.d/stop-bootlogd:67: [ -f /var/log/boot ] && [ -f /var/log/boot~ ] ./init.d/stop-bootlogd:69: cd /var/log ./rcS.d/S07bootlogd:67: [ -f /var/log/boot ] && [ -f /var/log/boot~ ] ./rcS.d/S07bootlogd:69: cd /var/log ./rcS.d/S38dmesg.sh:10:if [ -f /var/log/dmesg ]; then ./rcS.d/S38dmesg.sh:14: mv -f /var/log/dmesg /var/log/dmesg.old ./rcS.d/S38dmesg.sh:17:dmesg -s 131072 > /var/log/dmesg ./rc1.d/S31umountnfs.sh:14:# Write a reboot record to /var/log/wtmp before unmounting ./rc6.d/S31umountnfs.sh:14:# Write a reboot record to /var/log/wtmp before unmounting ./login.defs:15:# Enable logging and display of /var/log/faillog login(1) failure info. ./login.defs:30:# Enable logging and display of /var/log/lastlog login(1) time info. ./login.defs:75:#SULOG_FILE /var/log/sulog ./login.defs:97:# last(1), when invoked as lastb(1), will read /var/log/btmp, so... ./login.defs:99:FTMP_FILE /var/log/btmp ./rc3.d/S99stop-bootlogd:67: [ -f /var/log/boot ] && [ -f /var/log/boot~ ] ./rc3.d/S99stop-bootlogd:69: cd /var/log ./rc0.d/S31umountnfs.sh:14:# Write a reboot record to /var/log/wtmp before unmounting ./default/volatiles/00_core:34:f root root 0664 /var/log/wtmp none ./default/volatiles/00_core:38:l root root 0755 /var/log /var/volatile/log ./default/volatiles/01_bootlogd:1:f root root 0644 /var/log/boot none ./default/volatiles/99_sysstat:1:d root root 0755 /var/log/sa none ./default/volatiles/99_sshd:2:f root root 0644 /var/log/lastlog none ./default/postinst:2:LOGFILE=/var/log/postinstall.log ./logrotate-dmesg.conf:4:/var/log/dmesg { ./logrotate.d/psaccs_atop:2:/var/log/atop/dummy_before { ./logrotate.d/psaccu_atop:2:/var/log/atop/dummy_after { ./lvm/lvm.conf:98: #file = "/var/log/lvm2.log"

/var/log/wtmp 是许多类 Unix 系统中用于记录用户登录和注销信息以及系统重启等事件的日志文件。系统管理员或相关工具可以通过查看这个文件来了解系统的使用情况和状态变化

在很多基于 Linux 的系统中, /var/log/sasysstat 软件包紧密相关,sysstat 用于收集、报告和保存系统活动信息。以下是关于 /var/log/sa 更详细的解读:

sysstat/var/log/sa 的关系

sysstat 包含了诸如 sar(System Activity Reporter)等工具,用于收集系统资源使用情况的数据,例如 CPU 使用率、内存使用、磁盘 I/O、网络流量等。

  • /var/log/sa 目录是 sysstat 存储这些收集到的数据的地方。该目录下通常会有以 sa 开头并跟上日期数字的文件,比如 sa01sa02 等,这些文件按天存储系统统计数据。例如,sa01 可能存储本月 1 号当天的系统活动数据

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

离线录制激光雷达数据进行建图

目前有一个2D激光雷达&#xff0c;自己控制小车运行一段时间&#xff0c;离线获取到激光雷达数据后运行如下代码进行离线建图。 roslaunch cartographer_ros demo_revo_lds.launch bag_filename:/home/firefly/AutoCar/data/rplidar_s2/2025-01-08-02-08-33.bag实际效果如下 d…

SDK调用文心一言如何接入,文心一言API接入教程

一、前期准备 注册百度智能云账号&#xff1a; 前往百度智能云官网注册一个账号。这是接入文心一言API的基础。 了解API接口&#xff1a; 在百度智能云开放平台中&#xff0c;找到文心一言API的详情页&#xff0c;了解提供的API接口类型&#xff08;如云端API、移动端API、离线…

CNN张量输入形状和特征图

CNN张量输入形状和特征图 这个是比较容易理解的张量的解释&#xff0c;比较直观 卷积神经网络 在这个神经网络编程系列中&#xff0c;我们正在逐步构建一个卷积神经网络&#xff08;CNN&#xff09;&#xff0c;所以让我们看看CNN的张量输入。 ​ ​ 在最后两篇文章中&…

【Linux】4.Linux常见指令以及权限理解(2)

文章目录 3. Linux指令3.1 ls指令和rm指令补充3.2 man指令&#xff08;重要&#xff09;3.3cp指令&#xff08;重要&#xff09;输出重定向3.3.1ubuntu20.04如何安装tree 3.4 mv指令&#xff08;重要&#xff09;mv指令更改文件名mv指令更改目录名 如何看待指令指令的重命名3.5…

硬件设计-齐纳管

目录 摘要 详情 齐纳管的工作电流、 摘要 齐纳管&#xff08;Zener Diode&#xff09;是一种特殊的二极管&#xff0c;它能够在特定的反向电压下保持电流稳定。正常情况下&#xff0c;二极管只允许正向电流通过&#xff0c;而阻止反向电流流过。而齐纳管在一定的反向电压下可…

C语言进阶——1数据的存储

目录 1. 数据类型介绍1.1 类型的基本归类&#xff1a;1.1.1 整形家族1.1.2 浮点型家族1.1.3 构造类型&#xff1a;1.1.4.指针类型1.1.5 void 表示空类型&#xff08;无类型&#xff09; 2. 整形在内存中的存储2.1 原码、反码、补码2.1.1 示例 20在计算机中的存储 2.2 大小端2.2…

【论文阅读】MAMBA系列学习

Mamba code&#xff1a;state-spaces/mamba: Mamba SSM architecture paper&#xff1a;https://arxiv.org/abs/2312.00752 背景 研究问题&#xff1a;如何在保持线性时间复杂度的同时&#xff0c;提升序列建模的性能&#xff0c;特别是在处理长序列和密集数据&#xff08;如…

数据结构——查找二叉树

二叉搜索树的概念 如图所示&#xff0c;二叉搜索树&#xff08;binary search tree&#xff09;满足以下条件。 对于根节点&#xff0c;左子树中所有节点的值 < 根节点的值 < 右子树中所有节点的值。任意节点的左、右子树也是二叉搜索树&#xff0c;即同样满足条件 1. …

【并发多个请求并失败重发】

文章目录 需求思路代码 需求 可以一次发任意多个请求&#xff0c;如果有失败&#xff0c;则重发失败的请求&#xff0c;知道所有的都成功&#xff0c;或者超出最大重试次数&#xff0c;才返回最终结果。封装成可复用的并发请求工具。 实际的应用场景&#xff1a;数据太大&…

hutool糊涂工具通过注解设置excel宽度

import java.lang.annotation.*;Documented Retention(RetentionPolicy.RUNTIME) Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER}) public interface ExcelStyle {int width() default 0; }/*** 聊天记录*/ Data public class DialogContentInfo {/**…

Redis高频知识点

Redis 目录 1 Redis是AP的还是CP的&#xff1f;2 介绍一下Redis的集群方案&#xff1f;3 什么是Redis的数据分片&#xff1f;4 Redis为什么这么快&#xff1f;5 Redis 的事务机制是怎样的&#xff1f;7 Redis的持久化机制是怎样的&#xff1f;8 Redis 的过期策略是怎么样的&a…

shell程序题1.11

作业&#xff1a; shell 脚本写出检测 /tmp/size.log 文件如果存在显示它的内容&#xff0c;不存在则创建一个文件将创建时间写入。 #!/bin/bash#-f 选项来判断 /tmp/size.log 文件是否是一个常规文件if [ -f "/tmp/size.log" ];thencat /tmp/size.logecho "…

Docker: 教程07 - ( 如何对 Docker 进行降级和升级)

如果我们使用 docker 来管理容器&#xff0c;那么保持 docker 引擎的更新将会是十分重要的&#xff0c;这一篇文章我们将会讨论如何对Docker 进行降级和升级。 准备工作 - docker 环境 我们需要拥有一个安装好 docker 的运行环境。 如果你需要了解如何安装 docker 可以通过如…

LabVIEW与CANopen常见问题及解决方法

1. 固件版本不匹配问题 ​ 错误信息&#xff1a; "Firmware image version is incompatible with C Series modules. Solution: Update the firmware by following the instructions in Firmware_Update_Instructions.html, accessible from the National Instruments\NI…

《框架程序设计》期末复习

目录 Maven 简介 工作机制&#xff08;★&#xff09; 依赖配置&#xff08;★&#xff09; Maven命令 MyBatis 入门 单参数查询&#xff08;★&#xff09; 多参数查询&#xff08;★★★&#xff09; 自定义映射关系&#xff08;★★★&#xff09; 基本增删改查操…

51单片机——I2C-EEPROM

I2C&#xff1a;总线标准或通信协议 EEPROM&#xff1a;AT24C02芯片 开发板板载了1个EEPROM模块&#xff0c;可实现IIC通信 1、EEPROM模块电路&#xff08;AT24C02&#xff09; 芯片的SCL和SDA管脚是连接在单片机的P2.1和P2.0上 2、I2C介绍 I2C&#xff08;Inter&#xff…

了解npm:JavaScript包管理工具

在JavaScript的生态系统中&#xff0c;npm&#xff08;Node Package Manager&#xff09;无疑是一个举足轻重的存在。它不仅是Node.js的包管理器&#xff0c;更是前端开发不可或缺的一部分&#xff0c;为开发者提供了丰富的包资源、便捷的包管理以及强大的社区支持。本文将深入…

Vscode辅助编码AI神器continue插件

案例效果 1、安装或者更新vscode 有些版本的vscode不支持continue,最好更新到最新版,也可以直接官网下载 https://code.visualstudio.com/Download 2、安装continue插件 搜索continue,还未安装的,右下脚有个Install,点击安装即可 <

ffmpeg aac s16 encode_audio.c

用ffmpeg库时&#xff0c;用代码对pcm内容采用aac编码进行压缩&#xff0c;出现如下错误。 [aac 000002bc5edc6e40] Format aac detected only with low score of 1, misdetection possible! [aac 000002bc5edc8140] Error decoding AAC frame header. [aac 000002bc5edc81…

what?ngify 比 axios 更好用,更强大?

文章目录 前言一、什么是ngify&#xff1f;二、npm安装三、发起请求3.1 获取 JSON 数据3.2 获取其他类型的数据3.3 改变服务器状态3.4 设置 URL 参数3.5 设置请求标头3.6 与服务器响应事件交互3.7 接收原始进度事件3.8 处理请求失败3.9 Http Observables 四、更换 HTTP 请求实现…