Linux上使用logwatch分析監控記錄檔

來源:互聯網
上載者:User

1. 介紹

在維護Linux伺服器時,經常需要查看系統中各種服務的日誌,以檢查伺服器的運行狀態。 如登陸曆史、郵件、軟體安裝等日誌。系統管理員一個個去檢查會十分不方便;且大多時候,這會是一種被動的檢查,即只有在發現系統運行異常時才會想到去查看日誌以擷取異常的資訊。那麼如何主動、集中的分析這些日誌,併產生報告,定時發送給管理員就會顯得十分重要。

logwatch 是一款用 Perl 語言編寫的開源日誌解析分析器。它能對原始的記錄檔進行解析並轉換成結構化格式的文檔,也能根據您的使用方式和需求來定製報告。logwatch 的主要目的是產生更便於使用的日誌摘要,並不是用來對日誌進行即時的處理和監控的。正因為如此,logwatch 通常被設定好時間和頻率的自動定時任務來調度運行或者是有需要Tlog的時候從命令列裏手動運行。一旦日誌報告產生,logwatch 可以通過電子郵件把這報告發送給您,您可以把它儲存成檔案或者直接顯示在螢幕上。

Logwatch 報告的詳細程度和報告覆蓋範圍是完全可定製化的。Logwatch 的Tlog引擎也是可擴充的,從某種意義上來說,如果您想在一個新的應用程式中使用 logwatch 功能的話,只需要為這個應用程式的記錄檔編寫一個Tlog指令碼(使用 Perl 語言),然後掛接到 logwatch 上就行。

logwatch 有一點不好的就是,在它產生的報告中沒有詳細的時間戳記資訊,而原來的記錄檔中是存在的。您只能知道被記錄下來的一段時間之內的特定事件,如果想要知道精確的時間點的資訊,就不得不去查看原記錄檔了。

2. 安裝與配置說明
2.1 安裝
無論在Debian系還是Redhat繫上,安裝logwatch都非常簡單:

  # apt-get install logwatch     //Debian、Ubuntu.etc
# yum install logwatch -y       //Redhat、Centos.etc
以下內容基於 CentOS 6.x,其餘系統相差不大。

2.2 配置
2.2.1 設定檔說明
安裝後的目錄檔案說明: 

  /usr/share/logwatch
    default.conf/     # 配置目錄
        logwatch.conf   # 主設定檔,收件者,層級等
        logfiles/       # 定義待分析服務的記錄檔組路徑,相對於/var/log(*.conf)
        services/       # 自訂需分析日誌的Service目錄(*.conf)
    scripts/          # 可執行指令碼
        logwatch.pl     # 啟動分析的perl指令碼,/usr/sbin/logwatch的源連結
        logfiles/       # 可包含多個logwatch記錄檔組的子目錄,對應的Log Service啟動並執行時候,子目錄下的指令碼會自動被調用
        services/       # logwatchLog Service的過濾指令碼,一一對應
        shared/         # 可被多個logwatchLog Service引用的指令碼
    dist.conf/
        logfiles/
        services/
    lib/
預設情況下使用的是 /usr/share/logwatch/default.conf/logwatch.conf作為主設定檔,但在 /etc/logwatch/conf/logwatch.conf中的存在配置選項會覆蓋前一個( /usr/share/logwatch下的 logwatch.conf還是會起作用,比如在 /etc/logwatch的 logwatch.conf中沒有的選項)。但優先順序最高的是在執行命令列中指定的選項。

在 /etc/logwatch下也存在一個與 /usr/share/logwatch類似的目錄結構,可以在這裡添加自訂的監控日誌資訊。

從上面的目錄結構劃分大概可以瞭解到 logwatch 的原理:logwatch 首先要知道針對哪一個服務, 從這個服務中得到需要處理的 log 檔案資訊, 然後這個檔案送給過濾指令碼處理,之後把處理後格式化的資訊展現出。內部細節請看第3篇參考。

2.2.2 編輯配置


在 /usr/share/doc/logwatch-7.3.6/HOWTO-Customize-LogWatch檔案中有這裡的詳細的配置說明。

個人還是習慣在 /etc/logwatch/下管理設定檔,但又不太希望同時兩個設定檔生效,所以對 /usr/share/logwatch/default.conf/logwatch.conf備份,然後軟連結 /etc/logwatch/conf/logwatch.conf:

  ln -s /usr/share/logwatch/default.conf/logwatch.conf /etc/logwatch/conf/logwatch.conf
試著執行 logwatch --service sshd --print感受一下處理的結果。接下來修改 /etc/logwatch/conf/logwatch.conf檔案的預設配置來做些個人化。

修改日誌分析層級

  Detail = <Low, Med, High, or a number>
“Detail” 配置指令控制著 logwatch 報告的詳細程度。它可以是個正整數,也可以是分別代表著10、5和0數位 High、Med、Low 幾個選項。這裡設定成 High。(設定檔中是不區分大小寫)

指定報告收件者

  MailTo = youremailaddress@yourdomain.com

MailFrom = youremailaddress@yourdomain.com
MailTo指定logwatch日誌報告接收人,要把一份報告發送給多個使用者,只需要把他們的郵件地址用空格或逗號隔開,但是logwatch認為你已經配置好本地郵件伺服器(sendmail或postfix),並能正確傳遞給使用者郵箱。

MailFrom,顧名思義,指定寄件者。郵件地址可以說完整的收件者地址,也可以是伺服器上的本機使用者如root(有的郵件伺服器不支援顯示寄件者別名)。

指定發送郵件的用戶端

  mailer = "sendmail -t"
預設採用的是sendmail(不是sendmail伺服器),而且一般沒什麼問題。在我的環境下有點特殊,郵件伺服器必須通過smtp認證才能發送郵件,不支援匿名和其他本地MTA投遞的郵件,而sendmail我一直沒有找到設定smtp使用者和密碼認證的地方(知道的煩請告知),所以就改用了 mailer = "mailx -t",然後在 /etc/mail.rc中設定 from、 smtp、 smtp-auth-user、 smtp-auth-password、 smtp-auth參數,但使用mailx帶來的問題是後面設定郵件報告格式為html時,無法設定header資訊從而foxmail不能解析html本文。嘗試了 sendEmail 也沒很好的解決。

大部分人情況可能沒這麼複雜,其實就是一個發件用戶端的功能,網上得知有 mutt 結合 msmtp 可以解決該問題:

  # yum install -y mutt       //mutt其實可以不安裝
# tar jxvf msmtp-1.4.16.tar.bz2 && cd msmtp-1.4.16
# ./configure && make && make install

# vi ~/.msmtprc
  account default
  host your.smtp-server.com
  from username@smtp-server.com
  auth login
  user username
  password your_auth_pwd
  logfile ~/msmtp.log

# 如果使用mutt發送,還需要設定~/.muttrc
將 mailer 改成 mailer = "msmtp -t"。

輸出格式

  Output = <mail, html or unformatted>
預設不指定輸出格式(plain text),系統管理員通過郵件用戶端(如foxmail)看到的郵件內容是文本形式,比較簡單、節省頻寬;可以指定為 html,此時看到的是可點選連結的友好的頁面。

當同時設定了 Save = /tmp/logwatch時,便不會發送郵件報告了,將會根據 Output指定的格式儲存到一個 Save檔案中。

另外在有的文章裡指定 Format選項,經過本人實驗在7.3.6版本中無效。

收集日誌的範圍

  Range = <Yesterday|Today|All>
Range配置指令定義了產生 logwatch 報告的時間段資訊。這個指令通常可選的值是 Yesterday、Today、All。當作用了 Rang = All時, Archive = yes 這個指令項也必須配置上,那麼所有的已存檔的記錄檔 (比如,/var/log/maillog、/var/log/maillog-20150111)都會被處理到。

如果我們是通過 crontab 每天收集的話,可以只報告昨天或今天的日誌情況。

收集哪些服務的日誌

  Service = <service-name-1>
Service = <service-name-2>
. . .
Service選項指定想要監控的一個或多個服務。在 /usr/share/logwatch/scripts/services目錄下列出的服務都能被監控,它們已經涵蓋了重要的系統服務(例如:pam,secure,iptables,syslogd 等),也涵蓋了一些像 sudo、sshd、http、fail2ban、samba等主流的應用服務。如果您想添加新的服務到列表中,得編寫一個相應的Tlog Perl 指令碼,並把它放在這個目錄中。 

對於一個綜合日誌分析工具,logwatch推薦大多數人使用 Service = "All",然後通過繼續添加 Service = "-service_name"等來去掉那些不監控的日誌。當然在伺服器上,並不是所有script下的服務都有啟動,有些並沒有日誌。

命令列指定logwatch選項

如果您不想個人化 /etc/logwatch/conf/logwatch.conf,您可以不修改此檔案讓其預設,然後在命令列裡運行如下所示的命令:

  # logwatch --detail 10 --mailto youremailaddress@yourdomain.com --range today \
>  --service sshd --service postfix --service zz-disk_space --service -zz-network \
> --output mail
logwatch.conf完整樣本

  LogDir = /var/log
TmpDir = /var/cache/logwatch
Print = No

Range = yesterday
Detail = High

MailTo = zhouxiao@tp-link.net
MailFrom = itsection@tp-link.net
mailer = "msmtp -t"
Output = html

Service = All
Service = "-zz-network"
Service = "-zz-sys"
Service = "-eximstats"

3. 擴充
3.1 cron daily
我們可以看到在 crontab 定時任務設定目錄下存在 /etc/cron.daily/0logwatch:

  #!/bin/bash

DailyReport=`grep -e "^[[:space:]]*DailyReport[[:space:]]*=[[:space:]]*" /usr/share/logwatch/default.conf/logwatch.conf | head -n1 | sed -e "s|^\s*DailyReport\s*=\s*||"`

if [ "$DailyReport" != "No" ] && [ "$DailyReport" != "no" ]
then
    logwatch
fi
如果在 logwatch.conf中顯式設定了選項 DailyReport = No,則會取消logwatch每日執行任務。如果你要修改 cron.daily的執行時間,可以刪掉這個 0logwatch然後添加到 /etc/crontab裡,或者修改 /etc/anacrontab的 START_HOURS_RANGE。

所以 logwatch 的工作不是監控日誌異常後及時警示的工具,因為預設它是每天一封整合的郵件,並不具有及時性(安裝perl的 CPAN模組後可以更精確的控制logwatch時間,詳見第一份參考)。

3.2 定製自己要監控的日誌
用一個簡單的例子介紹自訂logwatch的配置方法。

首先建立logwatch記錄檔組
/etc/logwatch/conf/logfiles/test.conf:

  LogFile = /path/to/your/logfile
LogFile = /path/to/your/second/logfile
然後建立logwatch服務組態檔
/etc/logwatch/conf/services/test.conf:

  Title = test title     # 記錄檔裡的標題
LogFile = test   # logwatch記錄檔組的名字,通常是對應的設定檔的檔案名稱部分
建立logwatch服務過濾器指令碼
/etc/logwatch/scripts/services/test:

  #!/bin/bash

grep -i ERROR
上面的指令碼會從記錄檔裡過濾出包含ERROR的行。最後,為建立的指令碼添加執行許可權:

  chmod +x /etc/logwatch/scripts/services/test

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.