Chinaunix首页 | 论坛 | 博客
  • 博客访问: 543306
  • 博文数量: 119
  • 博客积分: 3167
  • 博客等级: 中校
  • 技术积分: 1215
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-20 21:21
文章分类

全部博文(119)

文章存档

2015年(21)

2012年(4)

2011年(1)

2007年(11)

2006年(50)

2005年(32)

分类: LINUX

2005-12-20 21:49:28

syslog 守护程序为记录来自运行于系统之上的程序的消息提供了一种成熟的客户机-服务器机制。syslog 接收来自守护程序或程序的消息,根据优先级和类型将该消息分类,然后根据由管理员可配置的规则将它写入日志。结果是一个健壮而统一的管理日志的方法。

读取日志

# cd /var/log
# tail messages

跟踪日志文件

# tail -f /var/log/messages

針對 log 檔案來設計的服務有這兩个:

  • syslogd:進行系統或者是網路服務的登錄檔記錄工作;
  • logrotate:將舊的資料更名,並且建立新的登錄檔,以保持登錄檔的更新,並視設定將最舊的登錄檔刪除。

syslogd

syslog.conf

该文件的格式为 facility.priority action

[root@linuxsir01 root]# more /etc/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;news.none;authpriv.none;cron.none /var/log/message
s

# The authpriv file has restricted access.
authpriv.* /var/log/secure 安全验证日志,系统生成的日志文件是放在了/var/log/secure

# Log all the mail messages in one place.
mail.* /var/log/maillog
这个是电子邮件系统的功能,这个日志文件是在/var/log/maillog目录下。


# Log cron stuff
cron.* /var/log/cron[COLOR=blue]这个是计时信息


# Everybody gets emergency messages
*.emerg * 这是syslog对日志所设置的级别,emerg表示系统已经不可用

# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler这是syslog对news和uucp的日志所设置的级别,crit表示危急,但事故还没有发生,将要发生。

# Save boot messages also to boot.log
local7.* /var/log/boot.log 开机系统日志,用local7来表示,日志文件的位置处在/var/log,日志文件是boot.log

#
# INN
#
news.=crit /var/log/news/news.crit
news.=err /var/log/news/news.err
news.notice /var/log/news/news.notice

日志类型

authpriv 安全性/验证的信息,通过这个,我们可以查看比如telnet和ssh之类登入系统方面的日志。这对于防黑有重要作用,不可小视。

cron 任务调度信息,有点象windows中的计划任务,我们可以通过这个程序在什么时间做什么事。他的配制文件在 /etc/crontab中,在这里我们是说它的日志文件的配制

kern 这是系统内核的日志,这个要我们自己定义存放位置,我们可以在/etc/syslog.conf中自己来定义存放位置。比如,我们可以在syslog.conf中加一行,比如是这样的
ker.debug /var/log/kern.log

local0-local7 自定义级别,开机系统日志,用local7来表示,日志文件的位置处在/var/log,日志文件是boot.log

lpr 看名字也应该知道,这是打印的日志文件,这个我们也一样可以自己来定义。在下面,我们再逐步深入说一下如何写系统日志

mail 是电子邮件的,sendmail,qmail等信息

news 是新闻组服务器的。

user 一般和户信息

syslog 内部log信息

auth 也是用户登入的信息,安全性和验证性的日志

uucp 全称是UNIX-TO-UNIX COPY PROTOCOL的信息


日志级别,日志系统管理员来维护系统的,系统日志的内容太多,所以就有必要把日志按级别来排序,这样能方便管理员发现比较紧急和重要的问题,以着手处理和解决。
这里有一个主次顺序,也就是重要的都放在前面,级别是由高而低的。

emerg 系统已经不可用,级别为紧急

alert 警报,需要立即处理和解决

crit 既将发生,得需要预防。事件就要发生

warnig 警告。

err 错误信息,普通的错误信息

notice 提醒信息,很重要的信息

info 通知信息,属于一般信息

debug 这是调试类信息

* 记录所有的信息,并发到所给所有的用户,以上的信



在/etc/syslog.conf中,根据我们自己的情况,可以配制或者定义日志文件。语法格式如下


日志类型.等级 日志存放位置[要用绝对路径]

假如我们需要messages這個檔案需要記錄所有的資訊,但是就是不想要記錄cron,mail及news的資訊,那麼應該怎麼寫才好?可以有兩種寫法,分別是:

*.*;news,cron,mail.none            /var/log/messages

*.*;news.none;cron.none;mail.none  /var/log/messages

使用『,』分隔時,那麼等級只要接在最後一個即可,如果是以『;』來分的話,那麼就需要將服務與等級都寫上去

再举个例子来说

kern.debug /var/log/kern.log


进一步详细解说:[注:以RedHat 8.0为例]在RedHat 8.0中,我们能看到如下的一行。这代表什么意思呢。

authpriv.* /var/log/secure

这个代表的意思是:所有验证类级别的日志都存放在secure这个日志文件里。有时,我们也会在/var/log目录里,看到secure1之类的,其实也是这类的日志,我们要灵活一下。是不是?

通过这个文件,我们可以看到验证类的日志,比如telnet和ssh等。如果别人用telnet我们的机器,我们就要查看这个文件了。我们可以通过
#more secure | grep telnet来看,当然用more也能一页一页的看过去,我的目的仅仅是想知道是不是这个文件能看到这方面的东西,比如我用机其它器telnet,我的linux的主机,就有从下面得到记录。是不是一清二楚了


Dec 15 15:22:59 linuxsir01 xinetd[809]: START: telnet pid=2535 from=192.168.0.6
Dec 17 01:06:42 linuxsir01 xinetd[810]: START: telnet pid=26581 from=192.168.0.6
Dec 17 17:59:05 linuxsir01 xinetd[810]: START: telnet pid=4152 from=192.168.0.8
Dec 18 02:52:59 linuxsir01 xinetd[810]: START: telnet pid=9520 from=192.168.0.6
Dec 18 03:15:55 linuxsir01 xinetd[810]: START: telnet pid=9910 from=192.168.0.6

logrotate

登錄檔的安全屬性設定 
 lsattr 與 chattr 如果將一個檔案以 chattr 設定i這個屬性時,那麼該檔案連 root 都不能删除!而且也不能新增資料 ,不符合我们的需要,这里只能用 +a ,如果設定了這個屬性的話,那麼他將只能被增加,而不能被刪除!嗯!這個項目就非常的符合我們登錄檔的需求啦!因此,建議您可以這樣的增加你的登錄檔的隱藏屬性。
[root @test root]# chattr +a /var/log/messages
[root @test root]# lsattr /var/log/messages
----a--------- messages
加入了這個屬性之後,你的/var/log/messages登錄檔從此就僅能被增加,而不能被刪除,

直到root以chattr –a /var/log/messages取消這個a的參數之後,才能被刪除或移動

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

    logrotate.conf 才是主要的參數檔案,至於 logrotate.d 是一個目錄,裡面的所有檔案都會被主動的讀入 /etc/logrotate.conf 當中來進行!另外,在/etc/logrotate.d裡面的檔案中,如果沒有規定到的一些細部設定,則以/etc/logrotate.conf這個檔案的規定來指定為預設值!


    剛剛我們提到 log rotate 的主要功能就是將舊的登錄檔案移動成舊檔,並且重新建立一個新的空的檔案來記錄,他的執行結果有點類似底下的圖示

    由上面的圖示我們可以清楚的知道,當第一次執行完rotate之後,原本的messages會變成messages.1而且會製造一個空的 messages給系統來儲存登錄檔。而第二次執行之後,則messages.1會變成messages.2而messages會變成 messages.1,又造成一個空的messages來儲存登錄檔!那麼如果我們僅設定保留三個登錄檔而已的話,那麼執行第四次時,則 messages.3這個檔案就會被刪除,並由後面的較新的保存登錄檔所取代!基本的工作就是這樣啦!
     
    那麼多久進行一次 logrotate 的工作呢?嗯!這些都記錄在 logrotate.conf 裡面,我們來看一下預設的 logrotate 的內容吧!

    # 每個禮拜進行一次 rotate 的工作
    weekly

    # 保留幾個登錄檔呢?預設是保留四個!
    rotate 4

    # 是否建立新的登錄檔來記錄呢?因為我們要繼續記錄,所以當然是建立囉!
    create

    # rotate之後的登錄檔,要不要壓縮,通常是不要壓縮啦,
    # 但是如果你的系統很忙碌,表示你的登錄檔很龐大的時候,
    # 那麼最好就是給他壓縮一下比較不會佔空間!
    Compress

    # 將底下這個目錄中的所有檔案都讀進來執行 rotate 的工作!
    include /etc/logrotate.d

    # 至於登錄的資訊部分,有使用 last 來紀錄的登錄者資訊就是記錄在這個檔案中!
    # 底下就是 /var/log/wtmp 這個檔案的 rotate 情況,他的意思是:
    # 1. 每個月進行一次 log rotate 的工作; 
    # 2. 將檔案的權限設定為 664 囉! 
    # 3. 僅保存前一個月的 rotate 備份!這個可以改大一點,例如 5 !保存五個月,以利追蹤
    /var/log/wtmp {
        monthly
        create 0664 root utmp
        rotate 1
    }

    # 底下這個檔案跟 /var/log/wtmp 類似!
    /var/log/lastlog {
        monthly
        rotate 1
    }

    正確的 logrotate 的寫法中:
     

    • 將 log file 名稱(包含絕對路徑)寫在前面,可以使用空白字元分隔多個 log files ;
    • 用 { } 包括所有的設定;
    • 設定的項目與前面提到的相同,並且可加入 rotate 前 (pre) 與後 (post) 的一些特殊執行的指令!
      • prerotate:在啟動 logrotate 之前進行的指令,例如修改 log file 的屬性!!
      • postrotate:在做完 logrotate 之後啟動的指令,例如重新啟動( kill -1 或 kill -HUP )某個服務!
      • Prerotate與postrotate對於已經加上了特殊屬性的檔案處理上面,是相當重要的執行程序!

     
    由於我們已經將登錄檔的屬性設定了chattr +a,所以必需要在logrotate之前將這個屬性拿掉,並在logrotate之後,再將這個屬性加回去!



  • 阅读(1156) | 评论(0) | 转发(0) |
    给主人留下些什么吧!~~