内核中printk发出的消息是这样传递到用户空间的。
内核留给用户空间的接口是syslog(2),glibc对它进行了包装,于是就有了klogctl(3)和syslog(3)。
先由klogd通过klogctl(3)搜集内核消息(见sysklogd/klogd.c),并通过自己实现的syslog()(注意:和syslog(2),syslog(3)都不一样)传递给 syslogd。syslogd根据/etc/syslog.conf的配置情况进行记录。syslogd提供的是一个统一的方式,它不单单记录内核的消息,还包括其它服务器进程的消息,比如Apache,vsftp。
klogd和syslogd用的syslog()的实现用的是Unix domain socket,如果你看源代码(sysklogd/syslog.c)的话很容易就知道这一点。所以,所谓的syslog()/openlog()/closelog()等接口无非就是对这个socket操作的一个包装。这也就清楚了klogd和syslogd之间的通信方式。
根据syslogd的源代码(sysklogd/syslogd.c)来看,记录日志也可以是发送到远程的,而那个socket就是用的inet socket了。
多说一句,其实内核给出的oops只是一堆地址,而把地址和相应的符号对应起来也是由klogd完成的。sysklogd/ksym.c里有搜索System.map的过程,搜索的顺序是:
“/boot/System.map”
“/System.map”
“/usr/src/linux/System.map”
这就是最好的证据。一些细心的人或许还会奇怪,我们不是还有/proc/kallsyms么?怎么不用它?我知道的解释是:为了照顾那些没有/proc文件系统的Linux系统。;-)
我们再来看syslog(3),即glibc实现的syslog()。看一下glibc中的源代码,我们就会发现glibc中的syslog和sysklogd自己的实现类似,也是用unix domain socket来实现的。具体可以看:glibc/misc/syslog.c。
这两种实现之所以都能够传递给syslogd,是因为它们的unix domain socket都是用的/dev/log这个文件。
而我们最常用的查看内核消息的命令dmesg(1)和上面两位守候进程没太大关系,它是直接通过glibc的klogctl(3)函数来读取内核消息的。详细见:util-linux-2.13-pre7/sys-utils/dmesg.c。
如果想了解更多关于syslogd的东西,可以参考这篇文章。
想了解内核的中对syslog(2)的实现,可以参考内核源代码:kernel/printk.c。
分享到:
相关推荐
Linux下的syslog模块是系统日志记录的重要工具,它允许应用程序将各种消息和错误信息记录到日志文件中,或者通过网络发送到日志服务器。syslog不仅在系统管理、故障排查和安全性监控中扮演关键角色,而且对于开发...
在Linux环境中,syslog-ng扮演着至关重要的角色,帮助管理员监控系统活动,进行故障排查和安全分析。本篇文章将详细介绍syslog-ng的1.6.7 RPM安装包和源码安装包的使用,以及与之相关的eventlog模块。 首先,我们来...
### Linux的Syslog服务来记录Cisco路由器的日志(基本配置) #### Syslog服务概述 Syslog(系统日志协议)是一种工业标准的轻量级协议,用于在计算机间传输事件日志信息。它广泛应用于网络设备、服务器以及操作系统...
在Linux环境中,syslog是一种标准的日志记录系统,用于收集和处理系统日志信息。将syslog信息从一台Linux服务器推送到另一台Linux服务器的syslog服务,可以集中管理多个服务器的日志,便于监控和故障排查。以下是...
Linux syslog 服务器的基本配置 Linux 的 syslog 服务是一种系统日志记录服务,用于记录和管理系统日志。/syslog 服务可以将日志信息记录到本地文件或远程服务器上。本文主要介绍如何配置 Linux 的 syslog 服务器来...
### Linux 下 cacti + syslog-ng + snare 实现日志集中管理 #### 知识点一:syslog-ng 的作用与安装 - **syslog-ng** 是一个强大的日志管理工具,它允许用户收集、过滤和转发来自不同源的日志消息。 - 在 CentOS ...
在IT领域,syslog、syslog4j、syslogd和Linux syslog是系统日志管理的重要组成部分,尤其在服务器监控、故障排查和安全审计中扮演着至关重要的角色。以下是对这些概念的详细解释: 1. **syslog**:syslog是一种网络...
Linux系统下使用Syslog进行远程登录 Syslog 是 Linux 系统下的一种标准功能,它可以将登录信息记录到本地文件和远程系统中。在 Linux 系统中,Syslog 可以用于远程登录管理,以便更好地管理和监控系统的登录活动。...
【Linux-Syslog】是关于Linux系统日志记录机制的重要主题。在Linux操作系统中,Syslog是一个标准的服务,用于收集和处理来自不同软件组件的日志信息。它为系统管理员提供了监控、诊断和分析系统事件的强大工具。这篇...
在 Linux 服务器中,可以使用 rsyslog 或 syslog-ng 来配置 syslog。rsyslog 是一个基于 syslog 的日志记录系统,可以将日志发送到远程 syslog 服务器。syslog-ng 是一个功能强大的日志记录系统,支持多种日志协议。...
运行软件: 至此,windows下syslog搭建好,接下来是Linux配置syslog服务器。 6. CentOS配置rsyslog客户端远程记录日志: 1. 安装Rsyslog守护进程: # rpm -qa " grep rsyslog # rsyslogd –v 若rsyslog守护进程没有...
Linux 系统日志服务(syslog)是一个用于收集、处理和存储系统及应用程序日志信息的标准服务。在Linux环境中,syslog对于监控系统状态、诊断问题和审计系统活动至关重要。本文档“D1-H Tina Linux syslog 使用指南1...
Linux 环境下 syslog 日志系统研究 本文研究了 Linux 环境下 syslog 日志系统,分析了 syslog 机制的实现和应用。 syslog 是 Linux 系统的日志程序,具有很强的灵活性,可以将日志信息写入到不同的文件中,以便于...
Linux+Cacti+Syslog-ng+Snare的组合是一种高效且强大的日志集中管理系统,它可以帮助IT管理员收集、分析和管理来自多个网络设备的日志信息。这个系统的主要组成部分包括: 1. Linux:作为基础操作系统,Linux提供了...
syslog日志服务器配置在以下系统上实验成功: Linux 系统 (Redhat5.X、Cent OS 6、Fedora 6) Unix 系统 (SUN Solaris 10、AIX 6.1、HP-UNIX) Windows 系统 (Window XP/server) 网络设备 (Cisco...
在Windows服务器环境中,syslog是一种广泛使用的日志记录协议,主要用在Unix和Linux系统中。然而,随着跨平台需求的增长,Windows服务器也开始支持syslog服务,以便与不同操作系统之间的日志集成。以下是对如何在...
在给定的文件列表中,"文中用的文件.rar"可能包含了一些关于syslog使用的示例代码或配置文件,而"zysong.rar"可能是个人或特定项目关于syslog的工具或资料。解压这些文件,你可以深入学习和实践syslog的使用,例如...
Kiwi Syslog Server 是一款经济实惠的 syslog 管理工具,可以接收跨网络设备(路由器、交换机、防火墙等)、服务器(Windows 、Linux服务器)的日志,对日志集中存储和管理以及报警。 亲测可用,比较好用!参考:...
8. **兼容性**:与多种syslog服务器和设备兼容,包括Linux、Unix、Windows系统以及各种网络设备。 9. **易用性**:提供直观的图形用户界面,使得非技术背景的用户也能轻松操作。 10. **扩展性**:支持与其他监控工具...