免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234下一页
最近访问板块 发新帖
查看: 11185 | 回复: 33
打印 上一主题 下一主题

我们来聊聊syslogd和logrotate吧 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-05-12 19:44 |只看该作者 |倒序浏览
放假这几天看书,了解了一下syslogd和logrotate,就想把自己看明白的总结一下:加深自己的理解;以资大家讨论。

-------------
文档目录
-------------
1 什么是syslogd
2 配置syslogd的说明
3 syslogd和系统中服务配置中日志的关系
4 什么是logrotate
5 配置logrotate的说明

-------------
文档正文
-------------
1 什么是syslogd
    syslogd可以简单地被称为记录系统活动的一个daemons。比如可以记录谁,在什么时间,在哪里,做了什么事情(像是在写记叙文啊);也可以记录您的系统曾经发生过什么事情,比如什么时候重新引导过、软硬件的错误信息等;当然也记录着您系统上运行着的服务的信息。
    很多时候,有朋友上来就问,“我的X不能启动了是怎么回事啊?!”问号和叹号这样使用在语文规范上是不允许的,但是我们可以获知,他的心情是急迫的。可是为什么您不先考虑一下您做了什么更改,为什么不先看看是否有错误输出,为什么不看看日志文件?起码,日志为解决问题提供了很好的参考啊。很多人讲自己的某个设备不工作,dmesg的信息您是否认真参考了?
    syslogd做的是琐碎的工作,但却是相当重要的工作。很多朋友为了提高系统的性能,节省那一点点资源就决定把这个daemons停掉。我认为,这是不可取的。
    syslogd记录的日志一般在/var/log/下,当然也有存储在另外的服务器上的。因为syslogd记录的信息实在是太重要了,所以还要涉及日志安全的问题。
    一般系统中日志信息:
   

  1.     /var/log/secure: 记录系统的安全信息,比如ssh、ftp、pop3等;
  2.     /var/log/wtmp: 记录谁曾经登陆过系统,由于本日志被编码过,所以只能用last命令查看;
  3.     /var/log/boot.log: 顾名思义,记录开启或者关闭系统及武夫的信息;
  4.     /var/log/message:系统发生的错误信息都会记录在这个日志中,比如iptables中您使用log功能的日志;
  5.     /var/log/mail:
  6.     /var/log/httpd/
  7.     /var/log/mysqld.d 等,记录的就是这些服务的日志。
  8.    
复制代码


2 配置syslogd的说明
2.1 启动syslogd服务
   首先,您要确定您的系统是否运行着这个服务。
  
  1. service [color=red]syslog[/color] status
复制代码

   或者:
  
  1. ps -aux|grep syslog
复制代码

   如果您的系统中并没有运行这个服务,您可以打开它。方法很多啦。
  

  1.    service syslog start
复制代码

   如果您希望系统在下次启动的时候就运行syslogd,您可以在setup中的服务中添加。如果确定您的默认引导级别,比如3,那么您也可以在/etc/rc.d/rc3.d/下添加以 S 开头的软连接。或者,您使用chkconfig 2345 syslog on来添加。
2.2 syslogd服务的配置文件
    syslogd的配置文件一般在/etc/syslog.conf中。这个文件依然遵循你所见过的其它配置文件的规则,比如 # 是注释。您可以看看您的syslogd都在帮助您记录着什么。这是我的syslog.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


2.3 syslog.conf的配置规则
   
  1. 服务名称.信息等级        存放或者显示地点
复制代码

    这个语法很简单呢。呵呵。逐个解释一下。
   
    服务名称
    mail http at cron kern 等等。

    信息等级
   

  1.     info: 一些提示信息资料;
  2.     notice: 需要您注意的信息;
  3.     warn或者waring: 警告信息;
  4.     [color=black]上面三个信息虽然是提醒您注意,但是却还没有到错误的情况。下面的信息就要注意了。[/color]
  5.     error或者err: 错误信息。您需要仔细检查发生错误的原因了;
  6.     crit: 很严重的错误,到达临界点了;
  7.     alert: 警告! 是否想起了“Red Alert”?不过,在这里这可是相当严重的错误啊;
  8.     emerg或者panic:系统混乱,重做吧;
  9.    
  10.     特别的:
  11.     debug: 将显示很多信息;
  12.     none: 顾名思义,什么信息也不记录。
  13.    
复制代码


    存放或者显示地点
   

  1.     日志的绝对路径: 比如/var/log;
  2.     您的一个用户 ;
  3.     网络上的主机: @log.company.com
  4.     打印机: /dev/lp0
  5.    
复制代码

2.4 应用举例
   

  1.     mail.info        /var/log/maillog
复制代码

    大于等于info的信息都会写到/var/log/maillog中。

   

  1.     mail.*;cron.* /var/log/mailcron mail.=warn;cron.=warn /var/log/mailcronwarn
复制代码

    等级为warn的信息,写进/var/log/mailcronwarn,其它的信息写进/var/log/mailcron。

   

  1.     *.*;mail,cron.none /var/log/message
复制代码

   

  1.     *.*;mail.none;cron.none /var/log/message
复制代码

    记录除去mail和cron之外的所有服务的所有信息。

3 syslogd和系统中服务配置中日志的关系
    上面已经说了,syslogd是为系统提供日志服务的。那么,我们在配置文件中定义的日志信息和syslog.conf有什么关系呢?
    或者您也注意到了这段:
   

  1. # Log anything (except mail) of level info or higher.
  2. # Don't log private authentication messages!
  3. *.info;mail.none;authpriv.none;cron.none                /var/log/messages
复制代码

    这段话是什么意思呢?我认为是在/var/log/messages中记录除去mail、authpriv和cron之外的所有系统信息。也就是说它会记录您自己的http信息。是否这样呢?我自己安装了一个httpd,并且指定日志到另外一个文件,比如/usr/website/log/httplog。我虽然可以在/usr/website/log/httpdlog中看到我的httpd的日志信息,但是我执行
   
  1. # cat /var/log/messages|grep HTTP
复制代码

    却得到空。
    另外,就这个问题我曾经请教一个朋友。他说syslogd不会记录你没有要求它记录的信息,虽然有上面的*.info但是这个*是不包括你自己的服务的。我问,那么iptables也没有在我的syslog.conf中要求,那为什么它会记录到/var/log/messages呢?或者是iptables自己定义了吧。
    所以,关于这段的理解我只有这样的认识。如果有错误,请您指出。

4 什么是logrotate
    logrotate是对日志文件做轮换。就是把现在的log命名为log.1,然后继续写log。如果存在log.1就命名log.1为log.2然后命名log为log.1,依此类推,但并非没有尽头。这个尽头就是您在logrotate的配置文件中的定义,我的系统默认的是到4。那么对log.4做什么操作呢?删除。
   
    syslogd是daemons方式运行的;
    logrotate是按计划运行的。
   
   
5 配置logrotate的说明
5.1 配置文件的位置

/etc/logrotate.conf
/etc/logrotate.d

    其中,/etc/logrotate.conf是主要配置文件,/etc/logrotate.d中的文件会被/etc/logrotate.conf读取。如果您在/etc/logrotate.d中的配置文件没有规定具体的参数,则这些参数由/etc/logrotate来决定。
  5.2 logrotate的配置规则
    正如在上面5.1中所说的,logrotate的主要配置在/etc/logrotate.conf中设置,而/etc/logrotate.d中的文件是对/etc/logrotate.conf的补充。或者可以看作为了不使/etc/logrotate.conf过大而设置。logrotate的写法:
   

  1.     把logfile(s)写在前面,包含文件的绝对路径,可以使用空白字元分隔多个log,也可以使用统配符置换;
  2.     用 { } 包含所有设定;
  3.     一般包括:
  4.     prerotate 在启动 logrotate 之前执行的命令,比如 /usr/bin/charrt -a /var/log/logfile;
  5.     postrotate 在执行了 logrotate 之后执行的命令,比如 /usr/bin/charrt +a /var/log/logfile;
  6.     您可以设定执行如上两个动作,也可以不设定,这依赖于您的需要。
  7.    
  8.     在prerotate与postrotate之间的动作有:
  9.     weeky                                  #每个星期执行一次
  10.     rotate 4                               #保留四个日志
  11.     create                                 #logratoe之后再建立日志
  12.     compress                               #rotate之后的日志是否压缩
  13.     include /etc/logrotate.d                #包含/etc/logrotate.d目录下面的轮换设置
  14.    
  15.    
复制代码


如果您自己在/etc/logrotate.d下写了自己的轮换设置可以使用
  1. logrotate -f yourfile
复制代码

来测试。

5.3 鉴于这个文档的设置比较明了所以不在此举例。您可以参考您的 /etc/logrotate.conf 和 /etc/logrotate.d 下面的文档看看。

    好了,这个文档写到这里就算是结束了。正如我在文档的开始所说,这是我假期看书的一点体会,写出来是为了加深自己的理解;同时也是为了发现问题。如果您发现问题请指正。

论坛徽章:
0
2 [报告]
发表于 2004-05-12 20:05 |只看该作者

我们来聊聊syslogd和logrotate吧

辛苦了,支持原创。

论坛徽章:
0
3 [报告]
发表于 2004-05-12 20:22 |只看该作者

我们来聊聊syslogd和logrotate吧

好文章,支持!

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
4 [报告]
发表于 2004-05-12 20:23 |只看该作者

我们来聊聊syslogd和logrotate吧

原创的顶一下,自己没看过这方面的东西就不发言了。

论坛徽章:
0
5 [报告]
发表于 2004-05-13 10:18 |只看该作者

我们来聊聊syslogd和logrotate吧

不错

论坛徽章:
0
6 [报告]
发表于 2004-05-13 10:33 |只看该作者

我们来聊聊syslogd和logrotate吧

关于楼主讲的关于为什么自己装的httpd的log没有记录到/var/log/message中去的问题
关于*号的匹配问题
我查了下文档
是这样的
auth  由 pam_pwdb 报告的认证活动。
authpriv 包括特权信息如用户名在内的认证活动
cron  与 cron 和 at 有关的信息。
daemon 与 inetd 守护进程有关的信息。
kern  内核信息,首先通过 klogd 传递。
lpr   与打印服务有关的信息。
mail  与电子邮件有关的信息
mark  syslog 内部功能用于生成时间戳
news  来自新闻服务器的信息
syslog  由 syslog 生成的信息
user   由用户程序生成的信息
uucp   由 uucp 生成的信息
local0----local7   与自定义程序使用,例如使用 local5 做为 ssh 功能
*   通配符代表除了 mark 以外的所有功能

这里的local0-local7可以让用户(程序)自定义使用
其实可以通过
man syslog
来看

论坛徽章:
0
7 [报告]
发表于 2004-05-13 11:37 |只看该作者

我们来聊聊syslogd和logrotate吧

请问楼主把log记录到远程主机的时候,比如使用kern.*    @remotehostname
他把log记到远程什么目录下了呀?可以自己定义么?

论坛徽章:
0
8 [报告]
发表于 2004-05-13 12:46 |只看该作者

我们来聊聊syslogd和logrotate吧

还没有鸟哥的好,不过还是得顶一下

论坛徽章:
0
9 [报告]
发表于 2004-05-13 14:46 |只看该作者

我们来聊聊syslogd和logrotate吧

原帖由 "foole " 发表:

关于楼主讲的关于为什么自己装的httpd的log没有记录到/var/log/message中去的问题

其实,日志是我自己定义了的。这个日志我没有添加到syslog中。
我当时遇到的问题就是日志一直在增长而不会轮换。所以才着中看了着方面的材料。
感谢您提供的第二点。

原帖由 "elm" 发表:

请问楼主把log记录到远程主机的时候,比如使用kern.* @remotehostname
他把log记到远程什么目录下了呀?可以自己定义么?


不好意思,关于把日志纪录到远程的机器,因为自己没有环境所以没有试验。
需要说明的是@remotehostname中的这个远程计算机您必须在/etc/hosts中做相关定义。

欢迎大家指正。

论坛徽章:
0
10 [报告]
发表于 2004-05-13 14:51 |只看该作者

我们来聊聊syslogd和logrotate吧

不错,要向楼主学习
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP