Linux日志系统分析:rsyslog、syslog和klog
参考博客:
https://blog.csdn.net/lidonghat/article/details/55004280
https://blog.csdn.net/u012247418/article/details/83684052
1.syslog是 Unix 系统的一个常见组件,用于执行系统日志记录活动。
2.syslogd 是它的守护进程,syslogd 从一组日志源(如 /dev/log 和 /dev/klog )中读取数据,并按照 /etc/syslog.conf 中的说明处理这些日志消息。通过调用syslog(),可将应用程序日志消息记录到 syslog 中。syslog 消息采用一种包含可选优先级和设备的标准格式。优先级指示消息的紧急程度,设备指示发布消息的子系统。/usr/include/syslog.h中定义了它的优先级和设备资源。
3.klog是一个从Unix内核接受消息的设备,klogd 守护进程获得并记录 Linux 内核信息。通常,syslogd 会记录 klogd 传来的所有内核信息。
kernel---> 物理终端(/dev/console) --> /var/log/message 命令dmesg 就是控制台输出/var/log/message日志信息
/sbin/init
/var/log/message: 系统标准错误日志信息;非内核产生引导信息,各子系统产生的信息;
/var/log/maillog: 邮件系统产生的日志信息;
/var/log/secure: 系统登录日志信息
----------------------
syslogd是Linux下的一个记录日志文件服务。从结构来说,可以理解为这个服务下面有一系列的子服务,例如mail、auth、cron、kern等等,这些子服务对外提供日志记录的功能,而当其它的程序或服务需要记录日志的时候,就可以直接调用这些子服务将日志记录到设定的地方。而配置这整个守护进程以及其子服务的地方就是/etc/syslog.conf这个文件。
而目前不少的Linux发行版已经用rsyslogd将syslogd代替了。rsyslogd是syslogd的升级版,其配置语法与syslogd的配置文件一致。ubuntu-gnome-16.04使用的是rsyslogd。
注:
在用户空间有专门用于记录系统日志的程序,统称为“syslog守护进程”。早期及现在的大部分嵌入式系统使用的是klogd+syslogd组合,现在大多数发行版都使用rsyslogd或者syslogd-ng。
如果需要修改系统日志配置,修改以下两个文件。
1)/etc/rsyslog.conf
2)/etc/rsyslog.d/50-default.conf 日志文件的记录规则和路径
操作:
sudo service rsyslog restart
sudo service rsyslog stop
sudo service rsyslog start
2. 查看linux日志的三种途径:
1)dmesg
printk()打印的日志会写到kernel ring buffer(环缓冲区)中,dmesg是从kernel ring buffer中读取内核日志信息;效果等同于cat /var/log/message
2)/var/log/
系统所有日志(包括用户日志和系统内核日志)均记录在/var/log/目录下。
rsyslogd守护进程根据/etc/rsyslog.conf和/etc/rsyslog.d/XXXXX.conf,将不同的服务产生的log记录到不同的文件中。
3)/proc/kmsg
通过读取/proc/kmsg也可以得到ring buffer(环缓冲区)的日志,但是对/proc/kmsg进行读操作后,ring buffer中被读取的数据将被清空。
注:如果启用了rsyslogd服务,则不能读取/proc/kmsg 文件(文件为空),同一时间只能用一种方法来获取日志文件。
3. 日志记录的接口:
1)内核空间:printk()
可以使用dmesg命令来查看,使用printk()打印的日志同时也会记录在/var/log/kern.log和/var/log/syslog。当然也可以关闭rsyslogd服务,通过读取/proc/kmsg来查看。
2)用户空间:syslog()函数和logger(logger可在命令行中直接执行)
void syslog(int priority, char*format,……);
打印的日志记录在 /var/log/syslog文件中。
注:据自己理解,syslog()打印的日志不会写到kernel ring buffer,只有printk才会写入kernel ring buffer。
4. 自定义日志记录路径
4.1 修改/etc/rsyslog.d/50-default.conf
在文件最后添加如下一行:
local0.* /var/log/my_logfile0
注:local0—local7均可
-----------------------------
解读文件:/etc/syslog.conf或者rsyslog.conf
配置文件定义格式为:facility.priority action
facility ,可以理解为日志的来源或设备目前常用的
auth # 认证相关的
authpriv #权限,授权相关的
cron #任务计划相关的
daemon #守护进程相关的
kern #内核相关的
lpr #打印相关的
mail #邮件相关的
mark #标记相关的
news #新闻相关的
security #安全相关的,与auth类似
user #用户相关的
uucp #unix to unix cp 相关的
local0-local7 #用户自定义
* # *表示所有类型
priority (log level) 日志级别从低到高
debug #程序或者系统调试信息
info #一般信息
notice #不影响正常功能,需要注意的信息
warning/warn #可能影响系统功能,需要提醒用户的重要事件
err/error #错误信息
crit # 比较严重的
alert #必须马上处理的,警告
emerg/oanic # 会导致系统不可用的
* # 所有日志级别
none # 跟 * 相反表示什么都没有
action (动作) 日志记录位置
系统上的绝对路径 #普通文件 如:/var/log/xxxx
| # 管道,发送给其他命令处理,数据进一步加工
终端 # 终端 如 /dev/console
@HOST # 远程主机 如:@192.168.101.122 也可以后面更上该机器的对应路径 , @192.168.101.122:/var/log/xxxxx
用户 # 系统用户,发送给此用户处理,按照此用户的日志来记录
* #登录到系统上的所有用户,一般emerg级别日志就是这样处理的
三种方式:unix域套接字、udp端口514以及特殊的设备/dev/klog
大多数出现调用syslog向/dev/log这个套接字发送日记消息。
Device:发送syslog的设备
Relay:转发syslog的设备(Relay可能只是转发部分接收到的syslog消息,它同时表现为Relay和Collector)
Collector:接收syslog的设备
syslog消息的udp报文不能超过1024字节。
完整的syslog日志中包含日记的程序模块(Facility)、严重性(Severity | Level)、时间、主机名或ip、进程名、进程id和正文
完整的syslog消息由3部分组成,分别是PRI、HEADER和MSG(<30>Oct 9 22:33:20 hlfedora auditd[1787]: The audit daemon is exiting.),PRI:<30>。HEADER:Oct9...hlfedora。
PRI部分是由程序模块(Facility)<<3 | 严重性(Severity)组成:换句话说 Facility可以有32种,Severity可以有8种。
Numerical Facility #日志类型
Code
0 kernel messages #内核信息
1 user-level messages #用户级别信息
2 mail system #邮件系统
3 system daemons #系统信息
4 security/authorization messages (note 1) #安全认证信息(标注1)
5 messages generated internally by syslogd #由syslogd内部生成的消息
6 line printer subsystem #行式打印机子系统
7 network news subsystem #网络信息子系统
8 UUCP subsystem #UUCP子系统
9 clock daemon (note 2) #时钟守护进程(标注2)
10 security/authorization messages (note 1) #安全认证信息(标注2)
11 FTP daemon #FTP守护进程
12 NTP subsystem #NTP时钟同步子系统
13 log audit (note 1) #日志认证(标注1)
14 log alert (note 1) #日志告警(标注1)
15 clock daemon (note 2) #时钟守护进程(标注2)
16 local use 0 (local0) #用户自定义日志来源标签
17 local use 1 (local1)
18 local use 2 (local2)
19 local use 3 (local3)
20 local use 4 (local4)
21 local use 5 (local5)
22 local use 6 (local6)
23 local use 7 (local7)
Numerical Severity #日志级别
Code
0 Emergency: system is unusable
1 Alert: action must be taken immediately
2 Critical: critical conditions
3 Error: error conditions
4 Warning: warning conditions
5 Notice: normal but significant condition
6 Informational: informational messages
7 Debug: debug-level messages
HEADER部分包括两个字段:时间和主机名
MSG部分分为两个部分:TAG和Content;TAG包含程序名称和进程PID,TAG后面用一个冒号隔开Content部分
RFC3195:用tcp代替udp,进行可靠的syslog消息
//将info或更高级别的消息送到/var/log/messages,除了mail以外。
//其中*是通配符,代表任何设备;none表示不对任何级别的信息进行记录。
*.info;mail.none;authpriv.none /var/log/messages
//将authpirv设备的任何级别的信息记录到/var/log/secure文件中,这主要是一些和认、权限使用相关的信息。
authpriv.* /var/log/secure
//将mail设备中的任何级别的信息记录到/var/log/maillog文件中,这主要是和电子邮件相关的信息。
mail.* /var/log/maillog
//将cron设备中的任何级别的信息记录到/var/log/cron文件中,这主要是和系统中定期执行的任务相关的信息。
cron.* /var/log/cron
//将任何设备的emerg级别的信息发送给所有正在系统上的用户。
*.emerg *
//将uucp和news设备的crit级别的信息记录到/var/log/spooler文件中。
uucp,news.crit /var/log/spooler
//将和系统启动相关的信息记录到/var/log/boot.log文件中。
local7.* /var/log/boot.log
---------------------------------------
基本语法格式
类型.级别[;类型.级别] 动作
news.=crit /var/log/news.crit
‘=’特殊符号,如果存在说明只有本Severity的消息才进行处理,如果不存在则处理本Severity及其以下级别的消息
‘;'表示&&、'!'表示取反、’*'表示所有
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console # Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none /var/log/messages # The authpriv file has restricted access.
authpriv.* /var/log/secure # Log all the mail messages in one place.
mail.* -/var/log/maillog ## '-'分号代表是异步写入,非实时写入 # Log cron stuff
cron.* /var/log/cron # Everybody gets emergency messages
*.emerg * # Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler # Save boot messages also to boot.log
local7.* /var/log/boot.log
动作:表示信息发送的目的地
可以是日记文件(绝对路径),如果文件名前面加上减号表示不将日志信息同步刷新到磁盘上(使用写入缓存),这样可以提高日志写入性能,但是增加了系统崩溃后丢失日志的风险
可以是远程主机(@host,host可以是ip或域名,默认在/etc/hosts文件下loghost这个别名已经指定给本机)
可以是指定用户(user1,user2),如果指定用户已登入,那么他们将收到消息
客户端有两种方式开发:
完全基于协议从底层开发,也就是直接写unix域套接字或者向UDP514发送定制消息
基于库函数供上层应用使用
==================================================================================================
注意:
一般随着时间的推移系统日志会越来越大,占用磁盘空间,增加内存和磁盘消耗,所以引出了进程logroate来进行日志按照自动一大小分割和保留规定时间日志,滚动覆盖历史日志
logrotate:日志文件会随着日志的增加而不断增大,从而带来效率的问题和空间使用问题,在常年运行的服务器上面,通常会有logrotate程序定期进行日志文件的轮替和删除工作。
配置文件/etc/logroate.conf 来定义不同的功能日志配置信息,里面可以定义日志的存储时间周期,日志分割文件大小,个数等;统一都放在/etc/logroate.d/目录下
# see "man logrotate" for details
# rotate log files weekly
weekly #周期 # keep weeks worth of backlogs
rotate 4 #文件个数 # create new (empty) log files after rotating old ones
create #新文件创造动作 # uncomment this if you want your log files compressed
#compress # RPM packages drop log rotation information into this directory
include /etc/logrotate.d #存放目录 # no packages own wtmp -- we'll rotate them here
/var/log/wtmp { #这里定义每个不同功能日志时,除了上面的默认属性,
#如果自身未定义优先去查找自身定义的,如果没有才会用默认定义的,优先使用自身定义的
monthly
minsize 1M #最小大小
create root utmp #以默写用户创建,给予文件权限
rotate
} /var/log/btmp {
missingok
monthly
minsize 1M
create root utmp
rotate
} # system-specific logs may be also be configured here.
Linux日志系统分析:rsyslog、syslog和klog的更多相关文章
- linux日志守护进程 syslog
几乎所有的网络设备都可以通过syslog协议,将日志信息以UDP的形式传送给远端服务器,远端接收日志服务器必须通过syslogd监听UDP端口514,并根据 syslog.conf 配置文件张的配置处 ...
- Linux日志管理系统rsyslog
一.日志的概念 什么是日志?日志就是历史事件.历史事件包括时间.地点.人物.时间.这个是生活中所说的日志很好理解.在Linux中也有类似的服务,它主要作用就是记录Linux系统的历史事件,包括什么时间 ...
- Linux 日志服务器 rsyslog
预先需要httpd.php.mysql,yum方式安装.创建数据库: yum install rsyslog rsyslog-mysql cd /usr/share/doc/rsyslog-mysql ...
- 【Linux】【Web】【Nginx】配置nginx日志到远程syslog服务器
1. 概述: 主要是用于吧nginx的日志直接传送到远程日志收集的服务器上.远程日志服务器只要能够支持syslog协议都能够收到日志,本文的syslog服务器是IBM的日志收集系统Qradar. 2. ...
- 日志审计与分析实验三(rsyslog服务器端和客户端配置)(Linux日志收集)
Linux日志收集 一.实验目的: 1.掌握rsyslog配置方法 2.配置rsyslog服务收集其他Linux服务器日志: C/S架构:客户端将其日志上传到服务器端,通过对服务器端日志的查询,来实现 ...
- linux日志:syslogd和klogd及syslog
一. 日志守护进程 syslogd和klogd是很有意思的守护进程,syslogd是一个分发器,它将接收到的所有日志按照/etc/syslog.conf的配置策略发送到这些日志应该去的地方,当然也包括 ...
- 集中日志服务器Rsyslog
http://www.gaizaoren.org/archives/408 基于主机的管理一般需要收集服务器的日志信息用于及时发现错误,处理故障. 搭建linux下的集中日志服务器的程序一般可以用sy ...
- 在 Linux 上配置一个 syslog 服务器
syslog服务器可以用作一个网络中的日志监控中心,所有能够通过网络来发送日志的设施(包含了Linux或Windows服务器,路由器,交换机以及其他主机)都可以把日志发送给它. 通过设置一个syslo ...
- java 在linux环境下写入 syslog 问题研究
1.Syslog 在Unix类操作系统上,syslog广泛应用于系统日志.syslog日志消息既可以记录在本地文件中,也可以通过网络发送到接收syslog的服务器.接收syslog的服务器可以对多个设 ...
随机推荐
- WPF X:Shared概述 - CSDN博客
原文:WPF X:Shared概述 - CSDN博客 一.含义 X:Shared用于指定请求资源时创建实例的两种方式. X:Shared = "true"(默认):表示所有请求都是 ...
- 编解码TIFF图像
解码: // Open a Stream and decode a TIFF image Stream imageStreamSource = new FileStream("tulipfa ...
- 微信后台.net网站接入
微信公众号开发需要一个网站接入,根据官网教程,微信服务器会向网站发送四个数据echoString,signature ,timestamp ,nonce. 其中signature是经过timestam ...
- 论文阅读计划1(Benchmarking Streaming Computation Engines: Storm, Flink and Spark Streaming & An Enforcement of Real Time Scheduling in Spark Streaming & StyleBank: An Explicit Representation for Neural Ima)
Benchmarking Streaming Computation Engines: Storm, Flink and Spark Streaming[1] 简介:雅虎发布的一份各种流处理引擎的基准 ...
- 使用Boost的DLL库管理动态链接库
Boost 1.61新增了一个DLL库,跟Qt中的QLibrary类似,提供了跨平台的动态库链接库加载.调用等功能.http://www.boost.org/users/history/version ...
- Office Add-in Model 为 Outlook Mail Add-in 提供的 JavaScript API 介绍
本文所讨论的 Mailbox API是指在 Mail Add-in 中可调用的 JavaScript API.开发者可以利用这些API 实现 Add-in 和 Outlook 的交互(数据读取与写入) ...
- 使用EurekaLog时遇到的问题
1.在DLL项目中千万不要加入EurekaLog,不然在主程序调用时就会出现莫名其妙的内存问题. 2.要使用EurekaLog发邮件的功能,发邮件的SMTP服务器必须支持8bit MIME编码.如SI ...
- 深入了解Windows句柄到底是什么(句柄是逻辑指针,或者是指向结构体的指针,图文并茂,非常清楚)good
总是有新入门的Windows程序员问我Windows的句柄到底是什么,我说你把它看做一种类似指针的标识就行了,但是显然这一答案不能让他们满意,然后我说去问问度娘吧,他们说不行网上的说法太多还难以理解. ...
- Voovan 是一个高性能异步网络框架和 HTTP(Java)
Voovan 是一个高性能异步网络框架和 HTTP 服务器框架,同时支持 HTTP 客户端抓取.动态编译支持.数据库访问封装以及 DateTime.String.Log.反射.对象工具.流操作.文件操 ...
- cStor云存储、cProc云处理、cVideo云视频、cTrans云传输,云创个人网盘
http://www.cstor.cn,微信公众号:cstor_cn. 云创大数据是国际上云计算产品线齐全的企业之一,针对爆炸式增长的大数据需求,研发了自主知识产权的cStor云存储.cPr ...