嵌入式 Linux进程间通信(四)——Linux系统日志

嵌入式 Linux进程间通信(四)——Linux系统日志

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 <syslog.h>

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.

参考博文:

linux syslog详解(博客园 bitbit)

时间: 2024-08-06 03:41:21

嵌入式 Linux进程间通信(四)——Linux系统日志的相关文章

linux学习(四)-----linux常用指令

touch 指令 touch 指令创建空文件 基本语法 touch 文件名称 应用实例 案例 1: 创建一个空文件 hello.txt cp 指令 cp 指令拷贝文件到指定目录 基本语法 cp [选项] source dest 常用选项 -r :递归复制整个文件夹 应用实例 案例 1: 将 /home/aaa.txt 拷贝到/home/bbb 目录下[拷贝单个文件] 案例 2: 递归复制整个文件夹,举例将/home/test 整个目录拷贝到 /home/zwj 目录 使用细节 强制覆盖不提示的方

Linux 进程间通信(IPC)

Linux 进程间通信(IPC): Linux系统中除了进程和进程之间通信,我想大家也应该关注用户空间与内核空间是如何通信的,比方说netlink等等.除了传统进程间通信外像Socket通信也需要掌握的! /*-------------------------------------------------------------------------- * Project: aipc.c * Name: zwp * Date: 2014/6 *------------------------

嵌入式 Linux进程间通信(十一)——多线程简介

嵌入式 Linux进程间通信(十一)--多线程简介 一.线程简介 线程有四种:内核线程.轻量级进程.用户线程.加强版用户线程 1.内核线程 内核线程就是内核的分身,一个分身可以处理一件特定事情.内核线程的使用是廉价的,唯一使用的资源就是内核栈和上下文切换时保存寄存器的空间.支持多线程的内核叫做多线程内核(Multi-Threads kernel ). 2.轻量级进程LWP 轻量级进程(LWP)是一种由内核支持的用户线程,是基于内核线程的高级抽象,只有先支持内核线程,才能有轻量级进程LWP.每一个

嵌入式 Linux进程间通信(十二)——多线程同步

嵌入式 Linux进程间通信(十二)--多线程同步 多线程编程中有三种线程同步机制:互斥锁.信号量.条件量.本文将使用生产者消费者问题编程实践三种线程同步方式. 生产者.消费者问题:生产者线程生产物品,然后将物品放置在一个空缓冲区中供消费者线程消费.消费者线程从缓冲区中获得物品,然后释放缓冲区.当生产者线程生产物品时,如果没有空缓冲区可用,那么生产者线程必须等待消费者线程释放出一个空缓冲区.当消费者线程消费物品时,如果没有满的缓冲区,那么消费者线程将被阻塞,直到新的物品被生产出来. 一.互斥锁

Linux环境编程之IPC进程间通信(四):管道和FIFO比较

系统加于管道和FIFO的唯一限制是: 1.OPEN_MAX 一个进程在任意时刻打开的最大描述符数.可以通过调用sysconf函数查询. 2.PIPE_BUF 可原子地写往一个管道或FIFO的最大数据量.Posix任务它是一个路径名变量,它的值可以随指定的路径名而变化,因为不同的路径名可以落在不同文件系统上,而这些文件系统可能有不同的特征.所以PIPE_BUF可通过pathconf函数取得. pipeconf.c #include <stdio.h> #include <stdlib.h&

嵌入式 Linux进程间通信(一)——进程

嵌入式 Linux进程间通信(一)--进程 进程是程序的实例化,是运行中的程序.程序在编译时用链接器,运行时用加载器.进程运行在虚拟地址空间,操作系统中每个进程在独立的地址空间中运行,每个进程的而逻辑地址空间均为4GB(32位系统),0-1G位OS,1G-4G为应用. 每个进程都有一个在操作系统内唯一的进程号,进程号的获取函数有: #include <sys/types.h> #include <unistd.h> pid_t getpid(void);//返回当前运行进程的而进程

嵌入式 Linux进程间通信(二)——exec族函数

嵌入式 Linux进程间通信(二)--exec族函数 exec函数族的作用是根据指定的文件名找到可执行文件,并用它来取代调用进程的内容,换句话说,就是在调用进程内部执行一个可执行文件.这里的可执行文件既可以是二进制文件,也可以是任何Linux下可执行的脚本文件. exec族函数包含如下函数: #include <unistd.h> extern char **environ; int execl(const char *path, const char *arg, ...); int exec

嵌入式 Linux进程间通信(五)——进程间通信简介

嵌入式 Linux进程间通信(五)--进程间通信简介 一.进程间通信简介 Linux的进程通信方式基本上是从Unix平台上的进程通信方式继承而来的.在Unix发展过程中,贝尔实验室和BSD(加州大学伯克利分校的伯克利软件发布中心)是Unix发展的主要贡献者,但两者在进程间通信方面的侧重点有所不同.贝尔实验室对Unix早期的进程间通信方式进行了系统的改进和扩充,形成了 "system V IPC",通信进程局限在本地计算机内:BSD则跳过了进程通信局限在本地计算机的限制,形成了可以在计算

嵌入式 Linux进程间通信(六)——管道

嵌入式 Linux进程间通信(六)--管道 一.管道 管道是单向的.先进先出的.无结构的.固定大小的字节流.写进程在管道的尾端写入数据,读进程在管道的首端读出数据.数据读出后将从管道中移走,其它读进程都不能再读到这些数据.管道提供了简单的流控制机制.进程试图读空管道时,在有数据写入管道前,进程将一直阻塞:管道已经满时,进程再试图写管道,在其它进程从管道中移走数据之前,写进程将一直阻塞.管道存在于系统内核之中,管道只能用于具有亲缘关系进程间的通信.管道是半双工的,数据只能向一个方向流动:需要双方通