Linux系统日志 -

简介:

   rsyslog 系统日志管理  ---关心哪类程序---产生的什么日志 ---放到什么地方

   logrotate 日志轮转 ---将大量的日志,分割管理,删除旧日志

一、任务一详解

    1.处理日志的进程

         第一类:

                     rsyslogd:系统专职日志程序

                       处理绝大部分日志记录

                      系统操作有关的信息,如登录信息,程序启动关闭信息,错误信息

         第二类:

                    httpd/nginx/mysql: 各类应用程序,可以以自己的方式记录日志.讲解对应程序时会逐步介绍

                观察rsyslog程序:

                   [root@localhost ~]# ps aux |grep rsyslogd

                   root 717 0.0 0.0 219752 3880 ? Ssl 09:05 0:00 /usr/sbin/rsyslogd -n

2.常见的日志文件(系统、进程、系统程序)

      #tail -10 /var/log/messages  ---系统主日志文件

      #tail -f  /var/log/messages  --动态查看日志文件的尾部

       #tail /var/log/secure    -----认证、安全

       #tail /var/log/yum.log   ----yum

       #tail /var/log/maillog   --跟邮件postfix相关

       #tail  /var/log/cron     ---crond、at进程产生的日志

       #tail  /var/log/dmesg    ----和系统启动相关  

3.rsyslogd配置

(1)相关程序

    yum  install  rsyslog  logrotate

(2)启动程序

             systemctl  start  rsyslog.service

(3)相关文件

       Rpm -qc rsyslog

4.主配置文件-- # vim /etc/rsyslog.conf

     (1)RULES

         RULES:即规则,是一套生成日志,以及存储日志的策略。

          RULES即规则,有三部分组成(由设备+级别+存放位置)--RULES由FACILITY+LEVEL+FILE组成。   

           authpriv.* /var/log/secure(SSH信息)

             mail.* -/var/log/maillog(发邮件)

             cron.* /var/log/cron(创建任务)

   (2)FACILITY&LEVEL

          facility设备:是系统对某种类型APP事件的定义。如AUTHPRIV是安全事件,CRON是计划任务事件。用来收集同类程序日志。

           #man 3 syslog

           程序类型示例

              #grep  Facility    /etc/ssh/sshd_config

              SyslogFacility AUTHPRIV

二、任务二详解

       logrotate日志轮转

      简介:

        日志--记录了程序运行时各种信息。

        通过日志可以分析用户行为,记录运行轨迹,查找程序问题。

        可惜磁盘的空间是有限的

工作原理---按照配置进行轮转   
          I:主配置文件:/etc/logrotate.conf   -----决定每个日志如何轮转

         II:子配置文件夹:/etc/logrotate.d/* ----自定义配置,便于管理

         III观察主文件和子文件

            [root@qianfeng ~]# ls /etc/logrotate.conf /etc/logrotate.d/

            /etc/logrotate.conf

           /etc/logrotate.d/:

          acpid cups iscsiuiolog ppp rpm subscription-manager up2date wpa_supplicant

          conman httpd mgetty psacct setroubleshoot syslog vsftpd.log yum

2.主配置文件介绍

   [root@localhost ~]# vim /etc/logrotate.conf

=============================================全局设置============================================

                        weekly //轮转的周期,一周轮转

                        rotate 4 //保留4份

                        create //轮转后创建新文件

                        dateext //使用日期作为后缀

                        #compress  //是否压缩

                        include /etc/logrotate.d //包含该目录下的子配置文件

                      /var/log/wtmp { //对某日志文件设置轮转的方法

                      monthly //一月轮转一次

                      minsize 1M //最小达到1M才轮转,monthly and  minsize(同时达到两个条件)

                      create 0664 root utmp  //轮转后创建新文件,并设置权限

                     rotate 1 //保留一份

               }

                      /var/log/btmp {

                      missingok //丢失不提示

                      monthly //每月轮转一次

                     create 0600 root utmp //轮转后创建新文件,并设置权限

                     rotate 1 //保留一份

           }

3.yum日志轮转实例

         轮转的目标文件 : /var/log/yum.log

         # vim /etc/logrotate.d/yum

             /var/log/yum.log {

              missingok //丢失不执行

              # notifempty //空文件不论转

              # maxsize 30k //达到30k轮转, daily or  size

              # yearly //或者一年一轮转

             daily //缩小周期到1天

             rotate 3 //轮转保留3次

             create 0777 root root

       }

测试:

     # date 04011000   --- 修改时间

    # /usr/sbin/logrotate  -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf       ---手动测试

    # ls /var/log/yum*    --日志文件已经出现多个

关于时间

   # grep 'yum' /var/lib/logrotate/logrotate.status   //记录所有日志文件最近轮转   的时间

   "/var/log/yum.log" 2019-3-31-10:0:23    -//如果没有轮转过,第一次只有记录
————————————————
版权声明:本文为CSDN博主「Zhi_Duoxing」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Zhi_Duoxing/article/details/107920886

syslog 是一种工业标准的协议,用来记录设备的日志。Linux日志系统由系统日志监控程序syslogd和内核日志监控程序klogd组成,两个监控程序都是守护程序(daemon),且都注册成了系统服务。syslogd专门记录非内核的其他设备所产生的日志,当系统的控制权由系统交给init的时候,日志信息的记录由syslogd负责记录。Klogd主要负责内核所产生的日志。内核日志记录信息由dmesg /var/log/dmesg查看。

常见linux系统的日志文件:

/var/log/dmesg      内核引导信息日志

/var/log/message    标准系统错误信息日志

/var/log/maillog    邮件系统信息日志

/var/log/cron       计划任务日志

/var/log/secure     安全信息日志

完整的syslog日志中包含产生日志的程序模块(Facility)、严重性(Severity或Level)、时间、主机名或IP、进程名、进程ID和正文。

系统日志信息的格式:timestamp hostname ident[pid]:log message

一、syslog函数

Linux系统提供了一组系统日志的接口函数,如下:

#include

void openlog(const char *ident, int option, int facility);

void syslog(int priority, const char *format, ...);

void closelog(void);

调用openlog、closelog是可选择的。如果不调用openlog,则在第一次调用syslog时,自动调用openlog。

参数解读如下:

ident:

指向信息的指针,一般为程序名,ident所表示的字符串将固定地加在每行日志的前面以标识这个日志,通常就写成当前程序的名称以作标记

option:

LOG_CONS       Write directly to system console if there is an error while sending to system  logger.

LOG_NDELAY     Open  the  connection  immediately  (normally, the connection is opened when the first message is logged).

LOG_NOWAIT     Don’t wait for child processes that may have been created while logging  the  message.(The  GNU  C  library does not create a child process, so this option has no effect on Linux.)

LOG_ODELAY     The converse of LOG_NDELAY; opening of the connection is  delayed  until  syslog()  is called.  (This is the default, and need not be specified.)

LOG_PERROR     (Not in POSIX.1-2001.)  Print to stderr as well.

LOG_PID        Include PID with each message.

Facility:

LOG_AUTH       security/authorization messages (DEPRECATED Use LOG_AUTHPRIV instead)

LOG_AUTHPRIV   security/authorization messages (private)

LOG_CRON       clock daemon (cron and at)

LOG_DAEMON     system daemons without separate facility value

LOG_FTP        ftp daemon

LOG_KERN       kernel messages (these can’t be generated from user processes)

LOG_LOCAL0 through LOG_LOCAL7 reserved for local use

LOG_LPR        line printer subsystem

LOG_MAIL       mail subsystem

LOG_NEWS       USENET news subsystem

LOG_SYSLOG     messages generated internally by syslogd(8)

LOG_USER (default) generic user-level messages

LOG_UUCP       UUCP subsystem

Level:

LOG_EMERG      system is unusable

LOG_ALERT      action must be taken immediately

LOG_CRIT       critical conditions

LOG_ERR        error conditions

LOG_WARNING    warning conditions

LOG_NOTICE     normal, but significant, condition

LOG_INFO       informational message

LOG_DEBUG      debug-level message

Priority:

(security level|facility code)

二、syslog配置文件

syslog工具由一个守护程序组成,接受访问系统的日志信息并且根据/etc/syslog.conf配置文件中的指令处理日志信息。不同的linux发行版本使用不同的日志工具,但都遵循相同的syslog协议。

配置文件:/etc/rsyslog.conf(CentOS 6.7)

配置文件中每行表示一个项目,格式为:facility.level    action

由两个部分组成:

第一部分:选择条件(可以有一个或者多个条件),分为两个字段。

选择条件本身分为两个字段,之间用一个小数点(.)分隔。前一字段是一项服务,后一字段是一个优先级。选择条件是对消息类型的一种分类,这种分类便于人们把不同类型的消息发送到不同的地方。在同一个syslog配置行上允许出现一个以上的选择条件,但必须用分号(;)隔开。

常见facility:

kern                内核信息;

user                用户进程信息;

mail                电子邮件相关信息;

daemon          后台进程相关信息;

authpriv            包括特权信息如用户名在内的认证活动;

cron                计划任务信息;

syslog          系统日志信息

lpr             打印服务相关信息。

news            新闻组服务器信息

uucp                uucp 生成的信息

local0----local7        本地用户信息

优先级级是选择条件的第二个字段,它代表消息的紧急程度。

按严重程度由低到高排序:

debug       不包含函数条件或问题的其他信息

info            提供信息的消息

none        没有重要级,通常用于排错

notice      具有重要性的普通条件

warning     预警信息

err         阻止工具或某些子系统部分功能实现的错误条件

crit            阻止某些工具或子系统功能实现的错误条件

alert           需要立即被修改的条件

emerg       该系统不可用

不同的服务类型有不同的优先级,数值较大的优先级涵盖数值较小的优先级。如果某个选择条件只给出了一个优先级而没有使用任何优先级限定符,对应于这个优先 级的消息以及所有更紧急的消息类型都将包括在内。比如说,如果某个选择条件里的优先级是“warning”,它实际上将把“warning”、“err”、“crit”、“alert”和“emerg”都包括在内。

第二部分:操作动作

日志信息可以分别记录到多个文件里,还可以发送到命名管道、其他程序甚至另一台机器。

syslog 主要支持以下活动:

file                    指定文件的绝对路径

terminal 或prin完全的串行或并行设备标志符

@host(@IP地址)远程的日志服务器

/etc/rsyslog.conf内容如下:# 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

三、搭建Linux日志服务器

1、配置/etc/sysconfig/rsyslog文件,让服务器能够接受客户端传来的数据

在“SYSLOGD_OPTIONS”行上加“-r”选项以允许接受外来日志消息。

SYSLOGD_OPTIONS="-r -m 0"

2、重新启动syslog守护进程

service rsyslog restart

3、配置防火墙

开启514端口

四、配置客户端系统日志配置文件

1、配置/etc/rsyslog.conf

修改客户机/etc/syslog.conf文件,在有关配置行的操作动作部分用一个“@”字符指向日志服务器,如:

*.*  @192.168.6.200

2、重启客户端syslog

service rsyslog restart

3、在日志服务器查看系统日志信息

cat /var/log/messages |tail

五、日志管理工具logrotate

系统管理员可以使用logrotate工具来管理系统中的最新的事件,logrotate还可以用来备份日志文件。

Logrotate是一个日志文件管理工具,用来把旧的日志文件删除,并创建新的日志文件,即日志的转储。一般可以根据日志文件的大小,也可以根据其天数来转储,转储通常通过cron程序来执行。logrotate程序还可以用于压缩日志文件,以及发送日志到指定的E-mail。logrotate的配置文件是/etc/logrotate.conf。主要参数如下表:

参数 功能compress 通过gzip压缩转储以后的日志nocompress 不需要压缩时,用这个参数copytruncate 用于还在打开中的日志文件,把当前日志备份并截断nocopytruncate 备份日志文件但是不截断create mode owner group 转储文件,使用指定的文件模式创建新的日志文件nocreate 不建立新的日志文件delaycompress 和compress一起使用时,转储的日志文件到下一次转储时才压缩nodelaycompress 覆盖delaycompress选项,转储同时压缩。errors address 专储时的错误信息发送到指定的Email地址ifempty 即使是空文件也转储,这个是logrotate的缺省选项。notifempty 如果是空文件的话,不转储mail address 把转储的日志文件发送到指定的E-mail地址nomail 转储时不发送日志文件olddir directory 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统noolddir 转储后的日志文件和当前日志文件放在同一个目录下prerotate/endscript 在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行postrotate/endscript 在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行daily 指定转储周期为每天weekly 指定转储周期为每周monthly 指定转储周期为每月rotate count 指定日志文件删除之前转储的次数,0指没有备份,5指保留5个备份tabootext [+] list 让logrotate不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave, v,和~

size size 当日志文件到达指定的大小时才转储,Size可以指定bytes (缺省)以及KB (sizek)或者MB (sizem).

/etc/logrotate.conf文件内容如下:# rotate log files weekly

weekly

# keep 4 weeks worth of backlogs

rotate 4

# create new (empty) log files after rotating old ones

create

# use date as a suffix of the rotated file

dateext

# 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 and btmp -- we'll rotate them here

/var/log/wtmp {

monthly

create 0664 root utmp

minsize 1M

rotate 1

}

/var/log/btmp {

missingok

monthly

create 0600 root utmp

rotate 1

}

# system-specific logs may be also be configured here.
————————————————
版权声明:本文为CSDN博主「Hyichen」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_36463131/article/details/112824240

一. syslog简介
syslog是一种工业标准的协议,可用来记录设备的日志。在UNIX系统,路由器、交换机等网络设备中,系统日志(System Log)记录系统中任何时间发生的大小事件。管理者可以通过查看系统记录,随时掌握系统状况。UNIX的系统日志是通过syslogd这个进程记录系统有关事件记录,也可以记录应用程序运作事件。通过适当的配置,我们还可以实现运行syslog协议的机器间通信,通过分析这些网络行为日志,藉以追踪掌握与设备和网络有关的状况。

二 .syslogd和rsyslogd
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 日志文件的记录规则和路径

三.查看linux日志的三种途径
(1)dmesg

printk()打印的日志会写到kernel ring buffer(环缓冲区)中,dmesg是从kernel ring buffer中读取内核日志信息。

(2)/var/log/

系统所有日志(包括用户日志和系统内核日志)均记录在/var/log/目录下。

rsyslogd守护进程根据/etc/rsyslog.conf和/etc/rsyslog.d/50-default.conf,将不同的服务产生的log记录到不同的文件中。

(3)/proc/kmsg

通过读取/proc/kmsg也可以得到ring buffer(环缓冲区)的日志,但是对/proc/kmsg进行读操作后,ring buffer中被读取的数据将被清空。

四.日志记录的接口
(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文件中。

五.syslogd的组成结构

从上图可以看到相关的日志文件主要来源于三种途径:

(1) 内核:许多内核例程调用log函数产生log消息,另外klogd守护进程能够监听并得到内核消息,并发送给syslogd进程。

(2) 许多用户进程直接调用syslog函数产生日志消息。

(3) 来自于TCP/IP网络连接的日志消息。该消息可能来自于自身的某个用户进程或者其它网络主机上的一个用户进程。端口是514.

六.linux日志系统框架图

printk的临时缓存printk_buf只有1K,所有一次printk函数只能记录<1K的信息到log buffer
在标准的Linux系统上,用户空间的守护进程klogd从纪录缓冲区中获取内核消息,再通过syslogd守护进程把这些消息保存在系统日志文件中。klogd进程既可以从/proc/kmsg文件中,也可以通过syslog()系统调用读取这些消息。默认情况下,它选择读取/proc方式实现。klogd守护进程在消息缓冲区有新的消息之前,一直处于阻塞状态。一旦有新的内核消息,klogd被唤醒,读出内核消息并进行处理。默认情况下,处理例程就是把内核消息传给syslogd守护进程。syslogd守护进程一般把接收到的消息写入/var/log/messages文件中。不过,还是可以通过/etc/syslog.conf文件来进行配置,可以选择其他的输出文件。
dmesg 命令也可用于打印和控制内核环缓冲区。这个命令使用 klogctl 系统调用来读取内核环缓冲区,并将它转发到标准输出(stdout)。这个命令也可以用来清除内核环缓冲区(使用 -c 选项),设置控制台日志级别(-n 选项),以及定义用于读取内核日志消息的缓冲区大小(-s 选项)。注意,如果没有指定缓冲区大小,那么 dmesg 会使用 klogctl 的SYSLOG_ACTION_SIZE_BUFFER 操作确定缓冲区大小。
————————————————
版权声明:本文为CSDN博主「wang@xing」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/chengziwang/article/details/111182297

你可能感兴趣的:(Linux内核-驱动开发,linux,log,日志系统)