歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 如何使用Monit部署服務器監控系統

如何使用Monit部署服務器監控系統

日期:2017/2/27 15:49:15   编辑:Linux教程

很多Linux系統管理員依賴一個集中式的遠程監控系統(比如Nagios或者Cacti)來檢查他們網絡基礎設備的健康狀況。雖然集中式監控讓管理員的生活更簡單了,然而處理很多機器和服務時,專用的監控中心顯然成為了一個單點故障,如果監控中心掛了或者因為什麼原因(比如硬件或者網絡故障)不可訪問了,你就會失去整個網絡基礎設備情況的任何信息。

一個給你的監控系統增加冗余度的方法是安裝獨立的監控軟件(作為後備),至少在網絡中的關鍵/核心服務器上。這樣在集中式監控系統掛掉的情況,你還有能力通過後備的監控方式來獲取核心服務器的運行狀況。

Monit是什麼?

Monit是一個跨平台的用來監控Unix/linux系統(比 如Linux、BSD、OSX、Solaris)的工具。Monit特別易於安裝,而且非常輕量級(只有500KB大小),並且不依賴任何第三方程序、插 件或者庫。然而,Monit可以勝任全面監控、進程狀態監控、文件系統變動監控、郵件通知和對核心服務的自定義動作等場景。易於安裝、輕量級的實現以及強 大的功能,讓Monit成為一個理想的後備監控工具。

我已經在一些機器使用Monit幾年了,而且我對它的可靠性非常滿意。甚至作為全面的監控系統,對任何Linux系統管理員來說Monit也是非常 有用和強大的。在這篇教程中,我會展示如何在一個本地服務器部署Monit(作為後備監控系統)來監控常見的服務。在部署過程中,我只會展示我們用到的部 分。

在Linux安裝Monit

Monit已經被包含在多數Linux發行版的軟件倉庫中了。

Debian、Ubuntu或者Linux Mint:

$ sudo aptitude install monit

Fedora或者CentOS/RHEL:

在CentOS/RHEL中,你必須首先啟用EPEL或者Repoforge軟件倉庫.

# yum install monit

Monit自帶一個文檔完善的配置文件,其中包含了很多例子。主配置文件在/etc/monit.conf(Fedora/CentOS/RHEL 中),或者/etc/monit/monitrc(Debian/Ubuntu/Mint 中)。Monit配置文件有兩部分:“Global”(全局)和“Services”(服務)。

Global Configuration: Web Status Page (全局配置:Web狀態頁面)

Monit可以使用郵件服務來發送通知,也可以使用HTTP/HTTPS頁面來展示。我們先使用如下配置的web狀態頁面吧:

Monit監聽1966端口。
對web狀態頁面的訪問是通過SSL加密的。
使用monituser/romania作為用戶名/口令登錄。
只允許通過localhost、myhost.mydomain.ro和在局域網內部(192.168.0.0/16)訪問。
Monit使用pem格式的SSL證書。

之後的步驟,我會使用一個基於Red Hat的系統。在基於Debian的系統中的步驟也是類似的。

首先,在/var/cert生成一個自簽名的證書(monit.pem):

# 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的主配置文件中。你可以創建一個空配置文件,或者基於自帶的配置文件修改。

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

Global Configuration: Email Notification (全局配置:郵件通知)

然後,我們來設置Monit的郵件通知。我們至少需要一個可用的SMTP服務器來讓Monit發送郵件。這樣就可以(按照你的實際情況修改):

  • 郵件服務器的機器名:smtp.monit.ro
  • Monit使用的發件人:[email protected]
  • 郵件的收件人:[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)。

Global Configuration: Monit Daemon (全局配置:Monit守護進程)

接下來就該配置Monit守護進程了。可以將其設置成這樣:

  • 在120秒後進行第一次檢測。
  • 每3分鐘檢測一次服務。
  • 使用syslog來記錄日志。

如下代碼段可以滿足上述需求。

set daemon 120
with start delay 240
set logfile syslog facility log_daemon

我們必須定義“idfile”,Monit守護進程的一個獨一無二的ID文件;以及“eventqueue”,當monit的郵件因為SMTP或者網絡故障發不出去,郵件會暫存在這裡;以及確保/var/monit路徑是存在的。然後使用下邊的配置就可以了。

set idfile /var/monit/id
set eventqueue
basedir /var/monit

測試全局配置

現在“Global”部分就完成了。Monit配置文件看起來像這樣:

# Global Section

# 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]

# delay checks
set daemon 120
with start delay 240
set logfile syslog facility log_daemon

# idfile and mail queue path
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守護進程,然後等2到3分鐘:

# service monit start

如果你使用的是systemd,運行:

# systemctl start monit

現在打開一個浏覽器窗口,然後訪問https://<monit_host>:1966。將<monit_host>替換成Monit所在機器的機器名或者IP地址。

如果你使用的是自簽名的SSL證書,你會在浏覽器中看到一個警告信息。繼續訪問即可。

你完成登錄後,就會看到這個頁面。

在這個教程的其余部分,我們演示監控一個本地服務器和常見服務的方法。你會在官方wiki頁面看到很多有用的例子。其中的多數是可以直接復制粘貼的!

Service Configuration: CPU/Memory Monitoring (服務配置:CPU、內存監控)

我們先來監控本地服務器的CPU、內存占用。復制如下代碼段到配置文件中。

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

你可以很容易理解上邊的配置。最上邊的check是指每個監控周期(全局配置裡設置的120秒)都對本機進行下面的操作。如果滿足了任何條件,monit守護進程就會使用郵件發送一條報警。

如果某個監控項不需要每個周期都檢查,可以使用如下格式,它會每240秒檢查一次平均負載。

if loadavg (1min) > 10 for 2 cycles then alert

Service Configuration: SSH Service Monitoring (服務配置:SSH服務監控)

先檢查我們的sshd是否安裝在/usr/sbin/sshd:

check file sshd_bin with path /usr/sbin/sshd

我們還想檢查sshd的啟動腳本是否存在:

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的進程,並且有一個保存其pid的文件存在(/var/run/sshd.pid)。如果 任何一個不存在,我們就使用啟動腳本重啟sshd。我們檢查是否有進程在監聽22端口,並且使用的是SSH協議。如果沒有,我們還是重啟sshd。如果在 最近的5個監控周期(5x120秒)至少重啟5次了,sshd就被認為是不能用的,我們就不再檢查了。

Service Configuration: SMTP Service Monitoring (服務配置: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回應,就發送一條報警。如果監測到25端口上的SMTP協議是異常 的,就發送一條報警。如果在一次監測失敗後又監測成功了,就運行一個腳本(/scripts/mail-script)。如果檢查22端口上的SSH或者 143端口上的IMAP協議不正常,同樣發送報警。

總結

在這個教程,我演示了如何在本地服務器設置Monit,當然這只是Monit功能的冰山一角。你可以花些時間閱讀Monit的man手冊(寫得很 好)。Monit可以為任何Linux系統管理員做很多事情,並且具有非常優美和易於理解的語法。如果你將一個集中式的遠程監控系統和Monit一同使 用,你會得到一個更可靠的監控系統。你感覺Monit怎麼樣?

譯文:https://linux.cn/article-5542-1.html
Copyright © Linux教程網 All Rights Reserved