monit 内存 监控_如何借助Monit搭建服务器监控系统?(1)
許多Linux管理員依賴一種集中式遠(yuǎn)程監(jiān)控系統(tǒng)(比如Nagios或Cacti),檢查網(wǎng)絡(luò)基礎(chǔ)設(shè)施的健康狀況。雖然集中式監(jiān)控系統(tǒng)為管理員在處理許多主機(jī)和設(shè)備時(shí)簡(jiǎn)化了工作,但專用的監(jiān)控設(shè)備顯然成了單一故障點(diǎn);要是監(jiān)控設(shè)備出現(xiàn)故障或者由于其他原因(比如硬件壞掉或網(wǎng)絡(luò)停運(yùn))而聯(lián)系不上,你就失去了可見性,無法了解整個(gè)基礎(chǔ)設(shè)施的狀況。
想為監(jiān)控系統(tǒng)增添冗余機(jī)制,一個(gè)辦法就是起碼在網(wǎng)絡(luò)上任何關(guān)鍵/核心服務(wù)器上安裝獨(dú)立的監(jiān)控軟件(作為一條退路)。那樣萬一集中式監(jiān)控系統(tǒng)壞掉,你仍能夠通過備用的監(jiān)控工具,保持可見性,了解核心服務(wù)器的狀況。
Monit簡(jiǎn)介
Monit是一種跨平臺(tái)的開源工具,可用于監(jiān)控Unix/Linux系統(tǒng)(比如Linux、BSD、OSX和Solaris)。Monit安裝起來極其容易,也非常輕型(大小只有500KB),并不需要任何第三方程序、插件或代碼庫。不過,Monit有助于提供成熟的監(jiān)控功能,具有進(jìn)程狀態(tài)監(jiān)控、文件系統(tǒng)變化監(jiān)控、電子郵件通知、針對(duì)核心服務(wù)的可定制操作等功能。Monit集安裝簡(jiǎn)易、輕量級(jí)實(shí)現(xiàn)和功能強(qiáng)大等優(yōu)點(diǎn)于一身,因而是一款再理想不過的備用監(jiān)控工具。
好幾年來我一直在多個(gè)主機(jī)上使用Monit,對(duì)它一貫以來的可靠表現(xiàn)非常滿意。即使作為一款成熟的監(jiān)控系統(tǒng),Monit對(duì)任何Linux管理員來說也非常實(shí)用、非常強(qiáng)大。我在本教程中將演示如何在本地服務(wù)器上搭建Monit(作為備用監(jiān)控工具),以監(jiān)控常見服務(wù)。該系統(tǒng)搭建起來后,我將僅僅介紹Monit強(qiáng)大功能的皮毛。
將Monit安裝到Linux上
大多數(shù)Linux發(fā)行版已經(jīng)在其軟件庫中含有Monit。
在Debian、Ubuntu或Linux Mint上:
$ sudo aptitude install monit
在Fedora或CentOS/RHEL上:
在CentOS/RHEL上,你必須先啟用EPEL或Repoforge軟件庫。
# yum install monit
Monit隨帶一個(gè)文檔很齊全的配置文件,有許多示例。主配置文件位于Fedora/CentOS/RHEL中的/etc/monit.conf,或位于Debian/Ubuntu/Mint中的/etc/monit/monitrc。Monit配置有兩個(gè)部分:“全局”部分和“服務(wù)”部分。
全局配置:Web狀態(tài)頁面
Monit可以使用幾種郵件服務(wù)器用于通知,以及/或者HTTP/HTTPS狀態(tài)頁面。不妨從滿足下列要求的Web狀態(tài)頁面入手。
?Monit偵聽端口1966。
?對(duì)Web狀態(tài)頁面的訪問用SSL加密。
?登錄需要monituser/romania作為用戶/密碼。
?只允許從本地主機(jī)、myhost.mydomain.ro和內(nèi)部局域網(wǎng)(192.168.0.0/16)進(jìn)行登錄。
?Monit以pem格式存儲(chǔ)SSL證書。
至于隨后的步驟,我將使用基于紅帽的系統(tǒng)。類似步驟適用于基于Debian的系統(tǒng)上。
首先,生成一個(gè)自簽名的證書(monit.pem),并存儲(chǔ)在/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
現(xiàn)在,將下列代碼片段放入到Monit的主配置文件。你可以從空的配置文件入手,也可以拷貝一份原始文件。
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
全局配置:電子郵件通知
下一步,不妨在Monit中建立電子郵件通知機(jī)制。我們至少需要一臺(tái)活動(dòng)的SMTP服務(wù)器,它能夠從Monit主機(jī)發(fā)送郵件。類似下列的信息就可以了(針對(duì)你的具體情況稍作調(diào)整):
?郵件服務(wù)器主機(jī)名:smtp.monit.ro
?Monit所使用的發(fā)送者電子郵件地址:monit@monit.ro
?誰將收到來自monit守護(hù)程序的郵件:guletz@monit.ro
?郵件服務(wù)器使用的SMTP端口:587(默認(rèn)端口是25)
有了上述信息,電子郵件通知可以配置成這樣:
set mailserver smtp.monit.ro port 587
set mail-format {
from: monit@monit.ro
subject: $SERVICE $EVENT at $DATE on $HOST
message: Monit $ACTION $SERVICE $EVENT at $DATE on $HOST : $DESCRIPTION.
Yours sincerely,
Monit
}
set alert guletz@monit.ro
正如你所見,Monit提供了幾個(gè)內(nèi)置變量($DATE、$EVENT和$HOST等),你可以定制電子郵件消息,以滿足自己的需要。如果你想從Monit主機(jī)本身發(fā)送郵件,就需要一個(gè)已經(jīng)安裝的與sendmail兼容的程序(比如postfix或ssmtp)。
全局配置:Monit守護(hù)程序
下一個(gè)部分是設(shè)置monit守護(hù)程序。我們將按如下方式設(shè)置它。
?120秒過后執(zhí)行首次檢查。
?每隔3分鐘檢查一次服務(wù)。
?使用syslog用于記錄日志。
放入下面這個(gè)代碼片段,獲得上述設(shè)置。
set daemon 120
with start delay 240
set logfile syslog facility log_daemon
我們還必須定義“idfile”和“eventqueue”,前者是monit守護(hù)程序使用的獨(dú)特ID,后者是monit發(fā)送郵件的路徑,但由于SMTP/網(wǎng)絡(luò)錯(cuò)誤而無法送達(dá)。證實(shí)路徑(/var/monit)已經(jīng)存在。下列配置就行。
set idfile /var/monit/id
set eventqueue
basedir /var/monit
測(cè)試全局配置
現(xiàn)在,“全局”部分已完成。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: monit@monit.ro
subject: $SERVICE $EVENT at $DATE on $HOST
message: Monit $ACTION $SERVICE $EVENT at $DATE on $HOST : $DESCRIPTION.
Yours sincerely,
Monit
}
set alert guletz@monit.ro# 延遲檢查
set daemon 120
with start delay 240
set logfile syslog facility log_daemon
# idfile和郵件隊(duì)列路徑
set idfile /var/monit/id
set eventqueue
basedir /var/monit
現(xiàn)在是時(shí)候檢查我們完成的步驟了。你可以測(cè)試現(xiàn)有的配置文件(/etc/monit.conf),只要運(yùn)行:
# monit -t
Control file syntax OK
如果Monit報(bào)告任何錯(cuò)誤,請(qǐng)?jiān)俅伍喿x配置文件。幸好,錯(cuò)誤/警告信息量很豐富。比如說:
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'
一旦你驗(yàn)證了配置語法,就啟動(dòng)monit守護(hù)程序,等兩三分鐘:
# service monit start
如果你使用systemd,運(yùn)行:
# systemctl start monit
現(xiàn)在打開瀏覽器窗口,進(jìn)入到https://:1966。把換成你的Monit主機(jī)名或IP地址。
請(qǐng)注意:如果你有一個(gè)自簽名的SSL證書,會(huì)在瀏覽器中看到警告信息。
你完成登錄后,肯定會(huì)看到下面這一頁。
在教程的其余部分,我將介紹如何監(jiān)控本地服務(wù)器和常見服務(wù)。你會(huì)在官方維基頁面上看到許多有用的示例(http://mmonit.com/wiki/Monit/ConfigurationExamples)。大多數(shù)示例可以拷貝粘貼!
服務(wù)配置:處理器/內(nèi)存監(jiān)控
不妨先監(jiān)控本地服務(wù)器的處理器/內(nèi)存使用情況。將下列代碼片段拷貝到配置文件。
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
很容易解讀上述配置。每個(gè)監(jiān)控周期(在全局部分中被設(shè)為120秒),針對(duì)本地主機(jī)執(zhí)行上述檢查。要是符合條件,monit守護(hù)程序就會(huì)通過電子郵件發(fā)送提醒。
如果某些屬性不需要每個(gè)周期都加以監(jiān)控,你可以使用下列格式。比如說,這將每隔一個(gè)周期(也就是每隔240秒)監(jiān)控平均負(fù)載。
if loadavg (1min) > 10 for 2 cycles then alert
服務(wù)配置:SSH服務(wù)監(jiān)控
不妨檢查我們是否將sshd二進(jìn)制文件安裝在/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守護(hù)程序是否安裝并運(yùn)行起來,是否偵聽端口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
更具體地說,我們可以解讀上述配置,如下所示。我們檢查一個(gè)名為sshd的進(jìn)程和pidfile(/var/run/sshd.pid)是否存在。要是這其中一個(gè)都不存在,我們就使用init腳本重啟sshd守護(hù)程序。我們檢查偵聽端口22的進(jìn)程是否支持SSH協(xié)議。要是不支持,我們就重啟sshd守護(hù)程序。要是在最近5個(gè)監(jiān)控周期(即5 x 120秒)里面至少有5次重啟,sshd守護(hù)程序就宣布失效,我們并不試圖再次檢查。
服務(wù)配置:SMTP服務(wù)監(jiān)控
現(xiàn)在檢查遠(yuǎn)程SMTP郵件服務(wù)器(比如192.168.111.102)。假設(shè)SMTP服務(wù)器通過其局域網(wǎng)接口,運(yùn)行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
我們檢查遠(yuǎn)程主機(jī)是否響應(yīng)ICMP。要是我們沒有在10個(gè)周期內(nèi)收到ICMP響應(yīng),就發(fā)送提醒。要是SMTP協(xié)議測(cè)試在端口25上失敗,我們就發(fā)送提醒。要是測(cè)試失敗后測(cè)試又成功了,我們就運(yùn)行腳本(/scripts/mail-script)。要是SSH和IMAP協(xié)議測(cè)試分別在端口22和端口143上失敗,我們就發(fā)送提醒。
結(jié)束語
我在本教程中演示了如何在本地服務(wù)器上搭建Monit。就Monit的功能而言,我在這里介紹的僅僅是冰山一角。不妨花點(diǎn)時(shí)間閱讀關(guān)于Monit的參考手冊(cè)頁。Monit的語法非常通俗易懂,為任何Linux管理員提供了許多功能。如果你結(jié)合集中式遠(yuǎn)程監(jiān)控工具和Monit為己所用,就會(huì)擁有一個(gè)更可靠的監(jiān)控系統(tǒng)。你覺得Monit怎么樣?
英文:How to set up server monitoring system with Monit
http://netsecurity.51cto.com/art/201504/471116_7.htm
總結(jié)
以上是生活随笔為你收集整理的monit 内存 监控_如何借助Monit搭建服务器监控系统?(1)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ rand()函数和srand(
- 下一篇: phpcms 指定id范围 调用_php