進程監控工具supervisor 啓動Mongodb

進程監控工具supervisor 啓動Mongodbhtml

一什麼是supervisornode

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

官網:http://supervisord.org/ linux

二爲啥用supervisorios

 

 部署簡單 : 爲啥簡單呢?由於我們一般管理linux進程的時候,通常來講都須要本身編寫一個可以實現進程start/stop/restart/reload功能的腳本,而後丟到/etc/init.d/下面。這麼作有不少很差的地方,第一咱們要編寫這個腳本,這就很耗時耗力了。第二,當這個進程掛掉的時候,linux不會自動重啓它的,想要自動重啓的話,咱們還要本身寫一個監控重啓腳本。而,supervisor則能夠完美的解決這些問題。好,怎麼解決的呢,其實supervisor管理進程,就是經過fork/exec的方式把這些被管理的進程,看成supervisor的子進程來啓動。這樣的話,咱們只要在supervisor的配置文件中,把要管理的進程的可執行文件的路徑寫進去就OK了。這樣就省下了咱們如同linux管理進程的時候,本身寫控制腳本的麻煩了。第二,被管理進程做爲supervisor的子進程,當子進程掛掉的時候,父進程能夠準確獲取子進程掛掉的信息的,因此固然也就能夠對掛掉的子進程進行自動重啓了,固然重啓仍是不重啓,也要看你的配置文件裏面有木有設置autostart=true了,這是後話。git

   集中管理: supervisor管理的進程,進程組信息,所有都寫在一個ini格式的文件裏就OK了。並且,咱們管理supervisor的時候的能夠在本地進行管理,也能夠遠程管理,並且supervisor提供了一個web界面,咱們能夠在web界面上監控,管理進程。 固然了,本地,遠程和web管理的時候,須要調用supervisor的xml_rpc接口,這個也是後話。github

  supervisor管理的進程,進程組信息,所有都寫在一個ini格式的文件裏就OK了。並且,咱們管理supervisor的時候的能夠在本地進行管理,也能夠遠程管理,並且supervisor提供了一個web界面,咱們能夠在web界面上監控,管理進程。 固然了,本地,遠程和web管理的時候,須要調用supervisor的xml_rpc接口,這個也是後話。web

精確mongodb

爲啥說精確呢?由於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) 須要第三方包 meld3setuptoolsElementTree

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)
clip_image002[4]

8、監控告警

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

首先了解一下supervisor提供的事件,supervisor經過子進程對應用程序進行管理,監控程序一樣做爲一個子進程運行,子進程的stdin、stdout、stderr都已經被重定向。事件處理過程以下:

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

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

clip_image003[5]

監控程序可使用任何語言編寫,只要按照supervisor的協議格式正確的處理事件消息便可。推薦使用python做爲監控程序,supervisor提供了一個childutils模塊使編寫處理程序更簡單。

9、延伸閱讀

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

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

https://github.com/TAKEALOT/nodervisor

相關文章
相關標籤/搜索