`
nigelzeng
  • 浏览: 607398 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

【转载】Linux日志管理:实例详解syslog

阅读更多

========================================

    syslog已被许多日志函数采纳,它用在许多保护措施中,任何程序都可以通过syslog记录事件。syslog可以记录系统事件,可以写到一个文件或设备中,或给用户发送一个信息。它能记录本地事件或通过网络记录另一个主机上的事件。 本文将从配置文件讲起,用实例详细介绍syslog。
========================================

  syslog已被许多日志函数采纳,它用在许多保护措施中,任何程序都可以通过syslog记录事件。syslog可以记录系统事件,可以写到一个文件或设备中,或给用户发送一个信息。它能记录本地事件或通过网络记录另一个主机上的事件。

  1、syslog简介

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

  2、syslog配置文件

  syslog设备依据两个重要的文件:/etc/syslogd守护进程和/etc/syslog.conf配置文件。通常情况下,多数syslog信息被写到/var/adm或/var/log目录下的信息文件中(messages.*)。一个典型的syslog记录包括生成程序的名字和一个文本信息。它还包括一个设备和一个优先级范围。

  通过使用syslog.conf文件,可以对生成的日志的位置及其相关信息进行灵活的配置。该配置文件指明了syslogd守护程序记录日志的行为,该程序在启动时查询配置文件。该文件由不同程序或消息分类的单个条目组成,每个占一行。对每类消息提供一个选择域和一个动作域。这些域由tab隔开:

  选择域指明消息的类型和优先级;

  动作域指明syslogd接收到一个与选择标准相匹配的消息时所执行的动作。

  syslog.conf行的基本语法是:

  消息类型.优先级 动作域

  其中,每个选择域是由消息类型和优先级组成。当指明一个优先级时,syslogd将记录一个拥有相同或更高优先级的消息。Linux中一些主要的消息类型如表2所示,表3列出了一些优先级信息:

  表2 syslog消息类型

消息类型 消息来源
kern 内核
User 用户程序
Damon 系统守护进程
Mail 电子邮件系统
Auth 与安全权限相关的命令
Lpr 打印机
News 新闻组信息
Uucp Uucp程序
Cron 记录当前登录的每个用户信息
wtmp 一个用户每次登录进入和退出时间的永久记录
Authpriv 授权信息

  表3 syslog常用优先级

优先级 描述
emerg 最高的紧急程度状态
alert 紧急状态
Cirt 重要信息
warning 警告
err 临界状态
notice 出现不寻常的事情
info 一般性消息
Debug 调试级信息
None 不记录任何日志信息

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

  syslog允许人们使用三种限定符对优先级进行修饰:星号(*)、等号(=)和叹号(!):

  星号(*)的含义是把本项服务生成的所有日志消息都发送到操作动作指定的地点。就像它在规则表达式里的作用一样,星号代表“任何东西”。在前面给出的例子里,“mail.*”将把所有优先级的消息都发送到操作动作指定的/var/log/mail文件里。使用“*”限定符与使用“debug”优先级的效果完全一样,后者也将把所有类型的消息发送到指定地点。

  等号(=)的含义是只把本项服务生成的本优先级的日志消息都发送到操作动作指定的地点。比如说,可以用“=”限定符只发送调试消息而不发送其他更紧急的消息(这将为应用程序减轻很多负担)。当你只需要发送特定优先级别的消息时,就要使用等号限定符。

  叹号(!)的含义是把本项服务生成的所有日志消息都发送到操作动作指定的地点,但本优先级的消息不包括在内。

  所以,根据上面介绍的相关知识,我们给出如下例子作为示范:

  (1)如果指明\"crit\",那所有标为crit、alert和emerg的消息将被记录。每行的行动域指明当选择域选择了一个给定消息后应该把他发送到哪儿。例如,如果想把所有邮件消息记录到一个文件中,如下所示:

  #Log all the mail messages in one place

  mail.* /var/log/maillog(2)其他设备也有自己的日志。UUCP和news设备能产生许多外部消息。它把这些消息存到自己的日志(/var/log/spooler)中并把级别限为\"err\"或更高。例如:

  # Save news errors of level crit and higher in a special file.

  uucp,news.crit /var/log/spooler(3)当一个紧急消息到来时,可能想让所有的用户都得到。也可能想让自己的日志接收并保存。

  #Everybody gets emergency messages, plus log them on anther machine

  *.emerg *

  *.emerg @linuxaid.com.cn(4)有时syslogd将产生大量的消息。例如内核(\"kern\"设备)可能很冗长,用户很难看得清楚明了,那么用户可能想把内核消息记录到/dev/console中。下面的例子表明内核日志记录被注释掉了:

  #Log all kernel messages to the console

  #Logging much else clutters up the screen

  #kern.* /dev/console(5)用户可以在一行中指明所有的设备。下面的例子把info或更高级别的消息送到/var/log/messages,除了mail以外。级别\"none\"禁止一个设备:

  #Log anything(except mail)of level info or higher

  #Don\'t log private authentication messages!

  *.info:mail.none;autHPriv.none /var/log/messages

 

  3、syslog进程

  syslogd守护程序是由/etc/rc.d/init.d/syslog脚本在运行级2下被调用的,缺省不使用选项。但有两个选项-r和-h很有用:

  如果将要使用一个日志服务器,必须调用syslogd -r。缺省情况下syslogd不接受来自远程系统的信息。当指定-r选项,syslogd将会监听从514端口上进来的UDP包。

  如果还希望日志服务器能传送日志信息,可以使用-h标志。缺省时,syslogd将忽略使其从一个远程系统传送日志信息到另一个系统的syslogd。

  另外,如果需要重新启动syslog守护进程(/etc/syslog.conf的修改只有在syslog守护进程重新启动后才会生效),并且只想重新启动syslog守护进程而不是整个系统,在Red HatLinux机器上,执行以下两条命令之一即可:

  /etc/rc.d/init.d/syslogstop;/etc/rc.d/init.d/syslogstart

  /etc/rc.d/init.d/syslogrestart

  4、灵活运用syslog调用接口

  在实际的使用过程中,我们可以通过配置文件和查看相应的日志文件来使用syslog。然而,在许多应用场景下,我们往往需要通过程序产生输出信息并进行记录,也就是说要把一些信息写成日志文件,正常情况下运行程序的人不用关心日志里的内容,只有在出现问题的时候才会查看日志文件里的内容以确定问题所在。因此,下面将详细介绍如何通过syslog日志系统提供的API调用接口,来使用程序实现对syslog的使用。

  1.主要的函数

  在Linux中,提供了四个有关syslog日志系统的系统调用,供用户使用:

  openlog:打开日志设备,以供读取和写入,与文件系统调用的open类似;

  syslog:写入日志,与文件系统调用的write类似;

  closelog:关闭日志设备,与文件系统调用的close类似;

  vsyslog:它和syslog功能一样,负责写入日志,只是参数格式不同。

  (1)openlog函数

  该函数的声明如下:

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

  此函数用来打开一个到系统日志记录程序的连接,打开之后就可以用syslog或vsyslog函数向系统日志里添加信息了。而closelog函数就是用来关闭此连接的。

  openlog的第一个参数ident是一个标记,ident所表示的字符串将固定地加在每行日志的前面以标识这个日志,通常就写成当前程序的名称以作标记。第二个参数option一般是下列选项值取“与”运算(使用“|”表示,如“LOG_CONS | LOG_PID”)的结果:

  LOG_CONS:如果送到system logger时发生问题,直接写入系统终端;

  LOG_NDELAY:立即开启连接,通常连接是在第一次写入消息时才打开的;

  LOG_PERROR:将消息也同时送到stderr设备;

  LOG_PID:将进程PID含入所有消息中。

  第三个参数facility指明记录日志的程序的类型,它主要具有如下几类日志类型:

  LOG_AUTH :安全/授权消息

  LOG_AUTHPRIV:安全/授权消息

  LOG_CRON:时间守护进程(cron和at)专用

  LOG_DAEMON:其它系统守护进程

  LOG_KERN:核心消息

  LOG_LOCAL0到LOG_LOCAL7:系统保留

  LOG_LPR:printer子系统

  LOG_MAIL:mail子系统

  LOG_NEWS:USENET新闻子系统

  LOG_SYSLOG:syslogd进程内部所产生的消息

  LOG_USER(缺省):一般使用者缺省使用消息

  LOG_UUCP:UUCP子系统

  LOG_FTP:FTP子系统使用

  (2)syslog函数

  syslog函数的声明如下:

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

  第一个参数是消息的紧急级别priority,第二个参数是消息及其格式,之后是格式对应的参数,如同C语言里面printf输出函数一样使用,具体的格式这里就不再详述,它不是本书介绍的重点。

  这里还需要详细介绍一下第一个参数priority,它是由severity level和facility组成的。Facility已经在上面介绍了,下面介绍一下severity level,也就是消息的重要级别,它主要包括:

  LOG_EMERG:紧急状况

  LOG_ALERT:高优先级问题,比如说数据库崩溃等,必须要立即采取反应行动

  LOG_CRIT:重要状况发生,比如硬件故障

  LOG_ERR:错误发生

  LOG_WARNING:警告发生

  LOG_NOTICE:一般状况,需要引起注意

  LOG_INFO:信息状况

  LOG_DEBUG:调试消息

  在实际使用中,如果我们的程序要使用系统日志功能,只需要在程序启动时使用openlog函数来连接syslogd程序,后面随时用syslog函数写日志就行了。

  (3)closelog函数

  相对上述2个函数来说,该函数非常简单,其声明如下:

  void closelog( void );

  值得注意的是,虽然该函数的使用和调用情况非常简单,但是是必不可少的,因为在Linux系统中,打开的日志也是资源,如果只使用openlog函数打开日志,而忘记使用closelog关闭日志的话,当打开的日志数量累积到一定程度,便会造成内存不足,从而引起系统问题。所以,提醒用户在使用中特别注意。

  2.一个实际的程序调用例子

  下面给出一个使用上述几个函数写日志的例子,以供大家参考:

  #include

  #include

  #include

  int main(void)

  {

  int log_test;

  /*打开日志*/

  openlog("log_test ", LOG_PID|LOG_CONS, LOG_USER);

  /*写日志*/

  syslog(LOG_INFO, "PID information, pid=%d", getpid());

  syslog(LOG_DEBUG,"debug message ");

  /*关闭日志*/

  closelog();

  }

 

转自:http://www.e800.com.cn/articles/2011/0722/491641_2.shtml

 

 

分享到:
评论

相关推荐

    redhat syslog 配置 笔记

    Syslog(系统日志)是一项广泛应用于Linux系统中的日志记录服务,主要用于收集和存储来自不同应用程序和系统组件的日志数据。在Redhat Linux环境中,Syslog服务通常由`syslogd`进程来提供支持。Syslog的配置文件`/...

    嵌入式Linux应用程序开发详解

    日志系统,如syslog或dmesg,可以帮助开发者分析运行时问题。 此外,嵌入式Linux系统的优化也是关键,包括代码优化、内存管理优化和电源管理优化。开发者需要考虑如何在有限的资源下提高程序性能,同时减少功耗,以...

    syslog工具

    例如,Linux系统中的`syslogd`服务就是syslog客户端的一个实例。配置syslog客户端,可以指定日志消息的发送目标、优先级和格式。 **4. 日志分析与应用** syslog日志可用于多种用途: - **故障诊断**:通过分析设备...

    《嵌入式Linux应用程序开发详解》源代码

    《嵌入式Linux应用程序开发详解》是一本专为学习嵌入式Linux系统应用程序设计与开发的书籍,由华清远见嵌入式培训中心的孙琼编著,并在人民邮电出版社出版。这本书深入探讨了在嵌入式环境中利用Linux进行应用软件...

    Linux应用程序开发详解

    在IT领域,Linux操作系统因其开源、稳定和高效的特点,在服务器端和嵌入式系统中得到了广泛应用。..."Linux应用程序开发详解"这份资源应该会涵盖这些内容,并可能提供实例和实践指导,对提升Linux开发技能大有裨益。

    linux 鸟哥linux

    6. **进程管理**:Linux中,进程是程序的执行实例。书里讲解了ps、top、kill等命令用于查看和控制进程,还介绍了进程的生命周期和状态。 7. **网络配置与管理**:涵盖了网络接口配置、IP地址设定、DNS解析、路由...

    Linux高性能服务器编程电子版

    8. **日志与监控**:学习如何设置和解析系统日志,以及使用工具如syslog、Prometheus、Grafana进行性能监控,以便及时发现和解决问题。 9. **负载均衡与集群**:了解负载均衡技术,如Nginx、HAProxy等,以及高可用...

    李洛《Linux教程》课程PPT

    14. **系统日志**:理解syslog日志系统,学会分析和排查问题。 15. **系统服务与定时任务**:讲解Systemd的使用,以及cron的配置来安排周期性任务。 **shell脚本编程** 16. **Shell脚本基础**:介绍bash shell...

    linux实用培训教程

    - **日志管理**:讲解syslog系统日志的查看和分析,以及日志轮换机制。 - **系统性能监控**:介绍top、htop、iotop等工具,用于监控系统资源使用情况。 - **故障排查与调试**:提供系统故障诊断的技巧和方法,...

    Pro Linux Embedded Systems

    - **日志记录与分析**:通过syslog等工具收集系统日志,便于故障排查。 - **故障诊断流程**:从现象出发,逐步定位问题所在。 - **系统性能监控**:使用top、vmstat等工具实时监控CPU、内存等资源的使用情况。 **6....

    清华大学linux课件

    **清华大学Linux课件详解** 这份来自清华大学的Linux课件是一份深入浅出的学习资源,旨在帮助初学者掌握Linux操作系统的基础知识。课程以PPT格式呈现,总共分为13个章节,内容涵盖了Linux系统的核心概念、命令行...

    Linux下rsync服务的深入分析

    - **作用**:当使用syslog记录日志时,可以指定日志级别,便于系统管理员进行管理。 - **示例**: ```conf syslog facility = daemon ``` - **说明**:这样配置后,rsync的日志将会按照`daemon`级别的日志记录到`...

    redis配置详解.docx

    如果启用 syslog,这些选项用于控制日志记录到 syslog 的行为。 13. **databases**: Redis 支持多个数据库,默认为 16 个,可以通过 `SELECT` 命令切换。 14. **SNAPSHOTTING**: Redis 提供了 RDB 持久化,...

    linux常用的60个命令

    ### Linux常用的60个命令详解 #### 一、登录与退出 **命令:login** - **功能概述**:用户登录系统。 - **基本格式**:`login [name] [p] [h]` - `name`:指定用户名。 - `[p]`:显示登录地点。 - `[h]`:进行...

    Linux中tail命令用法详解

    ### Linux中tail命令详解 #### 一、简介 `tail` 命令是 Linux 和类 Unix 操作系统中一个非常强大的工具,用于查看文件的末尾部分。它可以帮助用户实时监控日志文件的变化,这对于系统管理员来说尤其有用。本文将...

    开源框架log4cpp和日志模块实现.pdf

    【log4cpp开源框架详解与日志模块实现】 log4cpp是一个流行的开源日志框架,源自Java的日志处理项目log4j,它为C++程序员提供了灵活的日志记录功能。框架的核心理念是通过Category(分类)、Appender(输出器)、...

    LINUX安装OGG及配置

    ### LINUX环境下GoldenGate (OGG) 的安装与配置详解 #### 一、概述 GoldenGate (简称 OGG) 是一款高性能的数据复制软件,能够实现跨平台、跨数据库类型的实时数据复制。本文将详细介绍如何在Linux环境下安装配置OGG...

    Linux系统命令

    包含了Linux发行版中的大量命令,不仅包括上述的基本命令,还可能包含了系统管理、网络调试、脚本编程等方面的高级命令,如`cron`定时任务,`logrotate`日志管理,`netstat`网络状态查看,`syslog`日志记录,以及`...

Global site tag (gtag.js) - Google Analytics