建站服務(wù)器
小編給大家分享一下shell編程實(shí)戰(zhàn)之如何監(jiān)控端口,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
一般企業(yè)用的服務(wù)器上面都會(huì)跑各種服務(wù),比如nginx、php、mysql、Redis、MongoDB等等。一般系統(tǒng)的運(yùn)行可能會(huì)需要多個(gè)服務(wù)的配合,比如我司的系統(tǒng)需要php、Mysql、redis、apache、MongoDB服務(wù)。這些服務(wù)缺一不可。
所以我們要實(shí)時(shí)監(jiān)控這些服務(wù),如果發(fā)現(xiàn)有服務(wù)出現(xiàn)異常,需要立即告警。這里我們不打算通過(guò)進(jìn)程名來(lái)判斷服務(wù)的狀態(tài)。我們打算通過(guò)端口的監(jiān)聽(tīng)來(lái)判斷服務(wù)的運(yùn)行狀態(tài)。
linux服務(wù)器上有一個(gè)命令可以用來(lái)查看端口狀態(tài):netstat。但是在centOS7上,需要先安裝net-tools工具,才有這個(gè)命令。已經(jīng)安裝這個(gè)工具包后,我們來(lái)使用netstat命令,看看它會(huì)顯示哪些信息
# netstat -tlnp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 11213/redis-server tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1556/nginx: master tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 984/sshd tcp 0 0 127.0.0.1:88 0.0.0.0:* LISTEN 17446/httpd tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 1556/nginx: master tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN 25859/mongod tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 7138/MYSQLd
上面顯示的信息,不管是端口6379的redis,還是3306的mysql等等,都是運(yùn)行我司系統(tǒng)必須的服務(wù)。然后,我們通過(guò)grep命令,過(guò)濾掉第一行以及第二行
# netstat -tlnp | grep tcp tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 11213/redis-server tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1556/nginx: master tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 984/sshd tcp 0 0 127.0.0.1:88 0.0.0.0:* LISTEN 17446/httpd tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 1556/nginx: master tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN 25859/mongod tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 7138/mysqld
然后再通過(guò)awk命令獲取第四列的信息。
# netstat -tlnp | grep tcp | awk '{print $4}' 127.0.0.1:6379 0.0.0.0:80 0.0.0.0:22 127.0.0.1:88 0.0.0.0:443 127.0.0.1:27017 0.0.0.0:3306
最后再通過(guò)cut命令獲取到端口號(hào)。
# netstat -tlnp | grep tcp | awk '{print $4}' | cut -d: -f2 6379 80 22 88 443 27017 3306
通過(guò)上面的操作,我們能獲取目前服務(wù)器端口的情況,然后我們將需要運(yùn)行服務(wù)的端口存放在數(shù)組中,然后遍歷該數(shù)組和拿到的這些信息做對(duì)比。
ports="80 88 443 3306 6379 27017" for port in $ports do echo $port done
遍歷這些需要監(jiān)聽(tīng)的端口后,我們來(lái)將端口與netstat獲取到的信息作對(duì)比。我們這里用grep命令來(lái)做判斷。下面我們給出完整的代碼:
#!/bin/bash # 監(jiān)控服務(wù)器端口情況 export LANG=en ports="80 88 443 3306 6379 27017" netstat_info=$(netstat -tlnp | grep tcp | awk '{print $4}' | cut -d: -f2) for port in $ports do flag=$(echo $netstat_info | grep $port) if [ -z "$flag" ];then echo "$port is dead" fi done
對(duì)于端口監(jiān)控的腳本編寫(xiě)還是很容易的。下面我們來(lái)測(cè)試下該腳本是否能正常監(jiān)控端口。所有服務(wù)都正常的情況下,執(zhí)行該腳本不會(huì)輸出任何信息。如果關(guān)閉了nginx服務(wù),則應(yīng)該出現(xiàn)信息。
首先,所有服務(wù)都正常的情況下,執(zhí)行腳本
# ./port.sh # #不會(huì)有任何信息出現(xiàn)
現(xiàn)在我們來(lái)主動(dòng)關(guān)閉nginx服務(wù),然后再來(lái)運(yùn)行該腳本,查看會(huì)出現(xiàn)什么信息
# /etc/init.d/nginx stop Stoping nginx... done # ./port.sh 80 is dead 443 is dead
由此得知,該腳本能正常監(jiān)控服務(wù)器端口情況。日常工作中,經(jīng)常將上述腳本和定時(shí)任務(wù)以及告警程序一起使用。將此腳本發(fā)到定人任務(wù)去,沒(méi)分鐘執(zhí)行一次,當(dāng)發(fā)現(xiàn)指定端口沒(méi)有被監(jiān)聽(tīng),則觸發(fā)告警程序。
以上是shell編程實(shí)戰(zhàn)之如何監(jiān)控端口的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
網(wǎng)頁(yè)名稱(chēng):shell編程實(shí)戰(zhàn)之如何監(jiān)控端口
當(dāng)前地址:http://www.sd-ha.com/article20/cjssco.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、品牌網(wǎng)站制作、網(wǎng)站策劃、動(dòng)態(tài)網(wǎng)站、網(wǎng)站排名、響應(yīng)式網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容