亚洲国产AV一区二区三区久久_乱人妻中文字幕视频_91麻豆精品国产一级_精品国产欧美另类一区

您的當(dāng)前位置: 首頁>>新聞中心>>服務(wù)器資訊

shell編程實(shí)戰(zhàn)之監(jiān)控端口(80端口、443端口等)

瀏覽量(116536) 時(shí)間:2020-09-23

一般企業(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)異常,需要立即告警。這里我們不打算通過進(jìn)程名來判斷服務(wù)的狀態(tài)。我們打算通過端口的監(jiān)聽來判斷服務(wù)的運(yùn)行狀態(tài)。

linux服務(wù)器上有一個(gè)命令可以用來查看端口狀態(tài):netstat。但是在centOS7上,需要先安裝net-tools工具,才有這個(gè)命令。已經(jīng)安裝這個(gè)工具包后,我們來使用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ù)。然后,我們通過grep命令,過濾掉第一行以及第二行

# 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

然后再通過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

最后再通過cut命令獲取到端口號(hào)。

# netstat -tlnp | grep tcp | awk '{print $4}' | cut -d: -f2

6379

80

22

88

443

27017

3306

通過上面的操作,我們能獲取目前服務(wù)器端口的情況,然后我們將需要運(yùn)行服務(wù)的端口存放在數(shù)組中,然后遍歷該數(shù)組和拿到的這些信息做對(duì)比。

ports="80 88 443 3306 6379 27017"



for port in $ports

do

echo $port

done

遍歷這些需要監(jiān)聽的端口后,我們來將端口與netstat獲取到的信息作對(duì)比。我們這里用grep命令來做判斷。下面我們給出完整的代碼:

#!/bin/bash

# 監(jiān)控服務(wù)器端口情況



export

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)控的腳本編寫還是很容易的。下面我們來測(cè)試下該腳本是否能正常監(jiān)控端口。所有服務(wù)都正常的情況下,執(zhí)行該腳本不會(huì)輸出任何信息。如果關(guān)閉了nginx服務(wù),則應(yīng)該出現(xiàn)信息。

首先,所有服務(wù)都正常的情況下,執(zhí)行腳本

# ./port.sh

# #不會(huì)有任何信息出現(xiàn)

現(xiàn)在我們來主動(dòng)關(guān)閉nginx服務(wù),然后再來運(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ù)去,沒分鐘執(zhí)行一次,當(dāng)發(fā)現(xiàn)指定端口沒有被監(jiān)聽,則觸發(fā)告警程序。



以上文章部分內(nèi)容采集于網(wǎng)絡(luò),如有侵權(quán)請(qǐng)聯(lián)系創(chuàng)一網(wǎng)客服處理,謝謝!

最新文章