天天看點

在Linux上使用logwatch分析監控日志檔案1. 介紹2. 安裝與配置說明3. 擴充

在維護linux伺服器時,經常需要檢視系統中各種服務的日志,以檢查伺服器的運作狀态。 如登陸曆史、郵件、軟體安裝等日志。系統管理者一個個去檢查會十分不友善;且大多時候,這會是一種被動的檢查,即隻有在發現系統運作異常時才會想到去檢視日志以擷取異常的資訊。那麼如何主動、集中的分析這些日志,并産生報告,定時發送給管理者就會顯得十分重要。

logwatch 是一款用 perl 語言編寫的開源日志解析分析器。它能對原始的日志檔案進行解析并轉換成結構化格式的文檔,也能根據您的使用情況和需求來定制報告。logwatch 的主要目的是生成更易于使用的日志摘要,并不是用來對日志進行實時的處理和監控的。正因為如此,logwatch 通常被設定好時間和頻率的自動定時任務來排程運作或者是有需要日志處理的時候從指令行裡手動運作。一旦日志報告生成,logwatch 可以通過電子郵件把這報告發送給您,您可以把它儲存成檔案或者直接顯示在螢幕上。

logwatch 報告的詳細程度和報告覆寫範圍是完全可定制化的。logwatch 的日志處理引擎也是可擴充的,從某種意義上來說,如果您想在一個新的應用程式中使用 logwatch 功能的話,隻需要為這個應用程式的日志檔案編寫一個日志處理腳本(使用 perl 語言),然後挂接到 logwatch 上就行。

logwatch 有一點不好的就是,在它生成的報告中沒有詳細的時間戳資訊,而原來的日志檔案中是存在的。您隻能知道被記錄下來的一段時間之内的特定事件,如果想要知道精确的時間點的資訊,就不得不去檢視原日志檔案了。

無論在debian系還是redhat系上,安裝logwatch都非常簡單:

以下内容基于 centos 6.x,其餘系統相差不大。

安裝後的目錄檔案說明:

在Linux上使用logwatch分析監控日志檔案1. 介紹2. 安裝與配置說明3. 擴充

預設情況下使用的是<code>/usr/share/logwatch/default.conf/logwatch.conf</code>作為主配置檔案,但在<code>/etc/logwatch/conf/logwatch.conf</code>中的存在配置選項會覆寫前一個(<code>/usr/share/logwatch</code>下的<code>logwatch.conf</code>還是會起作用,比如在<code>/etc/logwatch</code>的<code>logwatch.conf</code>中沒有的選項)。但優先級最高的是在執行指令行中指定的選項。

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

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

在<code>/usr/share/doc/logwatch-7.3.6/howto-customize-logwatch</code>檔案中有這裡的詳細的配置說明。

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

試着執行<code>logwatch --service sshd --print</code>感受一下處理的結果。接下來修改<code>/etc/logwatch/conf/logwatch.conf</code>檔案的預設配置來做些個性化設定。

修改日志分析級别

“detail” 配置指令控制着 logwatch 報告的詳細程度。它可以是個正整數,也可以是分别代表着10、5和0數字的 high、med、low 幾個選項。這裡設定成<code>high</code>。(配置檔案中是不區分大小寫的)

指定報告收件人

<code>mailto</code>指定logwatch日志報告接收人,要把一份報告發送給多個使用者,隻需要把他們的郵件位址用空格或逗号隔開,但是logwatch認為你已經配置好本地郵件伺服器(sendmail或postfix),并能正确傳遞給使用者郵箱。

<code>mailfrom</code>,顧名思義,指定發件人。郵件位址可以說完整的收件人位址,也可以是伺服器上的本地使用者如root(有的郵件伺服器不支援顯示發件人别名)。

指定發送郵件的用戶端

将 mailer 改成<code>mailer = "msmtp -t"</code>。

輸出格式

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

當同時設定了<code>save = /tmp/logwatch</code>時,便不會發送郵件報告了,将會根據<code>output</code>指定的格式儲存到一個<code>save</code>檔案中。

在Linux上使用logwatch分析監控日志檔案1. 介紹2. 安裝與配置說明3. 擴充

另外在有的文章裡指定<code>format</code>選項,經過本人試驗在7.3.6版本中無效。

收集日志的範圍

<code>range</code>配置指令定義了生成 logwatch 報告的時間段資訊。這個指令通常可選的值是 yesterday、today、all。當作用了<code>rang = all</code>時,<code>archive = yes</code> 這個指令項也必須配置上,那麼所有的已存檔的日志檔案 (比如,/var/log/maillog、/var/log/maillog-20150111)都會被處理到。

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

收集哪些服務的日志

<code>service</code>選項指定想要監控的一個或多個服務。在<code>/usr/share/logwatch/scripts/services</code>目錄下列出的服務都能被監控,它們已經涵蓋了重要的系統服務(例如:pam,secure,iptables,syslogd 等),也涵蓋了一些像 sudo、sshd、http、fail2ban、samba等主流的應用服務。如果您想添加新的服務到清單中,得編寫一個相應的日志處理 perl 腳本,并把它放在這個目錄中。

在Linux上使用logwatch分析監控日志檔案1. 介紹2. 安裝與配置說明3. 擴充

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

指令行指定logwatch選項

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

<code>logwatch.conf</code>完整示例

我們可以看到在 crontab 定時任務設定目錄下存在<code>/etc/cron.daily/0logwatch</code>:

是以 logwatch 的工作不是監控日志異常後及時報警的工具,因為預設它是每天一封整合的郵件,并不具有及時性(安裝perl的<code>cpan</code>子產品後可以更精确的控制logwatch時間,詳見第一份參考)。

用一個簡單的例子介紹自定義logwatch的配置方法。

首先建立logwatch日志檔案組

<code>/etc/logwatch/conf/logfiles/test.conf</code>:

然後建立logwatch服務配置檔案

<code>/etc/logwatch/conf/services/test.conf</code>:

建立logwatch服務過濾器腳本

<code>/etc/logwatch/scripts/services/test</code>:

上面的腳本會從日志檔案裡過濾出包含error的行。最後,為建立的腳本添加執行權限:

繼續閱讀