進程監控工具Supervisor 啟動MongoDB

來源:互聯網
上載者:User

進程監控工具Supervisor 啟動MongoDB

一什麼是supervisor

Superviosr是一個UNIX-like系統上的進程監控工具。 Supervisor是一個Python開發的client/server系統,可以管理和監控*nix上面的進程。不過同daemontools一樣,它也不能監控daemon進程

官網:http://supervisord.org/ 

二為啥用supervisor 

 部署簡單 : 為啥簡單呢?因為咱們通常管理linux進程的時候,一般來說都需要自己編寫一個能夠實現進程start/stop/restart/reload功能的指令碼,然後丟到/etc/init.d/下面。這麼做有很多不好的地方,第一我們要編寫這個指令碼,這就很耗時耗力了。第二,當這個進程掛掉的時候,linux不會自動重啟它的,想要自動重啟的話,我們還要自己寫一個監控重啟指令碼。而,supervisor則可以完美的解決這些問題。好,怎麼解決的呢,其實supervisor管理進程,就是通過fork/exec的方式把這些被管理的進程,當作supervisor的子進程來啟動。這樣的話,我們只要在supervisor的設定檔中,把要管理的進程的可執行檔的路徑寫進去就OK了。這樣就省下了我們如同linux管理進程的時候,自己寫控制指令碼的麻煩了。第二,被管理進程作為supervisor的子進程,當子進程掛掉的時候,父進程可以準確擷取子進程掛掉的資訊的,所以當然也就可以對掛掉的子進程進行自動重啟了,當然重啟還是不重啟,也要看你的設定檔裡面有木有設定autostart=true了,這是後話。

集中管理: supervisor管理的進程,進程組資訊,全部都寫在一個ini格式的檔案裡就OK了。而且,我們管理supervisor的時候的可以在本地進行管理,也可以遠端管理,而且supervisor提供了一個web介面,我們可以在web介面上監控,管理進程。 當然了,本地,遠程和web管理的時候,需要調用supervisor的xml_rpc介面,這個也是後話。

supervisor管理的進程,進程組資訊,全部都寫在一個ini格式的檔案裡就OK了。而且,我們管理supervisor的時候的可以在本地進行管理,也可以遠端管理,而且supervisor提供了一個web介面,我們可以在web介面上監控,管理進程。 當然了,本地,遠程和web管理的時候,需要調用supervisor的xml_rpc介面,這個也是後話。

精確

為啥說精確呢?因為linux對進程狀態的反饋,有時候不太準確。為啥不準確?這個樓主也不知道啊,官方文檔是這麼說的,知道的告訴樓主一下吧,感激不盡。而supervisor監控子進程,得到的子進程狀態無疑是準確的。

進程組

supervisor可以對進程組統一管理,也就是說咱們可以把需要管理的進程寫到一個組裡面,然後我們把這個組作為一個對象進行管理,如啟動,停止,重啟等等操作。而linux系統則是沒有這種功能的,我們想要停止一個進程,只能一個一個的去停止,要麼就自己寫個指令碼去大量停止。

許可權

大夥都知道linux的進程,特別是偵聽在1024連接埠之下的進程,一般使用者大多數情況下,是不能對其進行控制的。想要控制的話,必須要有root許可權。而supervisor提供了一個功能,可以為supervisord或者每個子進程,設定一個非root的user,這個user就可以管理它對應的進程了。

不過這功能,用不用就看大夥自己的環境了

三 supervisor結構

Supervisord :主進程,負責管理進程的server,它會根據設定檔建立指定數量的應用程式的子進程,管理子進程的整個生命週期,對crash的進程重啟,對進程變化發送事件通知等。同時內建web server和XML-RPC Interface,輕鬆實現進程管理。

Supervisorctl: 管理client,使用者通過命令列發送訊息給supervisord,可以查看進程狀態,載入設定檔,啟停進程,查看進程標準輸出和錯誤輸出,遠程操作等。

Web server: superviosr提供了web server功能,可通過web控制進程。

XML-RPC interface: XML-RPC介面,提供XML-RPC服務來對子進程進行管理,監控

四安裝部署

為了統一python版本和各種依賴庫,推薦使用pyrun代替系統的python進行部署,同時需要在pyrun安裝pip,將安裝包下載至pkg目錄,執行如下命令:

/data/pyrun/bin/pip install --no-index -f pkg meld3==1.0.0

/data/pyrun/bin/pip install --no-index -f pkg elementtree==1.2.6-20050316

/data/pyrun/bin/pip install --no-index -f pkg supervisor==3.2.0

如果機器無法連網,可以源碼安裝:

1) 依賴 python,可將python版本升級

2) 需要第三方包 meld3、setuptools、ElementTree

setuptools (latest) from http://pypi.python.org/pypi/setuptools.

meld3 (latest) from http://www.plope.com/software/meld3/.

elementtree (latest) from http://effbot.org/downloads#elementtree.

3) root解壓相關包,大量安裝。

五配置

Supervisor 的設定檔命名為 supervisord.conf,它為 supervisord(Supervisor 的主服務命令) 和 supervisorctl(Supervisor 的監控管理命令) 提供配置選項設定。 Supervisor 並不規定設定檔 supervisord.conf 的存放位置,Supervisor 服務啟動的時候預設會在:

  • $CWD/supervisord.conf
  • $CWD/etc/supervisord.conf
  • /etc/supervisord.conf

這幾個目錄位置尋找設定檔 supervisord.conf。

Supervisor 也提供參數 "-c" 來指定設定檔的目錄路徑。
在終端輸入 "echo_supervisord_conf" 命令可查看 Supervisor 的預設配置的內容。

產生一份預設的設定檔:

echo_supervisord_conf > /etc/supervisord.conf

supervisor配置比較簡單,以下幾個配置項滿足基本的需求,更多配置項請參考官方配置說明

[supervisord]
nodeamon = false #以deamon方式啟動進程

[supervisorctl] #使用系統預設配置項

[inet_http_server] #web管理頁面的連接埠和使用者密碼
port = 8080

username = user

password = pwd

[rpcinterface:supervisor] #xml-rpc介面相關配置
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[program:mongodb]

command=/data1/mongodb_2.4.7_build/mongod -config /data1/mongodbrs/config/mongodb.conf --directoryperdb --quiet --profile 1 --slowms 1000 --noprealloc --shardsvr

directory=/data1/mongodb_2.4.7_build

autostart=false

user=root

注意預設設定檔的最後幾行

你可以在supervisord.conf檔案相同目錄下supervisord.d目錄內添加.ini檔案分開配置

[include]

files = supervisord.d/*.ini

注意:被監控的進程要以非daemon方式運行,以mongodb為例,需要去掉mongodb進程啟動命令裡的--fork 參數

六使用

#  啟動supervisor

  python /usr/bin/supervisord

#  啟動監控的進程

    supervisorctl start all

#  關閉監控的進程

      supervisorctl stop all

#  查看狀態

      supervisorctl status

# 重新載入設定檔:

supervisorctl reload

其實,可以通過supervisorctl開啟supervisor的命令列控制台,然後輸入help可以查看看用的命令,然後help+命令可以查看每個命令的具體功能

七 web控制

在 supervisord.conf中配置[inet_http_server],

[inet_http_server]

port = 0.0.0.0:8080 #IP和綁定連接埠

username = admin #管理員名稱

password = 123456 #管理員密碼

這樣,在瀏覽器中輸入配置中寫的地址和連接埠號碼,輸入配置好的使用者名稱和密碼,便可以看到基於網頁的控制台介面。從中,可以察看supervisor監控的>資訊,可以察看進程的日誌等。

瀏覽器訪問:http://10.14.4.84:8080/,(這裡的IP為部署supervisor的IP)

八、監控警示

如果需求只是自動拉起crash的進程,通過命令列對進程進行管理,以上內容足矣。supervisor 3.0版本引入了事件,利用這個特性我們實現即時監控進程狀態並警示。

首先瞭解一下supervisor提供的事件,supervisor通過子進程對應用程式進行管理,監控程式同樣作為一個子進程運行,子進程的stdin、stdout、stderr都已經被重新導向。事件處理過程如下:

  • 作為監聽程式的子進程向stdout寫入READY\n
  • 事件發生時,supervisor會選擇一個處於Ready狀態的子進程的stdin寫入事件內容
  • 該子進程事件處理完畢後向stdout寫入OK\n或FAIL\n,反饋處理結果
  • 重複上述操作

supervisor提供的多種事件類型,包括:進程狀態事件、supervisor狀態事件、定時事件、xmlrpc呼叫事件、進程日誌事件等等。我們主要關注進程狀態相關事件。supervisor對進程定義了如下狀態,每個狀態的切換都會觸發相應的事件。

監控程式可以使用任何語言編寫,只要按照supervisor的協議格式正確的處理事件訊息即可。推薦使用python作為監控程式,supervisor提供了一個childutils模組使編寫處理常式更簡單。

更多MongoDB相關教程見以下內容:

CentOS 編譯安裝 MongoDB與mongoDB的php擴充

CentOS 6 使用 yum 安裝MongoDB及伺服器端配置

Ubuntu 13.04下安裝MongoDB2.4.3

MongoDB入門必讀(概念與實戰並重)

Ubunu 14.04下MongoDB的安裝指南

《MongoDB 權威指南》(MongoDB: The Definitive Guide)英文文字版[PDF]

Nagios監控MongoDB分區叢集服務實戰

基於CentOS 6.5作業系統搭建MongoDB服務

MongoDB 的詳細介紹:請點這裡
MongoDB 的:請點這裡

九、延伸閱讀

github上2個基於supervisor二次開發的集中進程管理工具,可在一個頁面下管理多台機器的進程。

https://github.com/mlazarov/supervisord-monitor

https://github.com/TAKEALOT/nodervisor

本文永久更新連結地址:

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.