小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Linux 日志系統(tǒng)組成詳解

 qweertt4747 2017-02-10

Linux 日志系統(tǒng)有三部分組成:
一、使用什么工具記錄系統(tǒng)產(chǎn)生的日志信息?
      syslog服務(wù)腳本管理的兩個(gè)進(jìn)程: syslogd、klogd 來記錄系統(tǒng)產(chǎn)生的日志信息;
      klogd     進(jìn)程是專門為內(nèi)核產(chǎn)生的日志信息服務(wù)的。
      syslogd  進(jìn)程是專門為應(yīng)用程序服務(wù)(除了內(nèi)核)產(chǎn)生的日志信息服務(wù)的;
       只有調(diào)用了 logger 接口,應(yīng)用程序才可以調(diào)用 syslogd工具幫助記錄日志信息。

二、只要系統(tǒng)服務(wù)在運(yùn)行,就會(huì)產(chǎn)生日志信息,我們使用專門的工具把它記錄到磁盤上了,為了方便   

        分析日志,日志文件不能太大、很久以前的日志文件我們應(yīng)該把它刪掉。這些工作由誰完成呢?
        使用 logrotate 命令來滾動(dòng),syslog記錄的日志文件。

三、為了讓人們從繁忙的工作中解脫出來。自動(dòng)化管理:日志文件的滾動(dòng)、備份、壓縮等工作。
        使用兩個(gè)忠實(shí)的勞動(dòng)者(進(jìn)程):crond 和 anacron ,完成上述的所有工作。

 wkiom1ozvtndg8k0aafoccmsyjo100.jpg

看看它們各部分的實(shí)現(xiàn)過程:
1、syslog
       syslog 只是用來管理 sysogd 和 klogd 的服務(wù)腳本。它們的配置文件在 /etc/syslog.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
    [root@node2 logs]# cat /etc/syslog.conf
       
     # 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
     # 星號(hào)(*) 表示通配所有的 priority
     # *.info  表示記錄所有priority的info級(jí)別的日志信息。注意不緊包括 info 級(jí)別的,還包括比 info 級(jí)別高的所有日志信息都會(huì)被記錄下來。如:notice、warn、err、...、panic
     # *.info;mail.none;authpriv.none;cron.none   表示星號(hào)(*)通配的所有 priority但不包括 mail、authpriv、cron.
     # 意思是說,mail、authpriv、cron 系統(tǒng)的日志信息不會(huì)被記錄到 /var/log/messages 中來。
     
     # Log all the mail messages in one place.
       mail.*                                                  -/var/log/maillog
     # 星號(hào)(*)  表示通配所有的 priority.
     # mail.*   表示記錄系統(tǒng) mail 產(chǎn)生的所有級(jí)別的日志信息。
     # -/var/log/maillog  橫線(-)表示系統(tǒng) mail 產(chǎn)生的日志信息是異步寫入磁盤的。意思是先把它存在 page cache 緩沖池中。再根據(jù)某種策略把它一次性刷寫到磁盤中。
     # mail 是一個(gè)很繁忙的系統(tǒng),產(chǎn)生的日志信息量非常大。如果每次產(chǎn)生的日志信息就立即把它寫到磁盤上的話,效率是很低的。磁盤IO速度很慢的。原因,系統(tǒng)默認(rèn)是啟動(dòng)
     # 兩個(gè)臟頁刷寫線程的。可以通過/proc接口查看 [root@node2 ~]# cat /proc/sys/vm/nr_pdflush_threads 。Linux 會(huì)根據(jù)系統(tǒng)繁忙程度啟動(dòng)更多的線程來為刷寫臟頁服務(wù)的。
     # 當(dāng)然我們也可以調(diào)節(jié)該內(nèi)核參數(shù)。但是要根據(jù)我們硬件CPU的顆數(shù)來調(diào)節(jié)。
     # Everybody gets emergency messages
       *.emerg                                                 *
      
     # *.emerg  *    表示所有系統(tǒng)的emerg等級(jí)的日志信息都發(fā)給所有用戶。
     # Save boot messages also to boot.log
      local7.*                                                /var/log/boot.log
     # 該項(xiàng)記錄的是系統(tǒng)引導(dǎo)過程的所有級(jí)別的日志信息。

    配置文件格式:
                 facility.priority         /path
    facility             是用來定義由誰產(chǎn)生的日志信息:那個(gè)軟件、子系統(tǒng)運(yùn)行過程中產(chǎn)生的日志信息。
    priority             是用來定義記錄什么類型的日志信息。是應(yīng)用程序產(chǎn)生的所有信息都把它記錄到日志

                             文件中呢,還是只記錄該應(yīng)用程序的錯(cuò)誤日志信息等等。
    /path/file_name      是用來定義把日志信息寫到哪里去。

    查看常見的facility和priority:

1
2
3
4
5
6
7
8
9
10
[root@node2 ~]# man syslog.conf
          # 常見的 facility
          The  facility  is  one of the following keywords: auth, authpriv, cron,
       daemon, kern, lpr, mail, mark, news, security (same as  auth),  syslog,
       user,  uucp and local0 through local7.
           
   # 常見的 priority
          The priority is one of the  following  keywords,  in  ascending  order:
       debug,  info, notice, warning, warn (same as warning), err, error (same
       as err), crit, alert, emerg,  panic  (same  as  emerg).

       syslog 有統(tǒng)一的日志文件格式,方便管理員閱讀。
       Linux 系統(tǒng)日志文件的標(biāo)準(zhǔn)格式:
                                 事件發(fā)生的時(shí)間    哪臺(tái)主機(jī)的日志    產(chǎn)生日志信息的系統(tǒng)    系統(tǒng)發(fā)生的事件
       它們各字段之間使用空格隔開。

1
2
[root@node2 ~]# tail /var/log/cron
Jun 12 10:00:01 node2 crond[5487]: (root) CMD (/usr/lib/sa/sa1 1 1)Jun 12 10:01:01 node2 crond[5490]:(root) CMD (run-parts /etc/cron.hourly)

    說明:
           事件發(fā)生的時(shí)間:         Jun 12 10:01:01
           哪臺(tái)主機(jī)的日志:         node2
          產(chǎn)生日志信息的系統(tǒng):     crond[5490]
          系統(tǒng)發(fā)生的事件:         CMD (run-parts /etc/cron.hourly)

1
2
3
[root@node2 ~]# tail -2 /var/log/messages
Jun 11 22:13:54 node2 syslogd 1.4.1: restart.
Jun 11 22:13:54 node2 kernel: klogd 1.4.1, log source /proc/kmsg started.

 2、日志文件的滾動(dòng):
       所有的日志文件都會(huì)隨著時(shí)間的推移和訪問次數(shù)的增加而迅速增大,因此必須對(duì)日志文件進(jìn)行定期

      清理以免造成磁盤空間不必要的浪費(fèi)。同時(shí)這也得以后日志分析方便。
      日志滾動(dòng)處理程序 logrotate,能夠自動(dòng)(當(dāng)然自動(dòng)就是把日志滾動(dòng)做成周期性任務(wù)來完成的)完成日志

      的壓縮、備份、刪除和日志郵寄等工作。
      每個(gè)日志文件都可以被設(shè)置成每日、每周或每月處理,也能設(shè)置當(dāng)日志文件太大時(shí)立即滾動(dòng)。
       logrotate 的工作原理:把被滾動(dòng)的日志文件定義logrotate的配置文件(/etc/logrotate.d/fine_name),

      并定義好日志滾動(dòng)事略。
     日志滾動(dòng)處理程序讀取配置文件,然后就會(huì)根據(jù)用戶定義的滾動(dòng)策略來分析日志文件,是否對(duì)日志

      文件進(jìn)程滾動(dòng)。
     logrotate 的配置文件分為兩段:主配置文件(/etc/logrotate.conf)和子配置文件定義在/etc/logrotate.d/

     目錄中(需要使用include把該目錄包含進(jìn)來 )
    定義一個(gè)日志文件的滾動(dòng)配置文件格式:
              日志文件的全路徑 {
            logrotate 指令
       }
    了解一個(gè)日志滾動(dòng)處理程序 logrotate 是怎樣對(duì) syslogd 和 kelogd 記錄的日志文件進(jìn)程滾動(dòng)的?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[root@node2 ~]# cat  /etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly 定義清理日志的周期.
# 已經(jīng)把使用命令【logrotate】進(jìn)行日志滾動(dòng)的服務(wù)定義成了周期性任務(wù)計(jì)劃。
# 但是每天的4點(diǎn)02分會(huì)執(zhí)行一次, 
# [root@node2 ~]ll /etc/cron.daily/logrotate
# -rwxr-xr-x 1 root root 180 Feb 27  2009 /etc/cron.daily/logrotate
# 文件 /etc/cron.daily/logrotate 實(shí)際上是運(yùn)
#行 /usr/sbin/logrotate /etc/logrotate.conf 
# 也就是說,每天的4點(diǎn)02分就使用命令【logrotate】對(duì)定義在/etc/logrotate.d 目錄下
# 的符合滾動(dòng)條件的應(yīng)用程序的日志文件
# 進(jìn)程滾動(dòng)。
     weekly
# keep 4 weeks worth of backlogs 保存過去4周的日志文件
     rotate 4
# 滾動(dòng)日志的同時(shí)創(chuàng)建新的空的日志文件
# create new (empty) log files after rotating old ones
     create
# uncomment this if you want your log files compressed 是否使用壓縮功能
     #compress
# RPM packages drop log rotation information into this directory 
# 把/etc/logrotate.d目錄的文件包含進(jìn)來。
# 如果主配置文件/etc/logrotate.conf與/etc/logrotate.d目錄下的配置文件定義了相
# 同的指令,則覆蓋主配置文件中的指令。否則的話使用主配置文件中的指令。
     include /etc/logrotate.d
# no packages own wtmp -- we'll rotate them here 
    /var/log/wtmp {
         monthly
         minsize 1M
         create 0664 root utmp
         rotate 1
    }
1
2
3
4
5
6
7
8
9
10
11
12
[root@node2 ~]# cat /etc/logrotate.d/syslog
# 對(duì) /var/log/messages、/var/log/secure、 /var/log/maillog、
#/var/log/spooler、/var/log/boot.log和/var/log/cron日志文件進(jìn)行日志滾動(dòng)。 
 /var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
    # 調(diào)用日志滾動(dòng)通用函數(shù)
    sharedscripts
    # 在日志滾動(dòng)之后執(zhí)行,postrotate與endscript之間的命令
    postrotate
       /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
        /bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
   }

     如果我們寫好了一個(gè)日志滾動(dòng)的配置文件,怎樣知道日志滾動(dòng)處理程序根據(jù)配置文件對(duì)日志文件的

     操作是否成功呢。
     則要使用 logrotate 命令的選項(xiàng)以指定配置文件進(jìn)程測(cè)試了。
    【logrotate】命令格式
     logrotate [選項(xiàng)] <configfile>
      -d:       詳細(xì)顯示指令執(zhí)行過程,便于排錯(cuò)或了解程序執(zhí)行的情況。
      -f:       強(qiáng)行啟動(dòng)日志文件的滾動(dòng)操作。忽視 logrotate 中定義的日志滾動(dòng)條件??梢杂脕頊y(cè)試所配置

      的日志滾動(dòng)是否正確。

      決定使用 logrotate 應(yīng)用程序來做 httpd 服務(wù)器的日志滾動(dòng).
   1)、在/etc/logrotate.d/目錄下,新建文件 httpd 做為 httpd 服務(wù)的日志文件的滾動(dòng)配置文件。

1
2
3
4
5
6
7
8
9
10
11
[root@node2 ~]# cat /etc/logrotate.d/httpd
/usr/local/apache2/logs/access.log  /usr/local/apache2/logs/error.log {
   missingok         # 若日志文件丟失則創(chuàng)建一個(gè)新的日志文件
   notifempty
   rotate   4
   size  2M          # 當(dāng)日志文件達(dá)到 2M 以后才做日志文件的滾動(dòng)
   sharedscripts
   postrotate
       /bin/kill -1 `cat /var/run/httpd.pid  2>/dev/null` 2>/dev/null
   endscript
 }

注意:
        要想使用命令【logrotate】的 -f 參數(shù)來測(cè)試剛配置好的日志滾動(dòng)配置文件,記得一定要使用指令

         rotate n 來備份幾個(gè)滾動(dòng)后日志文件。如果沒有使用rotate
         指令的話,【logrotate -f /etc/logrotate.d/configfile】是不會(huì)備份滾動(dòng)后的日志的。

         一執(zhí)行【logrotate -f /etc/logrotate.d/configfile】就會(huì)看到一個(gè)現(xiàn)象:被滾動(dòng)的日志文件被清空了。
         使用 -f 選項(xiàng),如果我們的配置文件中有錯(cuò)誤,也會(huì)顯示出來的。便于我們修改。
          也可以使用【date】來調(diào)整系統(tǒng)時(shí)間,來執(zhí)行/etc/cron.daily/logrotate任務(wù)。就可以看到結(jié)果了。

 

2)、模擬應(yīng)用程序logrotate執(zhí)行的時(shí)候,httpd服務(wù)器的日志是否滾動(dòng)

1
2
3
4
   [root@node2 ~]# ll /usr/local/apache2/logs/
   total 53172
   -rw-r--r-- 1 root root 25702370 Jun 11 16:19 access.log
   -rw-r--r-- 1 root root      833 Jun 11 16:18 error.log

使用 logrotate 命令的 -f 選項(xiàng)強(qiáng)制執(zhí)行日志文件的滾動(dòng)

1
[root@node2 ~]# logrotate   -f /etc/logrotate.d/httpd

再檢查 httpd 服務(wù)器的日志是否滾動(dòng)了?期待或

1
2
3
4
5
6
   [root@node2 ~]# ll /usr/local/apache2/logs/
   total 53176
   -rw-r--r-- 1 root root        0 Jun 11 16:27 access.log
   -rw-r--r-- 1 root root 25702370 Jun 11 16:19 access.log.1
   -rw-r--r-- 1 root root        0 Jun 11 16:27 error.log
   -rw-r--r-- 1 root root      833 Jun 11 16:27 error.log.1

說明:
    從結(jié)果可以得知:
                 使用命令【logrotate】實(shí)現(xiàn)了對(duì) httpd 服務(wù)器的日志文件做了日志滾動(dòng)。

 

3、怎么讓日志滾動(dòng)自動(dòng)執(zhí)行呢?
       Linux 系統(tǒng)中有兩個(gè)守護(hù)進(jìn)程 crond 和 anacron ,用于自動(dòng)執(zhí)行系統(tǒng)和用戶的周期性任務(wù)。
       crond 與 anacron 是完全不同的兩個(gè)用于定期執(zhí)行任務(wù)的守護(hù)進(jìn)程。
       crond 假定服務(wù)器是 7x24 小時(shí)運(yùn)行的,當(dāng)有一段關(guān)機(jī)時(shí)間就會(huì)遺漏這一時(shí)間段

       應(yīng)該執(zhí)行的 crond 任務(wù)。
       anacron 是為了執(zhí)行因?yàn)闀r(shí)間不連續(xù),crond 而遺漏的任務(wù)。
      這樣,它們兩攜手起來就不會(huì)因?yàn)榉?wù)器關(guān)機(jī)或系統(tǒng)時(shí)間改變而遺漏計(jì)劃任務(wù)了。
     周期性任務(wù)計(jì)劃又分為:系統(tǒng)的周期性任務(wù)計(jì)劃(定義在/etc/crontab)和用戶的周期性任務(wù)計(jì)劃

    (定義在/var/spool/cron/$user)。
    crond 守護(hù)進(jìn)程是如何完成周期性任務(wù)計(jì)劃的執(zhí)行的呢?
     crond 首先會(huì)會(huì)讀取,系統(tǒng)的周期性任務(wù)計(jì)劃(定義在/etc/crontab)和用戶的周期性任務(wù)計(jì)劃

    (定義在/var/spool/cron/$user),crond 守護(hù)進(jìn)程時(shí)時(shí)監(jiān)控著,
    是否到了周期性任務(wù)計(jì)劃的執(zhí)行時(shí)間。當(dāng)任務(wù)計(jì)劃中的時(shí)間和日期與系統(tǒng)的當(dāng)前時(shí)間和日期相同

    時(shí),就執(zhí)行相應(yīng)的周期性任務(wù)計(jì)劃。crond 任務(wù)執(zhí)行結(jié)束后,
   任何輸出將作為郵件發(fā)送給安排周期性任務(wù)的所有者。

1
2
3
4
5
6
7
8
9
10
  [root@node2 ~]# cat /etc/crontab
   SHELL=/bin/bash
   PATH=/sbin:/bin:/usr/sbin:/usr/bin
   MAILTO=root
   HOME=/
   # run-parts
   01 * * * * root run-parts /etc/cron.hourly
   02 4 * * * root run-parts /etc/cron.daily
   22 4 * * 0 root run-parts /etc/cron.weekly
   42 4 1 * * root run-parts /etc/cron.monthly

  說明:
       這是定義系統(tǒng)的周期性任務(wù)計(jì)劃的配置文件。
       02 4 * * * root run-parts /etc/cron.daily  表示:每天4點(diǎn)02分,使用root用戶去執(zhí)行命令(腳本)run-parts /etc/cron.daily
       其中 /etc/cron.daily 是命令或腳本(run-parts)的參數(shù)。
       而 /etc/cron.daily 目錄中定義很多要執(zhí)行的可執(zhí)行腳本,這些腳本就是要執(zhí)行的任務(wù)。
  
   查看每天的計(jì)劃任務(wù)有哪些?

1
2
3
4
5
6
7
8
9
10
11
12
   [root@node2 ~]# tree /etc/cron.daily/
   /etc/cron.daily/
   |-- 0anacron
   |-- 0logwatch -> /usr/share/logwatch/scripts/logwatch.pl
   |-- cups
   |-- logrotate      ---------> logrotate 日志滾動(dòng)的任務(wù)
   |-- makewhatis.cron
   |-- mlocate.cron
   |-- prelink
   |-- rpm
   `-- tmpwatch
   0 directories, 9 files

查看腳本 run-parts 是任務(wù)執(zhí)行任務(wù)的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
[root@node2 ~]# cat /usr/bin/run-parts
#!/bin/bash
# run-parts - concept taken from Debian
# keep going when something fails
 set +e
if [ $# -lt 1 ]; then
        echo "Usage: run-parts <dir>"
        exit 1
fi
   if [ ! -d $1 ]; then
        echo "Not a directory: $1"
        exit 1
   fi
# Ignore *~ and *, scripts
   for in $1/*[^~,] ; do
          [ -d $i ] && continue
    # Don't run *.{rpmsave,rpmorig,rpmnew,swp} scripts 排除一些格式的文件
          "${i%.rpmsave}" != "${i}" ] && continue
          "${i%.rpmorig}" != "${i}" ] && continue
          "${i%.rpmnew}" != "${i}" ] && continue
          "${i%.swp}" != "${i}" ] && continue
          "${i%,v}" != "${i}" ] && continue
          
    # 執(zhí)行 /etc/cron.daily/的具有可執(zhí)行權(quán)限的文件。
          if [ -x $i ]; then
                  $i 2>&1 | awk -v "progname=$i" \
                                'progname {
                                     print progname ":\n"
                                     progname="";
                                 }
                                 { print; }'
          fi
  done
  exit 0
  說明:
      腳本 run-parts 是先判斷目錄/etc/cron.daily 的文件,符合條件的再讓它去執(zhí)行。
  查看 /etc/cron.daily/logrotate 任務(wù)腳本
  [root@node2 ~]# cat /etc/cron.daily/logrotate
  #!/bin/sh
  /usr/sbin/logrotate /etc/logrotate.conf
  EXITVALUE=$?
    if [ $EXITVALUE != 0 ]; then
        /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
    fi
 exit 0

 

說明:
      腳本 run-parts 是先判斷目錄/etc/cron.daily 的文件,符合條件的再讓它去執(zhí)行。

     查看 /etc/cron.daily/logrotate 任務(wù)腳本

1
2
3
4
5
6
7
8
[root@node2 ~]# cat /etc/cron.daily/logrotate
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
     /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
 exit 0

 說明:
    /usr/sbin/logrotate /etc/logrotate.conf
    logrotate   日志滾動(dòng)程序根據(jù)配置文件configfile(/etc/logrotate.conf)來對(duì)日志的滾動(dòng)、備份、壓縮等操作。


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多