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

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

2018年08月14日 15:58:12 hakula007 閱讀數:298linux

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

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

Monit是什麼?瀏覽器

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

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

使用HeartBeat+Monit實現主備雙熱備份系統  http://www.linuxidc.com/Linux/2014-12/110769.htmdom

Google Guava 中的Monitor  http://www.linuxidc.com/Linux/2015-03/115526.htmssh

在Linux安裝Monit工具

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

Debian、Ubuntu或者Linux Mint:

  1. $ sudo aptitude install monit

Fedora或者CentOS/RHEL:

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

  1. # 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):

  1. # mkdir /var/certs
  2. # cd /etc/pki/tls/certs
  3. # ./make-dummy-cert monit.pem
  4. # cp monit.pem /var/certs
  5. # chmod 0400 /var/certs/monit.pem

如今將下列代碼片斷放到Monit的主配置文件中。你能夠建立一個空配置文件,或者基於自帶的配置文件修改。

  1. set httpd port 1966and
  2. SSL ENABLE
  3. PEMFILE /var/certs/monit.pem
  4. allow monituser:romania
  5. allow localhost
  6. allow 192.168.0.0/16
  7. allow myhost.mydomain.ro

 

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

而後,咱們來設置Monit的郵件通知。咱們至少須要一個可用的SMTP服務器來讓Monit發送郵件。這樣就能夠(按照你的實際狀況修改):

  • 郵件服務器的機器名:smtp.monit.ro
  • Monit使用的發件人:monit@monit.ro
  • 郵件的收件人:guletz@monit.ro
  • 郵件服務器使用的SMTP端口:587(默認是25)

有了以上信息,郵件通知就能夠這樣配置:

  1. set mailserver smtp.monit.ro port 587
  2. set mail-format {
  3. from: monit@monit.ro
  4. subject: $SERVICE $EVENT at $DATE on $HOST
  5. message:Monit $ACTION $SERVICE $EVENT at $DATE on $HOST : $DESCRIPTION.
  6. Yours sincerely,
  7. Monit
  8. }
  9. set alert guletz@monit.ro

就像你看到的,Monit會提供幾個內部變量($DATE$EVENT$HOST等),你能夠按照你的需求自定義郵件內容。若是你想要從Monit所在機器發送郵件,就須要一個已經安裝的與sendmail兼容的程序(如postfix或者ssmtp)。

 

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

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

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

以下代碼段能夠知足上述需求。

  1. set daemon 120
  2. with start delay 240
  3. set logfile syslog facility log_daemon

咱們必須定義「idfile」,Monit守護進程的一個獨一無二的ID文件;以及「eventqueue」,當monit的郵件由於SMTP或者網絡故障發不出去,郵件會暫存在這裏;以及確保/var/monit路徑是存在的。而後使用下邊的配置就能夠了。

  1. set idfile /var/monit/id
  2. set eventqueue
  3. basedir /var/monit

 

測試全局配置

如今「Global」部分就完成了。Monit配置文件看起來像這樣:

  1. # Global Section
  2. # status webpage and acl's
  3. set httpd port 1966and
  4. SSL ENABLE
  5. PEMFILE /var/certs/monit.pem
  6. allow monituser:romania
  7. allow localhost
  8. allow 192.168.0.0/16
  9. allow myhost.mydomain.ro
  10. # mail-server
  11. set mailserver smtp.monit.ro port 587
  12. # email-format
  13. set mail-format {
  14. from: monit@monit.ro
  15. subject: $SERVICE $EVENT at $DATE on $HOST
  16. message:Monit $ACTION $SERVICE $EVENT at $DATE on $HOST : $DESCRIPTION.
  17. Yours sincerely,
  18. Monit
  19. }
  20. set alert guletz@monit.ro
  21. # delay checks
  22. set daemon 120
  23. with start delay 240
  24. set logfile syslog facility log_daemon
  25. # idfile and mail queue path
  26. set idfile /var/monit/id
  27. set eventqueue
  28. basedir /var/monit

如今是時候驗證咱們的工做了,你能夠經過運行以下命令來驗證存在的配置文件(/etc/monit.conf):

  1. # monit -t
  2. Control file syntax OK

若是monit提示任何錯誤,請再檢查下配置文件。幸運的是,錯誤/警告信息是能夠幫助你發現問題的,好比:

  1. monit:Cannot stat the SSL server PEM file '/var/certs/monit.pem'--No such file or directory
  2. /etc/monit/monitrc:10:Warning: hostname did not resolve 'smtp.monit.ro'

一旦你確認配置文件沒問題了,能夠啓動monit守護進程,而後等2到3分鐘:

  1. # service monit start

若是你使用的是systemd,運行:

  1. # systemctl start monit

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

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

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

在這個教程的其他部分,咱們演示監控一個本地服務器和常見服務的方法。你會在官方wiki頁面看到不少有用的例子。其中的多數是能夠直接複製粘貼的!

 

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

咱們先來監控本地服務器的CPU、內存佔用。複製以下代碼段到配置文件中。

  1. check system localhost
  2. if loadavg (1min)>10then alert
  3. if loadavg (5min)>6then alert
  4. if memory usage >75%then alert
  5. if cpu usage (user)>70%then alert
  6. if cpu usage (system)>60%then alert
  7. if cpu usage (wait)>75%then alert

你能夠很容易理解上邊的配置。最上邊的check是指每一個監控週期(全局配置裏設置的120秒)都對本機進行下面的操做。若是知足了任何條件,monit守護進程就會使用郵件發送一條報警。

若是某個監控項不須要每一個週期都檢查,可使用以下格式,它會每240秒檢查一次平均負載。

  1. if loadavg (1min)>10for2 cycles then alert

 

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

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

  1. check file sshd_bin with path /usr/sbin/sshd

咱們還想檢查sshd的啓動腳本是否存在:

  1. check file sshd_init with path /etc/init.d/sshd

最後,咱們還想檢查sshd守護進程是否存活,而且在監聽22端口:

  1. check process sshd with pidfile /var/run/sshd.pid
  2. start program "/etc/init.d/sshd start"
  3. stop program "/etc/init.d/sshd stop"
  4. if failed port 22 protocol ssh then restart
  5. if5 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服務。

  1. check host MAIL with address 192.168.111.102
  2. if failed icmp type echo within 10 cycles then alert
  3. if failed port 25 protocol smtp then alert
  4. elseif recovered thenexec"/scripts/mail-script"
  5. if failed port 22 protocol ssh then alert
  6. 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怎麼樣?

相關文章
相關標籤/搜索