日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux 进程管理与监控(supervisor and monit)

發(fā)布時間:2023/12/15 linux 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux 进程管理与监控(supervisor and monit) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、Supervisor


1、安裝

宿主機環(huán)境:( Centos 6.5 )

pip2.7?install?supervisor

2、創(chuàng)建配置文件

通過?echo_supervisord_conf?命令來創(chuàng)建配置文件:

echo_supervisord_conf?>/etc/supervisord.conf

3、主配置文件基本參數(shù)

[unix_http_server] file=/var/run/supervisor/supervisor.sock chmod=0700 chown=www:www username=admin password=123456[supervisord] logfile=/var/log/supervisord.log logfile_maxbytes=50MB logfile_backups=10 loglevel=info pidfile=/var/run/supervisor/supervisord.pid nodaemon=false minfds=1024 minprocs=200[rpcinterface:supervisor] supervisor.rpcinterface_factory?=?supervisor.rpcinterface:make_main_rpcinterface[supervisorctl] serverurl=unix:///var/run/supervisor/supervisor.sock[include] files=/etc/supervisord_child/*.ini


4、配置一個進程監(jiān)控

[program:CommentMsg] command=?/bin/php?/test/art?Comment:msg process_name=%(process_num)02d numprocs=5 autostart=true autorestart=true startsecs=2 startretries=10 redirect_stderr=true stdout_logfile=/var/log/supervisor/CommentMsg.log stdout_logfile_maxbytes=10MB stdout_logfile_backups=10


配置多個進程監(jiān)控

[program:CommentMsg] command=?/bin/php?/test/art?Comment:msg process_name=%(process_num)02d numprocs=5 autostart=true autorestart=true startsecs=2 startretries=10 redirect_stderr=true stdout_logfile=/var/log/supervisor/CommentMsg.log stdout_logfile_maxbytes=10MB stdout_logfile_backups=10[program:showAdd] command=?/bin/php?/test/artg?showAdd process_name=%(process_num)02d numprocs=5 autostart=true autorestart=true startsecs=2 startretries=10 redirect_stderr=true stdout_logfile=/var/log/supervisor/showAdd.log stdout_logfile_maxbytes=10MB stdout_logfile_backups=10


啟動服務(wù)

supervisord?-c?/etc/supervisord.conf

5、supervisorctl 常用指令

update?:重新讀取配置文件,且不會影響正在運行的程序;

start?:啟用進程

stop?:停止進程

restart?:重啟進程

reload?:重新載入配置文件,并重啟所有管理的進程。

status?:查看狀態(tài)


6、配置文件所有參數(shù)詳解

引用:http://lixcto.blog.51cto.com/4834175/1539136

[unix_http_server]???????????? file=/tmp/supervisor.sock???;?socket文件的路徑,supervisorctl用XML_RPC和supervisord通信就是通過它進行的。如果不設(shè)置的話,supervisorctl也就不能用了??不設(shè)置的話,默認為none。?非必須設(shè)置???????? ;chmod=0700?????????????????;?這個簡單,就是修改上面的那個socket文件的權(quán)限為0700不設(shè)置的話,默認為0700。?非必須設(shè)置 ;chown=nobody:nogroup???????;?這個一樣,修改上面的那個socket文件的屬組為user.group不設(shè)置的話,默認為啟動supervisord進程的用戶及屬組。非必須設(shè)置 ;username=user??????????????;?使用supervisorctl連接的時候,認證的用戶不設(shè)置的話,默認為不需要用戶。?非必須設(shè)置 ;password=123???????????????;?和上面的用戶名對應(yīng)的密碼,可以直接使用明碼,也可以使用SHA加密如:{SHA}82ab876d1387bfafe46cc1c8a2ef074eae50cb1d默認不設(shè)置。。。非必須設(shè)置;[inet_http_server]?????????;?偵聽在TCP上的socket,Web?Server和遠程的supervisorctl都要用到他不設(shè)置的話,默認為不開啟。非必須設(shè)置 ;port=127.0.0.1:9001????????;?這個是偵聽的IP和端口,偵聽所有IP用?:9001或*:9001。這個必須設(shè)置,只要上面的[inet_http_server]開啟了,就必須設(shè)置它 ;username=user??????????????;?這個和上面的uinx_http_server一個樣。非必須設(shè)置 ;password=123???????????????;?這個也一個樣。非必須設(shè)置[supervisord]????????????????;這個主要是定義supervisord這個服務(wù)端進程的一些參數(shù)的這個必須設(shè)置,不設(shè)置,supervisor就不用干活了 logfile=/tmp/supervisord.log?;?這個是supervisord這個主進程的日志路徑,注意和子進程的日志不搭嘎。默認路徑$CWD/supervisord.log,$CWD是當(dāng)前目錄。。非必須設(shè)置 logfile_maxbytes=50MB????????;?這個是上面那個日志文件的最大的大小,當(dāng)超過50M的時候,會生成一個新的日?志文件。當(dāng)設(shè)置為0時,表示不限制文件大小默認值是50M,非必須設(shè)置。?????????????? logfile_backups=10???????????;?日志文件保持的數(shù)量,上面的日志文件大于50M時,就會生成一個新文件。文件數(shù)量大于10時,最初的老文件被新文件覆蓋,文件數(shù)量將保持為10當(dāng)設(shè)置為0時,表示不限制文件的數(shù)量。默認情況下為10。。。非必須設(shè)置 loglevel=info????????????????;?日志級別,有critical,?error,?warn,?info,?debug,?trace,?or?blather等默認為info。。。非必須設(shè)置項 pidfile=/tmp/supervisord.pid?;?supervisord的pid文件路徑。默認為$CWD/supervisord.pid。。。非必須設(shè)置 nodaemon=false???????????????;?如果是true,supervisord進程將在前臺運行默認為false,也就是后臺以守護進程運行。。。非必須設(shè)置 minfds=1024??????????????????;?這個是最少系統(tǒng)空閑的文件描述符,低于這個值supervisor將不會啟動。系統(tǒng)的文件描述符在這里設(shè)置cat?/proc/sys/fs/file-max默認情況下為1024。。。非必須設(shè)置 minprocs=200?????????????????;?最小可用的進程描述符,低于這個值supervisor也將不會正常啟動。ulimit??-u這個命令,可以查看linux下面用戶的最大進程數(shù)默認為200。。。非必須設(shè)置 ;umask=022???????????????????;?進程創(chuàng)建文件的掩碼默認為022。。非必須設(shè)置項 ;user=chrism?????????????????;?這個參數(shù)可以設(shè)置一個非root用戶,當(dāng)我們以root用戶啟動supervisord之后。我這里面設(shè)置的這個用戶,也可以對supervisord進行管理默認情況是不設(shè)置。。。非必須設(shè)置項 ;identifier=supervisor???????;?這個參數(shù)是supervisord的標識符,主要是給XML_RPC用的。當(dāng)你有多個supervisor的時候,而且想調(diào)用XML_RPC統(tǒng)一管理,就需要為每個supervisor設(shè)置不同的標識符了默認是supervisord。。。非必需設(shè)置 ;directory=/tmp??????????????;?這個參數(shù)是當(dāng)supervisord作為守護進程運行的時候,設(shè)置這個參數(shù)的話,啟動supervisord進程之前,會先切換到這個目錄默認不設(shè)置。。。非必須設(shè)置 ;nocleanup=true??????????????;?這個參數(shù)當(dāng)為false的時候,會在supervisord進程啟動的時候,把以前子進程產(chǎn)生的日志文件(路徑為AUTO的情況下)清除掉。有時候咱們想要看歷史日志,當(dāng)?然不想日志被清除了。所以可以設(shè)置為true默認是false,有調(diào)試需求的同學(xué)可以設(shè)置為true。。。非必須設(shè)置 ;childlogdir=/tmp????????????;?當(dāng)子進程日志路徑為AUTO的時候,子進程日志文件的存放路徑。默認路徑是這個東西,執(zhí)行下面的這個命令看看就OK了,處理的東西就默認路徑python?-c?"import?tempfile;print?tempfile.gettempdir()"非必須設(shè)置 ;environment=KEY="value"?????;?這個是用來設(shè)置環(huán)境變量的,supervisord在linux中啟動默認繼承了linux的環(huán)境變量,在這里可以設(shè)置supervisord進程特有的其他環(huán)境變量。supervisord啟動子進程時,子進程會拷貝父進程的內(nèi)存空間內(nèi)容。?所以設(shè)置的這些環(huán)境變量也會被子進程繼承。小例子:environment=name="haha",age="hehe"默認為不設(shè)置。。。非必須設(shè)置 ;strip_ansi=false????????????;?這個選項如果設(shè)置為true,會清除子進程日志中的所有ANSI?序列。什么是ANSI序列呢?就是我們的\n,\t這些東西。默認為false。。。非必須設(shè)置;?the?below?section?must?remain?in?the?config?file?for?RPC ;?(supervisorctl/web?interface)?to?work,?additional?interfaces?may?be ;?added?by?defining?them?in?separate?rpcinterface:?sections [rpcinterface:supervisor]????;這個選項是給XML_RPC用的,當(dāng)然你如果想使用supervisord或者web?server?這?個選項必須要開啟的 supervisor.rpcinterface_factory?=?supervisor.rpcinterface:make_main_rpcinterface?[supervisorctl]??????????????;這個主要是針對supervisorctl的一些配置?? serverurl=unix:///tmp/supervisor.sock?;?這個是supervisorctl本地連接supervisord的時候,本地UNIX?socket路徑,注意這個是和前面的[unix_http_server]對應(yīng)的默認值就是unix:///tmp/supervisor.sock。。非必須設(shè)置 ;serverurl=http://127.0.0.1:9001?;?這個是supervisorctl遠程連接supervisord的時候,用到的TCP?socket路徑注意這個和前面的[inet_http_server]對應(yīng)默認就是http://127.0.0.1:9001。。。非必須項;username=chris??????????????;?用戶名默認空。。非必須設(shè)置 ;password=123????????????????;?密碼默認空。。非必須設(shè)置 ;prompt=mysupervisor?????????;?輸入用戶名密碼時候的提示符默認supervisor。。非必須設(shè)置 ;history_file=~/.sc_history??;?這個參數(shù)和shell中的history類似,我們可以用上下鍵來查找前面執(zhí)行過的命令默認是no?file的。。所以我們想要有這種功能,必須指定一個文件。。。非必須設(shè)置;?The?below?sample?program?section?shows?all?possible?program?subsection?values, ;?create?one?or?more?'real'?program:?sections?to?be?able?to?control?them?under ;?supervisor.;[program:theprogramname]??????;這個就是咱們要管理的子進程了,":"后面的是名字,最好別亂寫和實際進程有點關(guān)聯(lián)最好。這樣的program我們可以設(shè)置一個或多個,一個program就是要被管理的一個進程 ;command=/bin/cat??????????????;?這個就是我們的要啟動進程的命令路徑了,可以帶參數(shù)例子:/home/test.py?-a?'hehe'有一點需要注意的是,我們的command只能是那種在終端運行的進程,不能是守護進程。這個想想也知道了,比如說command=service?httpd?start。httpd這個進程被linux的service管理了,我們的supervisor再去啟動這個命令這已經(jīng)不是嚴格意義的子進程了。這個是個必須設(shè)置的項 ;process_name=%(program_name)s?;?這個是進程名,如果我們下面的numprocs參數(shù)為1的話,就不用管這個參數(shù)了,它默認值%(program_name)s也就是上面的那個program冒號后面的名字,但是如果numprocs為多個的話,那就不能這么干了。想想也知道,不可能每個進程都用同一個進程名吧。;numprocs=1????????????????????;?啟動進程的數(shù)目。當(dāng)不為1時,就是進程池的概念,注意process_name的設(shè)置默認為1????。。非必須設(shè)置 ;directory=/tmp????????????????;?進程運行前,會前切換到這個目錄默認不設(shè)置。。。非必須設(shè)置 ;umask=022?????????????????????;?進程掩碼,默認none,非必須 ;priority=999??????????????????;?子進程啟動關(guān)閉優(yōu)先級,優(yōu)先級低的,最先啟動,關(guān)閉的時候最后關(guān)閉默認值為999?。。非必須設(shè)置 ;autostart=true????????????????;?如果是true的話,子進程將在supervisord啟動后被自動啟動默認就是true???。。非必須設(shè)置 ;autorestart=unexpected????????;?這個是設(shè)置子進程掛掉后自動重啟的情況,有三個選項,false,unexpected和true。如果為false的時候,無論什么情況下,都不會被重新啟動,如果為unexpected,只有當(dāng)進程的退出碼不在下面的exitcodes里面定義的退?出碼的時候,才會被自動重啟。當(dāng)為true的時候,只要子進程掛掉,將會被無條件的重啟 ;startsecs=1???????????????????;?這個選項是子進程啟動多少秒之后,此時狀態(tài)如果是running,則我們認為啟動成功了默認值為1?。。非必須設(shè)置 ;startretries=3????????????????;?當(dāng)進程啟動失敗后,最大嘗試啟動的次數(shù)。。當(dāng)超過3次后,supervisor將把此進程的狀態(tài)置為FAIL默認值為3?。。非必須設(shè)置 ;exitcodes=0,2?????????????????;?注意和上面的的autorestart=unexpected對應(yīng)。。exitcodes里面的定義的退出碼是expected的。 ;stopsignal=QUIT???????????????;?進程停止信號,可以為TERM,?HUP,?INT,?QUIT,?KILL,?USR1,?or?USR2等信號默認為TERM?。。當(dāng)用設(shè)定的信號去干掉進程,退出碼會被認為是expected非必須設(shè)置 ;stopwaitsecs=10???????????????;?這個是當(dāng)我們向子進程發(fā)送stopsignal信號后,到系統(tǒng)返回信息給supervisord,所等待的最大時間。?超過這個時間,supervisord會向該子進程發(fā)送一個強制kill的信號。默認為10秒。。非必須設(shè)置 ;stopasgroup=false?????????????;?這個東西主要用于,supervisord管理的子進程,這個子進程本身還有子進程。那么我們?nèi)绻麅H僅干掉supervisord的子進程的話,子進程的子進程有可能會變成孤兒進程。所以咱們可以設(shè)置可個選項,把整個該子進程的整個進程組都干掉。?設(shè)置為true的話,一般killasgroup也會被設(shè)置為true。需要注意的是,該選項發(fā)送的是stop信號默認為false。。非必須設(shè)置。。 ;killasgroup=false?????????????;?這個和上面的stopasgroup類似,不過發(fā)送的是kill信號 ;user=chrism???????????????????;?如果supervisord是root啟動,我們在這里設(shè)置這個非root用戶,可以用來管理該program默認不設(shè)置。。。非必須設(shè)置項 ;redirect_stderr=true??????????;?如果為true,則stderr的日志會被寫入stdout日志文件中默認為false,非必須設(shè)置 ;stdout_logfile=/a/path????????;?子進程的stdout的日志路徑,可以指定路徑,AUTO,none等三個選項。設(shè)置為none的話,將沒有日志產(chǎn)生。設(shè)置為AUTO的話,將隨機找一個地方生成日志文件,而且當(dāng)supervisord重新啟動的時候,以前的日志文件會被清空。當(dāng)?redirect_stderr=true的時候,sterr也會寫進這個日志文件 ;stdout_logfile_maxbytes=1MB???;?日志文件最大大小,和[supervisord]中定義的一樣。默認為50 ;stdout_logfile_backups=10?????;?和[supervisord]定義的一樣。默認10 ;stdout_capture_maxbytes=1MB???;?這個東西是設(shè)定capture管道的大小,當(dāng)值不為0的時候,子進程可以從stdout發(fā)送信息,而supervisor可以根據(jù)信息,發(fā)送相應(yīng)的event。默認為0,為0的時候表達關(guān)閉管道。。。非必須項 ;stdout_events_enabled=false???;?當(dāng)設(shè)置為ture的時候,當(dāng)子進程由stdout向文件描述符中寫日志的時候,將觸發(fā)supervisord發(fā)送PROCESS_LOG_STDOUT類型的event默認為false。。。非必須設(shè)置 ;stderr_logfile=/a/path????????;?這個東西是設(shè)置stderr寫的日志路徑,當(dāng)redirect_stderr=true。這個就不用設(shè)置了,設(shè)置了也是白搭。因為它會被寫入stdout_logfile的同一個文件中默認為AUTO,也就是隨便找個地存,supervisord重啟被清空。。非必須設(shè)置 ;stderr_logfile_maxbytes=1MB???;?這個出現(xiàn)好幾次了,就不重復(fù)了 ;stderr_logfile_backups=10?????;?這個也是 ;stderr_capture_maxbytes=1MB???;?這個一樣,和stdout_capture一樣。?默認為0,關(guān)閉狀態(tài) ;stderr_events_enabled=false???;?這個也是一樣,默認為false ;environment=A="1",B="2"???????;?這個是該子進程的環(huán)境變量,和別的子進程是不共享的 ;serverurl=AUTO????????????????;?;?The?below?sample?eventlistener?section?shows?all?possible ;?eventlistener?subsection?values,?create?one?or?more?'real' ;?eventlistener:?sections?to?be?able?to?handle?event?notifications ;?sent?by?supervisor.;[eventlistener:theeventlistenername]?;這個東西其實和program的地位是一樣的,也是suopervisor啟動的子進程,不過它干的活是訂閱supervisord發(fā)送的event。他的名字就叫l(wèi)istener了。我們可以在listener里面做一系列處理,比如報警等等樓主這兩天干的活,就是弄的這玩意 ;command=/bin/eventlistener????;?這個和上面的program一樣,表示listener的可執(zhí)行文件的路徑 ;process_name=%(program_name)s?;?這個也一樣,進程名,當(dāng)下面的numprocs為多個的時候,才需要。否則默認就OK了 ;numprocs=1????????????????????;?相同的listener啟動的個數(shù) ;events=EVENT??????????????????;?event事件的類型,也就是說,只有寫在這個地方的事件類型。才會被發(fā)送;buffer_size=10????????????????;?這個是event隊列緩存大小,單位不太清楚,樓主猜測應(yīng)該是個吧。當(dāng)buffer超過10的時候,最舊的event將會被清除,并把新的event放進去。默認值為10。。非必須選項 ;directory=/tmp????????????????;?進程執(zhí)行前,會切換到這個目錄下執(zhí)行默認為不切換。。。非必須 ;umask=022?????????????????????;?淹沒,默認為none,不說了 ;priority=-1???????????????????;?啟動優(yōu)先級,默認-1,也不扯了 ;autostart=true????????????????;?是否隨supervisord啟動一起啟動,默認true ;autorestart=unexpected????????;?是否自動重啟,和program一個樣,分true,false,unexpected等,注意unexpected和exitcodes的關(guān)系 ;startsecs=1???????????????????;?也是一樣,進程啟動后跑了幾秒鐘,才被認定為成功啟動,默認1 ;startretries=3????????????????;?失敗最大嘗試次數(shù),默認3 ;exitcodes=0,2?????????????????;?期望或者說預(yù)料中的進程退出碼, ;stopsignal=QUIT???????????????;?干掉進程的信號,默認為TERM,比如設(shè)置為QUIT,那么如果QUIT來干這個進程那么會被認為是正常維護,退出碼也被認為是expected中的 ;stopwaitsecs=10???????????????;?max?num?secs?to?wait?b4?SIGKILL?(default?10) ;stopasgroup=false?????????????;?send?stop?signal?to?the?UNIX?process?group?(default?false) ;killasgroup=false?????????????;?SIGKILL?the?UNIX?process?group?(def?false) ;user=chrism???????????????????;設(shè)置普通用戶,可以用來管理該listener進程。默認為空。。非必須設(shè)置 ;redirect_stderr=true??????????;?為true的話,stderr的log會并入stdout的log里面默認為false。。。非必須設(shè)置 ;stdout_logfile=/a/path????????;?這個不說了,好幾遍了 ;stdout_logfile_maxbytes=1MB???;?這個也是 ;stdout_logfile_backups=10?????;?這個也是 ;stdout_events_enabled=false???;?這個其實是錯的,listener是不能發(fā)送event ;stderr_logfile=/a/path????????;?這個也是 ;stderr_logfile_maxbytes=1MB???;?這個也是 ;stderr_logfile_backups????????;?這個不說了 ;stderr_events_enabled=false???;?這個也是錯的,listener不能發(fā)送event ;environment=A="1",B="2"???????;?這個是該子進程的環(huán)境變量默認為空。。。非必須設(shè)置 ;serverurl=AUTO????????????????;?override?serverurl?computation?(childutils);?The?below?sample?group?section?shows?all?possible?group?values, ;?create?one?or?more?'real'?group:?sections?to?create?"heterogeneous" ;?process?groups.;[group:thegroupname]??;這個東西就是給programs分組,劃分到組里面的program。我們就不用一個一個去操作了我們可以對組名進行統(tǒng)一的操作。?注意:program被劃分到組里面之后,就相當(dāng)于原來的配置從supervisor的配置文件里消失了。。。supervisor只會對組進行管理,而不再會對組里面的單個program進行管理了 ;programs=progname1,progname2??;?組成員,用逗號分開這個是個必須的設(shè)置項 ;priority=999??????????????????;?優(yōu)先級,相對于組和組之間說的默認999。。非必須選項;?The?[include]?section?can?just?contain?the?"files"?setting.??This ;?setting?can?list?multiple?files?(separated?by?whitespace?or ;?newlines).??It?can?also?contain?wildcards.??The?filenames?are ;?interpreted?as?relative?to?this?file.??Included?files?*cannot* ;?include?files?themselves.;[include]?????????????????????????;這個東西挺有用的,當(dāng)我們要管理的進程很多的時候,寫在一個文件里面就有點大了。我們可以把配置信息寫到多個文件中,然后include過來 ;files?=?relative/directory/*.ini


7、常見錯誤總結(jié)

BACKOFF Exited too quickly (process log may have details)

由于supervisor??比較適合監(jiān)控業(yè)務(wù)應(yīng)用,且只能監(jiān)控前臺程序,php fork方式實現(xiàn)的daemon和其他的daemon程序不能用它監(jiān)控,否則就會出現(xiàn)偶爾報錯。

假如 redis 需要用supervisor監(jiān)控,需要在redis主配置文件中,將其修改為非daemon模式啟動。

更多詳細用法見官網(wǎng):?http://supervisord.org/



二、Monit


? ? monit是一個開源的輕量級監(jiān)控工具,功能十分強大。可以從多個層面進行監(jiān)控,可以自動維護進程,發(fā)送郵件報警等。

  • 系統(tǒng)監(jiān)控:進程狀態(tài),系統(tǒng)負載,cpu負載,內(nèi)存占用等。

  • 進程監(jiān)控:monit可以監(jiān)控守護進程,當(dāng)被監(jiān)控進程異常退出時,可以自動被拉起。

  • 文件系統(tǒng):Monit可以監(jiān)控本地文件、目錄、文件系統(tǒng)的變化,包括時間戳、校驗值、大小的變化。例如,可以監(jiān)控文件sha1以及md5的值,來監(jiān)控文件是否發(fā)生變化

  • 網(wǎng)絡(luò)監(jiān)控:monit可以監(jiān)控網(wǎng)絡(luò)連接,支持TCP、UDP、Unix domain sockets以及HTTP、SMTP等。


? ? ?monit 官網(wǎng):https://mmonit.com/monit/


1、程序安裝

#?安裝方式分為兩種#?使用?yum?安裝yum?install?monit?-y#?源碼安裝tar?xf?monit-5.18.tar.gz cd?monit-5.18 ./configure?--prefix=/usr/local/monit make?&&?make?install#?提供主配置文件cp?monitrc?/etc/monitrc


2、配置應(yīng)用解析

主配置文件:/etc/monitrc

############################################################################### ##?Monit?control?file ################################################################################?檢查周期,默認為2分鐘,可以根據(jù)需要自行調(diào)節(jié),這里改成30秒。 set?daemon??30#?日志文件 set?logfile?/var/log/monit.log#?設(shè)置郵件服務(wù)器 set?mailserver'smtp.163.com'?????????????????#?指定郵件服務(wù)器地址,IP?or?HostNameport?465using?sslusername?'adminevp@163.com'password?'123456'#?設(shè)置告警郵件的接收地址 set?alert?123456@qq.com#?設(shè)置郵件格式 set?mail-format?{from:?adminevp@163.com??#?郵件發(fā)送人?—?如果使用網(wǎng)易郵箱,郵件發(fā)送人必須為郵箱賬號,或者包含郵箱賬號subject:?monit?alert?--??$EVENT?$SERVICEmessage:?$EVENT?Service?$SERVICEDate:????????$DATEAction:??????$ACTIONHost:????????$HOSTDescription:?$DESCRIPTIONYour?faithful?employee,Monit }#?monit內(nèi)置了一個Web頁面的狀態(tài)監(jiān)視set?httpd?port?2812?anduse?address?0.0.0.0????#?設(shè)置監(jiān)聽的IPallow?115.116.139.162?????#?設(shè)置允許訪問的IPallow?localhostallow?192.168.0.0/16?allow?admin:monit??????#?設(shè)置用于訪問驗證的用戶名:密碼#?可以包含擴展配置文件,便于配置的分類管理 include?/etc/monit.d/*


系統(tǒng)運行狀況監(jiān)控?

system_base.conf

#?主機名,可以是IP或者域名(其他為默認參數(shù),可以根據(jù)自己需求微調(diào)) check?system?www.example.comif?loadavg?(1min)?>?4?then?alertif?loadavg?(5min)?>?2?then?alertif?memory?usage?>?75%?then?alertif?cpu?usage?(user)?>?70%?then?alertif?cpu?usage?(system)?>?30%?then?alertif?cpu?usage?(wait)?>?20%?then?alert


監(jiān)控Nginx

nginx_monit.conf

#?提供主進程pid文件 check?process?nginx?with?pidfile?/alidata/server/nginx/logs/nginx.pid#?進程啟動命令,必須寫絕對路徑start?program?=?"/etc/init.d/nginx?start"?with?timeout?30?seconds#?進程關(guān)閉命令stop?program??=?"/etc/init.d/nginx?stop"#?端口狀態(tài)檢測,當(dāng)狀態(tài)返回異常,則重啟服務(wù)。if?failed?host?115.116.139.162?port?8081?protocol?http?then?restart#?當(dāng)端口狀態(tài)異常,報警????if?failed?host?115.116.139.162?port?8081?protocol?http?then?alert#?在5個監(jiān)視周期中,重啟了服務(wù)3次,則超時不再監(jiān)視。?因為如果重啟了多次不成功,很有可能繼續(xù)重啟下去也不會成功,避免一直無效的重啟,白白消耗系統(tǒng)資源影響主機上其他進程的工作,這時應(yīng)該通知人工處理。if?3?restarts?within?5?cycles?then?timeout#?如果在5個監(jiān)視周期內(nèi),該服務(wù)的CPU使用率都超過90%則告警。???????if?cpu?usage?>?90%?for?5?cycles?then?alert#?設(shè)置分組,可選group?server#???可選的ssl端口的監(jiān)控,如果有的話 #????if?failed?port?443?type?tcpssl?protocol?http #???????with?timeout?15?seconds #???????then?restart


監(jiān)控Apache

apache_monit.conf

check?process?apache?with?pidfile?/var/run/apache2.pidstart?program?=?"/etc/init.d/apache2?start"stop?program??=?"/etc/init.d/apache2?stop"#?Apache?耗系統(tǒng)資源比較厲害,額外添加一些關(guān)于這方面的監(jiān)控設(shè)置if?cpu?>?50%?for?2?cycles?then?alertif?cpu?>?70%?for?5?cycles?then?restartif?totalmem?>?1500?MB?for?10?cycles?then?restartif?children?>?250?then?restartif?loadavg(5min)?greater?than?10?for?20?cycles?then?stopif?failed?host?www.example.com?port?8080?protocol?http?then?restartif?3?restarts?within?5?cycles?then?timeoutgroup?server#?可選,依賴于nginxdepends?on?nginx


監(jiān)控spawn-fcgi程序

check?process?spawn-fcgi?with?pidfile?/var/run/spawn-fcgi.pid#?spawn-fcgi一定要帶-P參數(shù)才會生成pid文件,默認是沒有的start?program?=?"/usr/bin/spawn-fcgi?-a?127.0.0.1?-p?8081?-C?10?-u?userxxx?-g?groupxxx?-P?/var/run/spawn-fcgi.pid?-f?/usr/bin/php-cgi"stop?program?=?"/usr/bin/killall?/usr/bin/php-cgi"#?fast-cgi走的不是http協(xié)議,monit的protocol參數(shù)也沒有cgi對應(yīng)的設(shè)置,這里去掉protocol?http即可。if?failed?host?127.0.0.1?port?8081?then?restartif?3?restarts?within?5?cycles?then?timeoutgroup?serverdepends?on?nginx


監(jiān)控ssh

check?process?sshd?with?pidfile?/var/run/sshd.pidstart?program??"/etc/init.d/sshd?start"stop?program??"/etc/init.d/sshd?stop"if?failed?port?22?protocol?SSH?then?restartif?5?restarts?within?5?cycles?then?timeout


監(jiān)控MySQL

mysql_monit.conf

check?process?mysql?with?pidfile?/var/run/mysqld/mysqld.pidstart?program?=?"/etc/init.d/mysqld?start"stop?program?=?"/etc/init.d/mysqld?stop"if?failed?host?127.0.0.1?port?3306?then?restartif?5?restarts?within?5?cycles?then?timeout


設(shè)置開啟啟動

echo '/usr/local/monit/bin/monit -c /etc/monitrc' >>?/etc/rc.d/rc.local


monit 命令行操作

?monit start nginx ? 啟動進程

?monit stop nginx ? 關(guān)閉進程

?monit -h ? ? ? ? ? ? ? ?查看幫助 ??


創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的Linux 进程管理与监控(supervisor and monit)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。