許多Linux管理員依賴一種集中式遠程監控系統(比如Nagios或Cacti),檢查網絡基礎設施的健康狀況。雖然集中式監控系統為管理員在處理許多主機和設備時簡化了工作,但專用的監控設備顯然成了單一故障點;要是監控設備出現故障或者由于其他原因(比如硬件壞掉或網絡停運)而聯系不上,你就失去了可見性,無法了解整個基礎設施的狀況。
想為監控系統增添冗余機制,一個辦法就是起碼在網絡上任何關鍵/核心服務器上安裝獨立的監控軟件(作為一條退路)。那樣萬一集中式監控系統壞掉,你仍能夠通過備用的監控工具,保持可見性,了解核心服務器的狀況。
Monit簡介
Monit是一種跨平臺的開源工具,可用于監控Unix/Linux系統(比如Linux、BSD、OSX和Solaris)。Monit安裝起來極其容易,也非常輕型(大小只有500KB),并不需要任何第三方程序、插件或代碼庫。不過,Monit有助于提供成熟的監控功能,具有進程狀態監控、文件系統變化監控、電子郵件通知、針對核心服務的可定制操作等功能。Monit集安裝簡易、輕量級實現和功能強大等優點于一身,因而是一款再理想不過的備用監控工具。
好幾年來我一直在多個主機上使用Monit,對它一貫以來的可靠表現非常滿意。即使作為一款成熟的監控系統,Monit對任何Linux管理員來說也非常實用、非常強大。我在本教程中將演示如何在本地服務器上搭建Monit(作為備用監控工具),以監控常見服務。該系統搭建起來后,我將僅僅介紹Monit強大功能的皮毛。
將Monit安裝到Linux上
大多數Linux發行版已經在其軟件庫中含有Monit。
在Debian、Ubuntu或Linux Mint上:
$ sudo aptitude install monit
在Fedora或CentOS/RHEL上:
在CentOS/RHEL上,你必須先啟用EPEL或Repoforge軟件庫。
# yum install monit
Monit隨帶一個文檔很齊全的配置文件,有許多示例。主配置文件位于Fedora/CentOS/RHEL中的/etc/monit.conf,或位于Debian/Ubuntu/Mint中的/etc/monit/monitrc。Monit配置有兩個部分:“全局”部分和“服務”部分。
[page]許多Linux管理員依賴一種集中式遠程監控系統(比如Nagios或Cacti),檢查網絡基礎設施的健康狀況。雖然集中式監控系統為管理員在處理許多主機和設備時簡化了工作,但專用的監控設備顯然成了單一故障點;要是監控設備出現故障或者由于其他原因(比如硬件壞掉或網絡停運)而聯系不上,你就失去了可見性,無法了解整個基礎設施的狀況。
全局配置:Web狀態頁面
Monit可以使用幾種郵件服務器用于通知,以及/或者HTTP/HTTPS狀態頁面。不妨從滿足下列要求的Web狀態頁面入手。
·Monit偵聽端口1966。
·對Web狀態頁面的訪問用SSL加密。
·登錄需要monituser/romania作為用戶/密碼。
·只允許從本地主機、myhost.mydomain.ro和內部局域網(192.168.0.0/16)進行登錄。
·Monit以pem格式存儲SSL證書。
至于隨后的步驟,我將使用基于紅帽的系統。類似步驟適用于基于Debian的系統上。
首先,生成一個自簽名的證書(monit.pem),并存儲在/var/cert中。
# mkdir /var/certs
# cd /etc/pki/tls/certs
# ./make-dummy-cert monit.pem
# cp monit.pem /var/certs
# chmod 0400 /var/certs/monit.pem
現在,將下列代碼片段放入到Monit的主配置文件。你可以從空的配置文件入手,也可以拷貝一份原始文件。
許多Linux管理員依賴一種集中式遠程監控系統(比如Nagios或Cacti),檢查網絡基礎設施的健康狀況。雖然集中式監控系統為管理員在處理許多主機和設備時簡化了工作,但專用的監控設備顯然成了單一故障點;要是監控設備出現故障或者由于其他原因(比如硬件壞掉或網絡停運)而聯系不上,你就失去了可見性,無法了解整個基礎設施的狀況。
全局配置:電子郵件通知
下一步,不妨在Monit中建立電子郵件通知機制。我們至少需要一臺活動的SMTP服務器,它能夠從Monit主機發送郵件。類似下列的信息就可以了(針對你的具體情況稍作調整):
·郵件服務器主機名:smtp.monit.ro
·Monit所使用的發送者電子郵件地址:[email protected]
·誰將收到來自monit守護程序的郵件:[email protected]
·郵件服務器使用的SMTP端口:587(默認端口是25)
有了上述信息,電子郵件通知可以配置成這樣:
set mailserver smtp.monit.ro port 587
set mail-format {
from: [email protected] subject: $SERVICE $EVENT at $DATE on $HOST
message: Monit $ACTION $SERVICE $EVENT at $DATE on $HOST : $DESCRIPTION.
Yours sincerely,
Monit
}
set alert [email protected]
正如你所見,Monit提供了幾個內置變量($DATE、$EVENT和$HOST等),你可以定制電子郵件消息,以滿足自己的需要。如果你想從Monit主機本身發送郵件,就需要一個已經安裝的與sendmail兼容的程序(比如postfix或ssmtp)。
許多Linux管理員依賴一種集中式遠程監控系統(比如Nagios或Cacti),檢查網絡基礎設施的健康狀況。雖然集中式監控系統為管理員在處理許多主機和設備時簡化了工作,但專用的監控設備顯然成了單一故障點;要是監控設備出現故障或者由于其他原因(比如硬件壞掉或網絡停運)而聯系不上,你就失去了可見性,無法了解整個基礎設施的狀況。
全局配置:Monit守護程序
下一個部分是設置monit守護程序。我們將按如下方式設置它。
·120秒過后執行首次檢查。
·每隔3分鐘檢查一次服務。
·使用syslog用于記錄日志。
放入下面這個代碼片段,獲得上述設置。
set daemon 120
with start delay 240
set logfile syslog facility log_daemon
我們還必須定義“idfile”和“eventqueue”,前者是monit守護程序使用的獨特ID,后者是monit發送郵件的路徑,但由于SMTP/網絡錯誤而無法送達。證實路徑(/var/monit)已經存在。下列配置就行。
[page]測試全局配置
現在,“全局”部分已完成。Monit配置文件看起來就像這樣:
# 全局部分
# status webpage and acl's
set httpd port 1966 and
SSL ENABLE
PEMFILE /var/certs/monit.pem
allow monituser:romania
allow localhost
allow 192.168.0.0/16
allow myhost.mydomain.ro
# mail-server
set mailserver smtp.monit.ro port 587
# email-format
set mail-format {
from: [email protected] subject: $SERVICE $EVENT at $DATE on $HOST
message: Monit $ACTION $SERVICE $EVENT at $DATE on $HOST : $DESCRIPTION.
Yours sincerely,
Monit
}
set alert [email protected]# 延遲檢查
set daemon 120
with start delay 240
set logfile syslog facility log_daemon
# idfile和郵件隊列路徑
set idfile /var/monit/id
set eventqueue
basedir /var/monit
現在是時候檢查我們完成的步驟了。你可以測試現有的配置文件(/etc/monit.conf),只要運行:
# monit -t
Control file syntax OK
如果Monit報告任何錯誤,請再次閱讀配置文件。幸好,錯誤/警告信息量很豐富。比如說:
monit: Cannot stat the SSL server PEM file '/var/certs/monit.pem' -- No such file or directory
/etc/monit/monitrc:10: Warning: hostname did not resolve 'smtp.monit.ro'
一旦你驗證了配置語法,就啟動monit守護程序,等兩三分鐘:
# service monit start
如果你使用systemd,運行:
# systemctl start monit
現在打開瀏覽器窗口,進入到https://:1966。把換成你的Monit主機名或IP地址。
請注意:如果你有一個自簽名的SSL證書,會在瀏覽器中看到警告信息。
你完成登錄后,肯定會看到下面這一頁。
在教程的其余部分,我將介紹如何監控本地服務器和常見服務。你會在官方維基頁面上看到許多有用的示例(http://mmonit.com/wiki/Monit/ConfigurationExamples)。大多數示例可以拷貝粘貼!
許多Linux管理員依賴一種集中式遠程監控系統(比如Nagios或Cacti),檢查網絡基礎設施的健康狀況。雖然集中式監控系統為管理員在處理許多主機和設備時簡化了工作,但專用的監控設備顯然成了單一故障點;要是監控設備出現故障或者由于其他原因(比如硬件壞掉或網絡停運)而聯系不上,你就失去了可見性,無法了解整個基礎設施的狀況。
服務配置:處理器/內存監控
不妨先監控本地服務器的處理器/內存使用情況。將下列代碼片段拷貝到配置文件。
check system localhost
if loadavg (1min) >10 then alert
if loadavg (5min) >6 then alert
if memory usage >75% then alert
if cpu usage (user) >70% then alert
if cpu usage (system) >60% then alert
if cpu usage (wait) >75% then alert
很容易解讀上述配置。每個監控周期(在全局部分中被設為120秒),針對本地主機執行上述檢查。要是符合條件,monit守護程序就會通過電子郵件發送提醒。
如果某些屬性不需要每個周期都加以監控,你可以使用下列格式。比如說,這將每隔一個周期(也就是每隔240秒)監控平均負載。
許多Linux管理員依賴一種集中式遠程監控系統(比如Nagios或Cacti),檢查網絡基礎設施的健康狀況。雖然集中式監控系統為管理員在處理許多主機和設備時簡化了工作,但專用的監控設備顯然成了單一故障點;要是監控設備出現故障或者由于其他原因(比如硬件壞掉或網絡停運)而聯系不上,你就失去了可見性,無法了解整個基礎設施的狀況。
服務配置:SSH服務監控
不妨檢查我們是否將sshd二進制文件安裝在/usr/sbin/sshd中:
check file sshd_bin with path /usr/sbin/sshd
我們還想檢查sshd的init腳本是否存在:
check file sshd_init with path /etc/init.d/sshd
最后,我們想檢查sshd守護程序是否安裝并運行起來,是否偵聽端口22:
check process sshd with pidfile /var/run/sshd.pid
start program "/etc/init.d/sshd start"
stop program "/etc/init.d/sshd stop"
if failed port 22 protocol ssh then restart
if 5 restarts within 5 cycles then timeout
更具體地說,我們可以解讀上述配置,如下所示。我們檢查一個名為sshd的進程和pidfile(/var/run/sshd.pid)是否存在。要是這其中一個都不存在,我們就使用init腳本重啟sshd守護程序。我們檢查偵聽端口22的進程是否支持SSH協議。要是不支持,我們就重啟sshd守護程序。要是在最近5個監控周期(即5 x 120秒)里面至少有5次重啟,sshd守護程序就宣布失效,我們并不試圖再次檢查。
內容導航
服務配置:SMTP服務監控
現在檢查遠程SMTP郵件服務器(比如192.168.111.102)。假設SMTP服務器通過其局域網接口,運行SMTP、IMAP和SSH。
check host MAIL with address 192.168.111.102
if failed icmp type echo within 10 cycles then alert
if failed port 25 protocol smtp then alert
else if recovered then exec "/scripts/mail-script"
if failed port 22 protocol ssh then alert
if failed port 143 protocol imap then alert
我們檢查遠程主機是否響應ICMP。要是我們沒有在10個周期內收到ICMP響應,就發送提醒。要是SMTP協議測試在端口25上失敗,我們就發送提醒。要是測試失敗后測試又成功了,我們就運行腳本(/scripts/mail-script)。要是SSH和IMAP協議測試分別在端口22和端口143上失敗,我們就發送提醒。
結束語
我在本教程中演示了如何在本地服務器上搭建Monit。就Monit的功能而言,我在這里介紹的僅僅是冰山一角。不妨花點時間閱讀關于Monit的參考手冊頁。Monit的語法非常通俗易懂,為任何Linux管理員提供了許多功能。如果你結合集中式遠程監控工具和Monit為己所用,就會擁有一個更可靠的監控系統。你覺得Monit怎么樣?
英文:How to set up server monitoring system with Monit